Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Validation à 2 niveaux dynamique

Yves P

XLDnaute Nouveau
Bonjour,
Voici un problème que je rencontre sur la validation d'une cellule :
j'ai un tableau contenant plusieurs colonnes contenant des catégories d'aliments par exemple Fruits, Légumes, Boissons...et dans chaque colonne des aliments correspondant à chaque catégorie (par exemple pour la colonne Fruit : pomme, poire, etc...)
L'utilisateur va choisir un aliment en choisissant d'abord la catégorie dans une cellule puis l'aliment dans une liste déroulante correspondant à la catégorie choisie
Je souhaite que ces listes déroulantes soient dynamiques et qu'elles s'adaptent automatiquement au tableau d'aliments si on rajoute des colonnes ou des lignes.
J'ai donc :
1) défini la validation du choix de la catégorie avec Tableau[#En-têtes]
2) défini la validation de l'aliment par INDIRECT("Tableau["&(contenu de la cellule choix de catégorie)&"]")
Ces validations marchent bien et s'adaptent bien aux changements de mon tableau, mais la 2ème a le défaut de présenter dans la liste déroulante les cellules vides du tableau.
J'ai donc essayé de valider les aliments avec FILTRE(INDIRECT("Tableau... ...]");INDIRECT("Tableau... ...]")<>""). Cette formule fonctionne si je la mets dans une cellule, mais n'est pas acceptée par la validation. Quelqu'un peut-il m'aider à résoudre ce problème ?
Je travaille sous Excel 16.0 sous Office 365
Cordialement,
Yves
 

Pièces jointes

  • validation à 2 étages.xlsx
    66.2 KB · Affichages: 3

chris

XLDnaute Barbatruc
Bonjour

Question très récurrente. On appelle cela les listes en cascade.

Pour commencer on ne met pas cela dans un tableau comme tu l'as fait

  • Soit on crée 3 tableaux séparés mais c'est peu évolutif pour ajouter d'autre catégories
  • Soit on crée un tableau Base avec deux colonnes Catégorie, Elément (nom du fruit au autre), toujours classé par Catégorie puis élément, ce qui permet d'ajouter des catégories au fil de temps.
    Le liste unique des catégories fait l'objet d'un autre tableau.

Si la liste des catégories est longue on peut la générer depuis le tableau Base avec une requête PowerQuery (intégré à Excel)
 

Pièces jointes

  • validation à 2 étages.xlsx
    70.4 KB · Affichages: 2

Yves P

XLDnaute Nouveau
Bonjour Chris.
La deuxième solution avec le tableau Base est la bonne pour mon besoin.
Pour simplifier la vie de l'utilisateur, je reconstitue le tableau Base à l'aide de formule (combinaison de ASSEMB.H, DANSCOL, et TRIER)
Ce n'est pas très élégant ni lisible, mais ça répond parfaitement à mon besoin et à celui des utilisateurs qui pourront ajouter des ligne et des colonnes à volonté dans le tableau initial sans qu'il n'y ait rien à changer.

Merci pour tes conseils qui m'ont mis sur la voie.
 

Pièces jointes

  • validation à 2 étages2.xlsx
    87.5 KB · Affichages: 3

Dudu2

XLDnaute Barbatruc
J'ai retrouvé un vieux truc VBA que j'ai intégré vite fait dans ton fichier à titre d'essai.
Il y a un module standard Module_ComboBoxValidation et un peu de code pour valoriser les listes des ComboBoxes. Je devrais pouvoir en faire une classe.

Après en VBA on peut faire beaucoup plus simple avec les listes de validation.
Je vais essayer demain. Perso je préfère un peu de VBA que plein de noms et listes dans le classeur.

Edit: Ça vient avec un vieux bug Excel qui décale en hauteur les items avec des caractères accentués dans les ComboBox Active X.
Edit: Non, en fait c'est la police Aptos Narrow qui fait ça. Calibri n'a pas ce problème.
 

Pièces jointes

  • validation à 2a étages.xlsm
    116.1 KB · Affichages: 0
Dernière édition:

Dudu2

XLDnaute Barbatruc
En fait, le code principal était fait dans la feuille pour le fichier précédent.
Le transformer en Listes de Validation m'a pris 5 minutes.
 

Pièces jointes

  • validation à 2b étages.xlsm
    110.1 KB · Affichages: 5

Discussions similaires

Réponses
36
Affichages
2 K
Réponses
5
Affichages
887
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…