J'utilise Google Spreadsheet.
Pour illustrer mon problème, j'utilise la plage A2:A8
pour la validation des données de D2
et E2
.
Mais comme dans la cellule D2
, vous êtes censé sélectionner un animal uniquement, j'aimerais filtrer la plage avec B2:B8
.
Ce que j'ai essayé, utilise ma propre formule qui est:
=FILTER(A2:A8;IS("B2:B8";"ANIMAL"))
mais cela ne fonctionnera pas et je ne peux pas choisir l'option "liste déroulante" si j'utilise une formule personnalisée.
J'ai également essayé ma formule dans ma sélection de gamme, mais ce n'est pas valide. Quelle est la bonne formule à utiliser pour avoir une liste déroulante avec des données filtrées?
Des pensées?
Ajouter à la réponse ci-dessus pour fournir deux autres moyens d'y parvenir.
Une autre option consiste à créer une colonne à l'aide de la formule de requête. Par exemple:
= QUERY(A:B, "SELECT A WHERE B = 'ANIMAL'", 0)
Il existe une solution utilisant les scripts Google Apps.
Vidéo soignée expliquant tous les mécanismes impliqués:
Fondamentalement, en modifiant toute cellule dont dépend le menu déroulant (par exemple, Pays pour liste de villes), pour la cellule "Ville" associée, elle recalculera automatiquement la plage des données de validation (liste des villes possibles).
Copier/coller le script ici juste au cas où il deviendrait indisponible (cet exemple utilise les marques et modèles de voitures pour les listes déroulantes dépendantes):
function onEdit() {
var tabLists = "lists";
var tabValidation = "Main";
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var datass = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(tabLists);
var activeCell = ss.getActiveCell();
if (activeCell.getColumn() == 1 && activeCell.getRow() > 1 && ss.getSheetName() == tabValidation){
activeCell.offset(0, 1).clearContent().clearDataValidations();
var makes = datass.getRange(1, 1, 1, datass.getLastColumn()).getValues();
var makeIndex = makes[0].indexOf(activeCell.getValue()) + 1;
if (makeIndex != 0){
var validationRange = datass.getRange(3, makeIndex, datass.getLastRow());
var validationRule = SpreadsheetApp.newDataValidation().requireValueInRange(validationRange).build();
activeCell.offset(0, 1).setDataValidation(validationRule);
}
}
}