web-dev-qa-db-fra.com

Créer une liste déroulante dans la cellule avec une plage filtrée

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.

enter image description here

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?

14
rayfranco

Ajouter à la réponse ci-dessus pour fournir deux autres moyens d'y parvenir.

  • Créez un tableau croisé dynamique sur la plage A: B, ajoutez "Quelques valeurs" aux lignes de pivot (n'oubliez pas de décocher l'option "Afficher les totaux"), puis ajoutez "Animal" au filtre, puis modifiez le filtre pour ne sélectionner que les animaux. Cela produirait une liste de noms d'animaux. Enfin, utilisez cette colonne comme plage pour votre règle de validation des données.
  • 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)
    
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);
     }  
  }
}
0
Frosty Z