Listes déroulantes en cascade

Bonjour,

J'ai 3 combobox en cascade : niveau (ComboBoxNiveau et colonne A ), catégorie (ComboBoxCategorie et colonne B) et statut (ComboBoxStatut et colonne C) . Statut dépend de catégorie et statut. Catégorie dépend de niveau. Mes combobox sont dans un formulaire nommé UserForm3. Pour le moment mon code est le suivant :

Private Sub UserForm_Initialize()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Liste")

    ' Remplir ComboBoxNiveau avec les valeurs uniques des niveaux
    Dim niveaux As Collection
    Set niveaux = New Collection
    On Error Resume Next
    For Each cell In ws.Range("A2:A" & ws.Cells(ws.Rows.Count, "A").End(xlUp).row)
        niveaux.Add cell.Value, CStr(cell.Value)
    Next cell
    On Error GoTo 0
    For Each niveau In niveaux
        Me.ComboBoxNiveau.AddItem niveau
    Next niveau
End Sub

Private Sub ComboBoxNiveau_Change()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Liste")

    ' Effacer les ComboBox dépendants
    Me.ComboBoxCategorie.Clear
    Me.ComboBoxStatut.Clear

    ' Remplir ComboBoxCategorie en fonction de la sélection de ComboBoxNiveau
    Dim categorie As Collection
    Set categorie = New Collection
    On Error Resume Next
    For Each cell In ws.Range("B2:B" & ws.Cells(ws.Rows.Count, "B").End(xlUp).row)
        If cell.Offset(0, -1).Value = Me.ComboBoxNiveau.Value Then
            categorie.Add cell.Value, CStr(cell.Value)
        End If
    Next cell
    On Error GoTo 0
    For Each cat In categorie
        Me.ComboBoxCategorie.AddItem cat
    Next cat
End Sub

Private Sub ComboBoxCategorie_Change()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Liste")

    ' Effacer les ComboBox dépendants
    Me.ComboBoxStatut.Clear

    ' Remplir ComboBoxStatut en fonction de la sélection de ComboBoxNiveau et ComboBoxCategorie
    Dim statut As Collection
    Set statut = New Collection
    On Error Resume Next
    For Each cell In ws.Range("C2:C" & ws.Cells(ws.Rows.Count, "C").End(xlUp).row)
        If cell.Offset(0, -2).Value = Me.ComboBoxNiveau.Value And cell.Offset(0, -1).Value = Me.ComboBoxCategorie.Value Then
            statut.Add cell.Value, CStr(cell.Value)
        End If
    Next cell
    On Error GoTo 0
    For Each stat In statut
        Me.ComboBoxStatut.AddItem stat
    Next stat
End Sub

Je n'ai aucune erreur qui s'affiche quand j'exécute le code. Cependant, quand je change la comboboxNiveau, la combobox categorie ne se remplit pas. J'ai affiché MsgBox cell.Offset(0, -1).Value & Me.ComboBoxNiveau.Value. Et même quand les valeurs sont les mêmes, ça ne passe pas dans la boucle if. Je ne vois pas l'erreur que j'ai pu faire. Avez-vous donc des pistes de pourquoi la combobox ne se remplit pas ?

Merci d'avance

bonjour et

A+

Bonjour cccc213212, le fil, le forum,

En partant de ton code, j'ai créé un fichier, un userform et les trois combobox, puis collé ton code.

Le code fonctionne bien. Les combobox en cascade affichent leur contenu.

Sur ton fichier de travail, il y a peut-être une coquille entre le nom des combobox et leurs noms dans le code.

Une faute de frappe est parfois difficile à détecter.

Bizz

Rechercher des sujets similaires à "listes deroulantes cascade"