Bonjour,

J'ai recherché sur le forum des réponses à mes questions, à savoir comment créer des listes déroulantes liées les unes aux autres, chaque liste faisant référence à une colonne spécifique et chaque liste impactant la suivante. J'ai trouvé ce bout de code qui m'avait l'air intéressant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
'Les données sont dans les colonnes C à D, d'un onglet nommé "Matrice Secteur-Unité + Métiers".
'La procédure effectue un remplissage conditionnel des Combobox en fonction de
'ce qui est sélectionnée dans le contrôle précédent:
'La sélection du ComboBox1 (données colonne C) définit le contenu du ComboBox2 (données colonne D) ,
'La sélection du ComboBox2 pourrait définir le contenu du ComboBox3 (données colonne E) …etc...
'
 
Private Sub UserForm_Initialize()
 
Dim Ws As Worksheet
Dim NbLignes As Integer
    'Définit la feuille contenant les données
    Set Ws = Worksheets("Matrice Secteur-Unité + Métiers")
    'Définit le nombre de lignes dans la colonne C
    NbLignes = Ws.Range("C65536").End(xlUp).Row
 
    'Remplissage du ComboBox1
    Alim_Combo 1
 
End Sub
 
 
Private Sub ComboBox1_Change()
    'Remplissage Combo2
    Alim_Combo 2, ComboBox1.Value
End Sub
 
 
Private Sub ComboBox2_Change()
    'Remplissage Combo3
    Alim_Combo 3, ComboBox2.Value
End Sub
 
 
Private Sub ComboBox3_Change()
    'Remplissage Combo4
    Alim_Combo 4, ComboBox3.Value
End Sub
 
 
 
'Procédure pour alimenter les ComboBox
Private Sub Alim_Combo(CbxIndex As Integer, Optional Cible As Variant)
    Dim j As Integer
    Dim Liste As Control
 
    'Définit le ComboBox à remplir
    Set Liste = Me.Controls("ComboBox" & CbxIndex)
    'Supprime les anciennes données
    Liste.Clear
 
    'alimente le Combobox initial (Combobox1)
    If CbxIndex = 1 Then
        'Boucle sur les lignes de la colonne A (à partir de la 2eme ligne)
        For j = 2 To NbLignes
            Liste = Ws.Range("C" & j)
            'Remplit le ComboBox sans doublons
            If Liste.ListIndex = -1 Then Liste.AddItem Ws.Range("C" & j)
        Next j
    Else
        'Alimentation conditionnelle des autres Combobox en fonction de
        'ce qui est sélectionnée dans le contrôle précédent:
        '(La sélection du ComboBox1 définit le contenu du ComboBox2,
        'La sélection du ComboBox2 définit le contenu du ComboBox3 …etc...)
        For j = 2 To NbLignes
            If Ws.Range("C" & j).Offset(0, CbxIndex - 2) = Cible Then
                Liste = Ws.Range("C" & j).Offset(0, CbxIndex - 1)
                If Liste.ListIndex = -1 Then Liste.AddItem Ws.Range("C" & j).Offset(0, CbxIndex - 1)
            End If
        Next j
   End If
 
   'Enlève la sélection dans le ComboBox
   Liste.ListIndex = -1
End Sub
Toutefois, quelques questions subsistent pour moi...
Comment définir la case où se situe la liste déroulante ? Et lorsque je lance la macro, il m'affiche sur ce bout de code une erreur de compilation ayant pour intitulé "Type défini par l'utilisateur non défini en surlignant en bleu la ligne

Si l'un d'entre vous peut m'aider, je vous en serait infiniment reconnaissant ! Merci d'avance pour le temps que vous prendrez à lire tout ça