Conditions multiples pour 3 ListBox en cascade - comment faire?

Bonjour a tous,

J'essaye de créer un fichier à sélection multiple dans 3 listBox en cascade. L'idée étant que la première listbox vous permette de déterminer le contenu de la seconde et le croisement de la premier et la seconde déterminent le contenu de la troisième. Un peu comme si on appliquait un filtre Excel en entonnoirs sur 3 colonnes.

J'avais trouvé en ligne un fichier correspondant a mon besoin - voir en pièce jointe - mais la macro ne semble pas accumuler/croiser les choix de la listbox 1 et de la listbox 2 pour afficher le contenu de la listbox 3. Il me manque donc une étape et je n'arrive pas a mettre le doigt sur la correction a effectuer.

Plus précisément, actuellement, par exemple si je sélectionne Adele en listbox 1 et piano en listbox2, je devrais avoir FA1, FA2, QA2 qui s'affichent en listbox3. Mais pour l'instant j'ai 14 possibilités qui s'affichent en listbox3 ce qui n'est pas ce que je souhaite.

Auriez-vous une idée a ajouter au code svp? la partie du code s'y référant est la suivante je pense:

Dim f
Private Sub UserForm_Initialize()
Set f = Sheets("BD")
Set mondico = CreateObject("Scripting.Dictionary")
For Each c In Range(f.[A2], f.[A65000].End(xlUp))
mondico(c.Value) = c.Value
Next c
Me.ListBox1.List = mondico.items
Me.ListBox1.MultiSelect = fmMultiSelectMulti
End Sub

Private Sub ListBox1_Change()
Me.ListBox3.Clear
Set mondico = CreateObject("Scripting.Dictionary")
For Each c In Range(f.[A2], f.[A65000].End(xlUp))
For K = 0 To Me.ListBox1.ListCount - 1
If Me.ListBox1.Selected(K) = True Then
If c = Me.ListBox1.List(K, 0) Then
temp = c.Offset(, 1)
mondico(temp) = temp
End If
End If
Next K
Next c
Me.ListBox2.List = mondico.items
End Sub

Private Sub ListBox2_Change()
Me.ListBox3.Clear
Set mondico = CreateObject("Scripting.Dictionary")
For Each c In Range(f.[B2], f.[B65000].End(xlUp))
For K = 0 To Me.ListBox2.ListCount - 1
If Me.ListBox2.Selected(K) = True Then
If c = Me.ListBox2.List(K, 0) Then
temp = c.Offset(, 1)
mondico(temp) = temp
End If
End If
Next K
Next c
Me.ListBox3.List = mondico.items
End Sub

Merci par avance de votre aide. En espérant que quelqu'un s'aura m'éclairer .

Cordialement,
Geoffrey

Bonjour et bienvenue sur le forum

Un essai à tester. Te convient-il ?

Bye !

Bonjour gmb,

Un grand merci a toi d'avoir pris le temps.

C'est intéressant de voir différentes approches de code.

En revanche, dans ce cas précis, je n'obtiens toujours pas ce que je souhaite: ne voir s'afficher dans la listbox3 (Degré) que les items qui correspondent au croisement des choix sélectionnés en listbox1 (Profs) et en listbox 2 (Cours).

Pour revenir a mon exemple, en utilisant ton fichier, si je sélectionne Adele en listbox1 et piano en listbox2, je devrais ne voir apparaitre que FA1, FA, QA2 comme options sélectionnables dans la listbox3. Mais ce n'est toujours pas le cas et je vois de nombreuses options qui ne devraient pas apparaitre car dans ma base de donnée je n'ai aucune ligne correspondent par exemple a Adele/piano/FA4 ou Adele/piano/Q1 etc...:

image

Je ne sais vraiment pas comment y remédier.

Bonjour

Nouvel essai.

Bye !

MA-GNI-FIQUE!!!

Mille mercis pour ton aide. C'est exactement ce que je souhaitais faire.

Si je peux faire quoi que ce soit pour te remercier, n'hésites pas!

Rechercher des sujets similaires à "conditions multiples listbox cascade comment"