Private O As Worksheet 'déclare la variable O (Onglet)
Private TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Private Sub UserForm_initialize() 'à l'initialisation de l'UserForm
Set O = Worksheets("Feuil2") 'définit l'onglet O
TV = O.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
Me.ComboBox1.List = O.Range("A2:A" & O.Cells(Application.Rows.Count, "A").End(xlUp).Row).Value 'alimente la ComboBox1
End Sub
Private Sub ComboBox1_Change() 'au changement dans la ComboBox1
Me.ListBox2.Clear 'vide la ListBox2
For I = 2 To UBound(TV, 1) 'boucle 1 : sur toutes les lignes I du tbaleau des valeurs TV (en partant de la seconde)
If TV(I, 1) = Me.ComboBox1.Value Then
For J = 2 To UBound(TV, 2) 'boucle 2 : sur toutes les colonnes J du tbaleau des valeurs TV (en partant de la seconde)
'si la donnée ligne I colonne J de TV (convertie en majuscule) est égale à "X", ajoute la donnée ligne 1 colonne J à la ListBox1
If UCase(TV(I, J)) = "X" Then Me.ListBox2.AddItem TV(1, J)
Next J 'prochaine colonne de la boucle 2
End If 'fin de la condition
Next I 'prochaine ligne de la boucle 1
End Sub