Listes déroulantes liées et bug variable "Control"
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:
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... :oops:
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
Code:
Dim Liste As Control
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 :roll: