Bonsoir Marco60, le Forum,
Tout d'abord, je vais commencer par le plus facile
, la ComboBox est chargée grâce à sa propriété Rowsource, dans la procédure suivante (dans le module de code de la Feuil1 :
Private Sub CommandButton1_Click()
U1.ComboBox1.RowSource = 'feuil2!a2:a' & Feuil2.Range('a65536').End(xlUp).Row
U1.Show
End Sub
Pour la suite, tu l'auras compris, tout se déroule dans la procédure évènementielle ComboBox1_Change() du module de code de l'USF :
Private Sub ComboBox1_Change()
Dim TabTemp As Variant
Dim L As Long
'Charge les données dans un tableau variant temporaire
1 With Sheets(1)
L = .Range('A65536').End(xlUp).Row
TabTemp = .Range(.Cells(2, 1), .Cells(L, 5)).Value
End With
'Mise à jour de la liste
With ListBox1
2 'RAZ
.Clear
3 'Pour chaque ligne de la base
For L = 1 To UBound(TabTemp)
'Si la catégorie correspond au choix
If TabTemp(L, 5) = ComboBox1.Value Then
4 'Ajout d'une ligne supplémentaire dans la liste
.AddItem TabTemp(L, 1)
'Mise à jour des élémnents en colonnes
For c = 1 To 3
.List(.ListCount - 1, c) = TabTemp(L, c + 1)
Next c
End If
Next L
End With
End Sub
Cet évènement Change() se déclenche lorsque l'utilisateur fait un choix dans la ComboBox. Le code de cette procédure a pour unique objectif de mettre à jour le contrôle ListBox1 qui devra représenter l'ensemble des lignes de données correspondant à la catégorie sélectionnée.
[ol][li]L'ensemble des données de la Feuil1 (sauf les titres) sont chargées dans un tableau variant à 2 dimensions nommé
TabTemp de 5 colonnes et autant de lignes
L qu'il y a de lignes de données dans le tableau.[/li]
[li]Le contenu de la ListBox est effacé (méthode
Clear).[/li]
[li]Ensuite, on parcourt chaque ligne du tableau variant (
For L = 1 to Ubound(TabTemp)) :
Si l'élément en colonne 5 (
TabTemp(L,5)) correspond à la catégorie sélectionnée (
ComboBox1.value),
alors, on ajoute la ligne dans la ListBox.[/li]
[li]Pour alimenter la ListBox multicolonnes (4 colonnes) :
- On ajoute d'abord un élément par la méthode AddItem (élément qui correspondra à la première colonne de la ListBox)
- Ensuite on affectera les valeurs souhaitées aux 3 colonnes suivantes (
For c = 1 To 3) grâce à la propriété List(
ligne, colonne) propre à ce contrôle. Attention toutefois, l'index de
ligne et
colonne commence ici à 0 et non à 1.[/li][/ol]
Voilà, j'espère avoir pu t'aider un peu à comprendre le code utilisé ici...
Cordialement,
Message édité par: myDearFriend!, à: 03/04/2006 22:32