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

Rechercher des sujets similaires à "combobox cascade"