4 Combobox en cascade
Bonjour le forum,
J'essaye d'adapter un code trouvé sur le net à mon fichier afin d'avoir 4 combobox en cascade dans un userform.
Si pour les 3 premières il n'y a aucun souci, je n'arrive pas à alimenter la quatrième. Elle reste désespérément vide.
Voici mon code :
Pour info,
Combobox 3 = Colonne B
Combobox 4 = Colonne C
Combobox 5 = Colonne D
Combobox 6 = Colonne E (celle ci qui ne fonctionne pas)
Dim f
Private Sub Userform_Initialize ()
Set f = Sheets(ActiveSheet.Name)
Set Mondico = CreateObject("Scripting.Dictionary")
For Each C In Range(f.[B3], f.[B65000].End(xlUp))
Mondico(C.Value) = C.Value
Next C
Me.ComboBox3.List = Mondico.items
End sub
Private Sub ComboBox3_Change()
Set Mondico = CreateObject("Scripting.Dictionary")
For Each C In Range(f.[B3], f.[B65000].End(xlUp))
If C = Me.ComboBox3 Then Mondico(C.Offset(, 1).Value) = C.Offset(, 1).Value
Next C
Me.ComboBox4.List = Mondico.items
Me.ComboBox4.ListIndex = -1
Me.ComboBox5.ListIndex = -1
Me.ComboBox6.ListIndex = -1
End Sub
Private Sub ComboBox4_Change()
Set Mondico = CreateObject("Scripting.Dictionary")
For Each C In Range(f.[B3], f.[B65000].End(xlUp))
If C = Me.ComboBox3 And C.Offset(, 1) = Me.ComboBox4 Then Mondico(C.Offset(, 2).Value) = C.Offset(, 2).Value
Next C
Me.ComboBox5.List = Mondico.items
Me.ComboBox5.ListIndex = -1
Me.ComboBox6.ListIndex = -1
End Sub
Private Sub ComboBox5_Change()
Set Mondico = CreateObject("Scripting.Dictionary")
For Each C In Range(f.[B3], f.[B65000].End(xlUp))
If C.Offset(, 1) = Me.ComboBox4 And C = Me.ComboBox3 And C.Offset(, 2) = Me.ComboBox5 Then Mondico(C.Offset(, 10).Value) = C.Offset(, 10).Value
Next C
Me.ComboBox6.List = Mondico.items
Me.ComboBox6.ListIndex = -1
End Sub
Private Sub ComboBox6_Change()
Set Mondico = CreateObject("Scripting.Dictionary")
For Each C In Range(f.[B3], f.[B65000].End(xlUp))
If C = Me.ComboBox5 And C.Offset(, 1) = Me.ComboBox6 Then Mondico(C.Offset(, 11).Value) = C.Offset(, 11).Value
Next C
End Sub
Si quelqu'un peut jeter un coup d'oeil et me dire pourquoi ça ne fonctionne pas...
Merci par avance,
Lucas
Bonjour Lucas, bonjour le forum,
C'est confus ! Tu indiques les colonnes B, C, D et E pour info et le code utilise des Offset( ,10) et des Offset( , 11) ?!...
Sinon, sans voir le fichier, difficile de te savoir pourquoi la ComboBox6 n'est pas alimentée.
Je ne vois pas l'utilité du ComboBox6_Change puisque la procédure ComboBox5_Change alimente la dernière ComboBox, la ComboBox6...
Ton code modifié :
Private F As Worksheet
Private PL As Range
Private C As Range
Private Sub Userform_Initialize()
Dim D As Object
Set F = ActiveSheet
Set D = CreateObject("Scripting.Dictionary")
Set PL = F.Range("B3:B" & Cells(Application.Rows.Count, "B").End(xlUp).Row)
For Each C In PL
D(C.Value) = C.Value
Next C
Me.ComboBox3.List = D.items 'alimente la ComboBox3 avec les élément de la colonne C
End Sub
Private Sub ComboBox3_Change()
Dim D As Object
Set D = CreateObject("Scripting.Dictionary")
For Each C In PL
If C.Value = Me.ComboBox3.Value Then D(C.Offset(0, 1).Value) = C.Offset(0, 1).Value
Next C
Me.ComboBox4.List = D.items 'alimente la ComboBox4 avec les élément de la colonne C
Me.ComboBox4.ListIndex = -1
Me.ComboBox5.ListIndex = -1
Me.ComboBox6.ListIndex = -1
End Sub
Private Sub ComboBox4_Change()
Dim D As Object
Set D = CreateObject("Scripting.Dictionary")
For Each C In PL
If C.Value = Me.ComboBox3.Value And C.Offset(0, 1).Value = Me.ComboBox4.Value Then _
D(C.Offset(0, 2).Value) = C.Offset(0, 2).Value
Next C
Me.ComboBox5.List = D.items 'alimente la ComboBox4 avec les élément de la colonne D
Me.ComboBox5.ListIndex = -1
Me.ComboBox6.ListIndex = -1
End Sub
Private Sub ComboBox5_Change()
Dim D As Object
Set D = CreateObject("Scripting.Dictionary")
For Each C In PL
If C.Value = Me.ComboBox3.Value And C.Offset(0, 1).Value = Me.ComboBox4.Value And _
C.Offset(0, 2).Value = Me.ComboBox5.Value Then D(C.Offset(0, 3).Value) = C.Offset(0, 3).Value
Next C
Me.ComboBox6.List = D.items 'alimente la ComboBox4 avec les élément de la colonne E
Me.ComboBox6.ListIndex = -1
End Sub
Bonjour Lucas54000 le forum et Bonjour Robert
un code trouvé sur le net à mon fichier afin d'avoir 4 combobox en cascade dans un userform.
Tu demandes de l'aide de partout et tu n'es pas capable d'adapter!!! Je le savais et je te l'ai écrit, si tu fournis pas ton fichier réel ou une copie anonymisé, tu n'y arriveras pas.
tu as dans ma réponse d'hier un code avec 3 combos
a+
Papou
Re,
Bonjour Papou, content de te revoir ici !!! Ça faisait un bail...
ça marche merci beaucoup Thauthème pour ton code
Papou, si je joint un fichier, les modifications auront probablement été faites directement dessus par les âmes bienveillantes de ce forum. Je n'ai plus qu'à l'enregistrer et l'utiliser.
C'est pour cela que je m'entête à vouloir adapter les codes, cela me permet d'apprendre en même temps.
Après bien sur, si le problème est plus complexe et qu'il est nécessaire d'analyser le fichier global, pas de soucis. Mais c'est en pratiquant qu'on apprend
Merci encore à vous deux,
lucas