Menu déroulant conditionnels successifs google sheet
Posté : dim. 10 déc. 2023 11:24
Bonjour à Tous,
J'ai un petit soucis de menu déroulant conditionnels comme indiqué.
Je n'arrive pas à faire 3 menus conditionnels successifs. J'ai d'abord tenté en utilisant des formules sheet sans succès puis j'ai fait des essais avec le script mais je suis toujours bloqué au 3ème qui ne fonctionne pas correctement.
Est-ce que quelqu'un pourrait m'aiguiller dans ce problème ?
https://ibb.co/XLrzvHV
https://ibb.co/0Gvn2Xz
Sur la première image, la feuille principale où je souhaiterai avoir mes 3 menus déroulant sur toute la colonne excepté la 1ere ligne.
Sur la deuxième image, la structure de mes informations.
Pour illustrer d'un example, dans A2 je devrais avoir un menu déroulant avec CK, H&M et Dior.
Si je choisis H&M il devrait me proposer dans B2 un menu déroulant avec Milan, Berlin et Venise.
Si je choisis Venise Il devrait me proposer dans C2 un ménu déroulant avec Pull et T-Shirt.
Attention, les Lieux et les produits peuvent être identiques d'une société à une autre.
Voilà les deux premiers scripts (pour colonne A et B) :
function setupScrollingMenu() {
var feuille = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Feuille principale");
var dvListe = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Listes");
var optionsRange = dvListe.getRange(1, 1, 1, 7);
var options = optionsRange.getValues()[0];
var dv = SpreadsheetApp.newDataValidation();
dv.setAllowInvalid(false);
dv.setHelpText("Choisir une société");
dv.requireValueInList(options, true);
feuille.getRange(2, 1, feuille.getLastRow()-1 , 1).setDataValidation(dv.build());
}
function onEdit(e) {
var feuillePrincipale = "Feuille principale";
var listesSheet = "Listes";
var activeSheet = e.source.getSheetByName(feuillePrincipale);
if (activeSheet.getName() == feuillePrincipale) {
var selectedCompany = activeSheet.getRange(e.range.rowStart, 1).getValue();
var listes = e.source.getSheetByName(listesSheet);
var companyRow = listes.getRange(2, 1, 1, listes.getLastColumn()).getValues()[0];
var companyIndex = companyRow.indexOf(selectedCompany);
if (companyIndex != -1) {
var locations = listes.getRange(2, companyIndex + 1, listes.getLastRow() - 1, 1).getValues().flat();
var ruleB = SpreadsheetApp.newDataValidation().requireValueInList(locations).build();
activeSheet.getRange(e.range.rowStart, 2).setDataValidation(ruleB);
} else {
activeSheet.getRange(e.range.rowStart, 2).clearDataValidations();
}
}
}
En vous remerciant par avance de tout les éléments que vous pourrez m'apporter.
T P
J'ai un petit soucis de menu déroulant conditionnels comme indiqué.
Je n'arrive pas à faire 3 menus conditionnels successifs. J'ai d'abord tenté en utilisant des formules sheet sans succès puis j'ai fait des essais avec le script mais je suis toujours bloqué au 3ème qui ne fonctionne pas correctement.
Est-ce que quelqu'un pourrait m'aiguiller dans ce problème ?
https://ibb.co/XLrzvHV
https://ibb.co/0Gvn2Xz
Sur la première image, la feuille principale où je souhaiterai avoir mes 3 menus déroulant sur toute la colonne excepté la 1ere ligne.
Sur la deuxième image, la structure de mes informations.
Pour illustrer d'un example, dans A2 je devrais avoir un menu déroulant avec CK, H&M et Dior.
Si je choisis H&M il devrait me proposer dans B2 un menu déroulant avec Milan, Berlin et Venise.
Si je choisis Venise Il devrait me proposer dans C2 un ménu déroulant avec Pull et T-Shirt.
Attention, les Lieux et les produits peuvent être identiques d'une société à une autre.
Voilà les deux premiers scripts (pour colonne A et B) :
function setupScrollingMenu() {
var feuille = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Feuille principale");
var dvListe = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Listes");
var optionsRange = dvListe.getRange(1, 1, 1, 7);
var options = optionsRange.getValues()[0];
var dv = SpreadsheetApp.newDataValidation();
dv.setAllowInvalid(false);
dv.setHelpText("Choisir une société");
dv.requireValueInList(options, true);
feuille.getRange(2, 1, feuille.getLastRow()-1 , 1).setDataValidation(dv.build());
}
function onEdit(e) {
var feuillePrincipale = "Feuille principale";
var listesSheet = "Listes";
var activeSheet = e.source.getSheetByName(feuillePrincipale);
if (activeSheet.getName() == feuillePrincipale) {
var selectedCompany = activeSheet.getRange(e.range.rowStart, 1).getValue();
var listes = e.source.getSheetByName(listesSheet);
var companyRow = listes.getRange(2, 1, 1, listes.getLastColumn()).getValues()[0];
var companyIndex = companyRow.indexOf(selectedCompany);
if (companyIndex != -1) {
var locations = listes.getRange(2, companyIndex + 1, listes.getLastRow() - 1, 1).getValues().flat();
var ruleB = SpreadsheetApp.newDataValidation().requireValueInList(locations).build();
activeSheet.getRange(e.range.rowStart, 2).setDataValidation(ruleB);
} else {
activeSheet.getRange(e.range.rowStart, 2).clearDataValidations();
}
}
}
En vous remerciant par avance de tout les éléments que vous pourrez m'apporter.
T P