-
ListBox en cascade
Bonjour,
J'aurais besoin d'aide pour un programme c'est pour le boulot.
J'aimerais créer un menu avec des listbox en cascade.
C'est à dire que le choix fait dans la première liste conditionne la liste de choix dans les listes suivantes. Dites moi si c'est pas clair :(
J'ai fait un programme mais qui ne répond pas totalement à mon problème. Enfaite j'ai ma 2ème ListBox qui dépend de la 1ère ListBox , et la 3ème qui dépend de la 2ème mais la 3ème ListBox ne dépend plus de la 1ère :aie:
Je ne sais pas si vous voyez mon problème? je peux tenter de mieux expliquer sinon.
Alors voila si quelqu'un aurait une idée à partager?
-
Bonjour,
Ta listBox est-elle dans un userform ou dans une feuille excel ?
Sur le principe tu as une macro associée à chaque sélection effectuée dans ta listBox, il suffit dans la macro de la list box 1 de modifier à la volée la zone (ou le contenu de la zone) de la list box 2 :
Code:
ActiveSheet.Shapes.Range(Array("List Box 2")).ListFillRange = "$W$1:$W$4"
(soit tu renseignes à la volée les cellules de la List Box 2 (contenu W1:W4 dans l'exemple ci-dessus), soit tu modifies la zone source (V1:V4 pour choix 1, W1:W7 pour choix 2, ...)
et dans la macro associée à la list Box 2 faire la même chose (mais tenant compte des contenus de tes 2 premières List Box pour mettre à jour à la volée le contenu de la 3ème listBox...
Si c'est dans un userform c'est le même principe avec ListBox1.RowSource
-
merci philoul de m'aider :ccool:
Mes listbox sont bien sur une feuille excel.
Je fais comme tu dis ( si j'ai bien compris ) : à chaque changement dans une listbox (l'événement listbox_change ), je modifie en conséquence la listbox dépendante.
Mais justement je ne sais pas comment faire pour que la listbox3 garde en mémoire les choix fait dans la listbox1,oui parce que l'utilisateur peut faire plusieurs choix dans chaque listbox.
Et pour compliquer le tout l'utilisateur peut ajouter des listbox pour créer ses propres filtres :aie:
-
Avec Excel la mémoire n'est pas vraiment un problème, rien ne t'emplèche dans la macro listbox_change de sauvegarder les choix sélectionnés dans une zone masquée de ton onglet courant (colonnes de droites par exemple) ou dans un onglet supplémentaire, (visible ou masqué) :
J'ai compris que tout commence par la 1ère listbox :
On peut donc imaginer de faire un onglet spécifique qui contient :
Colonne A tous les choix de la listbox 1 (sur lequel tu vas faire pointer .listfillrange)
Colonne B (renseignée sur sélection listbox 1) mémorisation des choix effectués sur la listbox 1
Colonne C (renseignée sur sélection listbox 1 par macro de la List Box 1) les choix possibles pour la listbox 2 compte tenu des sélection faite sur la 1 (.listfillrange de la listbox 2)
Colonne D (renseignée sur sélection listbox 2) mémorisation des choix effectués sur listbox 2
Colonne E (renseignée sur sélection listbox 2) les choix possibles pour la listbox 3 compte tenu des sélection faite sur les listbox 1 et 2 (.listfillrange de la listbox 3)
...
il suffit ensuite à chaque macro de chaque listbox de faire les actions, mise à jours sélections, mises à jour des autres listbox, en vérifiant les contenu sélectionnés de l'ensemble (colonnes B, D, F, ... s'il y a d'autres listbox).
Mais rien ne t'empèche d'aller plus loins en initialisant tes 3 listbox avec tous les choix possibles pour chacune des trois. et dès q'une sélection (simple ou multiple) est faite sur une des 3 listBox faire la mise à jour des choix possibles sur les 2 autres, et ainsi de suite
-
Merci encore de ton aide philoul !
ok donc si j'ai bien compris il faut que je garde en mémoire les choix et que je remplisse les listbox en fonction des choix.
Sinon t'as une idée d'un algorithme pour remplir une listbox en fonction des anciens choix?
J'ai pensé à garder sur une feuille tous les triplés possibles sans doublons de mes enregistrements ( si on a 3 listbox ) et ensuite de travailler sur cette base de données.
C'est pour savoir si je vais dans la bonne direction au moins :mrgreen:
-
Là je pense que cela dépends directement des données que tu manipules :
Soit tu as besoins d'une base de données exhaustives car il n'y a aucune logique d'association de choix "automatisable", soit tu peux construire une logique séquentielle (choix 1 puis choix 2 puis choix 3) , ou encore s'il existe des caractéristiques associées à chaque choix (dimensions, poids, couleurs, prix, ...) qui peuvent te permettre de coder les choix possibles plutôt que de les rechercher dans une base de données...
Tout dépend du nombre de données et de la complexité (si tu disposes d'un nombre faibles d'éléments, tu as probablement plus vite fait de construire à la main la liste exhaustive des combinaisons possibles, en revanche, si tu disposes d'un nombre important d'éléments avec une cominatoire complexe c'est une autre paire de manches...
Sans avoir plus d'infos sur les données que tu manipules difficile de t'aider...
-
C'est la que ça se complique, enfaite ma base de données c'est des taches de microsoft project et l'utilisateur choisi les champs qu'il utilisera pour créer les listbox en cascade.
Par exemple, il veut créer un filtre avec la hiérarchie suivante :
champ marque voiture -> champ moteur
Je dois donc créer 2 listbox, la 1ère qui contient toutes les marques de voitures et la 2ème listbox change en fonction des choix de la 1ère.
Mais l'utilisateur peut créer aussi une autre hiérarchie
champ marque voiture -> champ "couleur voiture"
Je vais donc créer une 3ème listbox qui contient les choix possibles de couleur en fonction des choix fait dans la 1ère listbox qui contient les marques de voiture.
Mon champ "marque voiture" est impliqué dans 2 hiérarchies en gros. :aie:
Je peux avoir plus de 10 000 enregistrements maximum 8O ,
-
Un petit up pour savoir si quelqu'un a une idée?
J'ai lmis en suspens cette partie là pour l'instant parce que je netrouve pas de solution :cry: