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
|
Private Sub ComboBox1_Change()
Dim cd As Range 'déclare la variable cd (Cellule de Début)
Dim cf As Range 'déclare la variable cf (Cellule de Fin)
Dim col As Collection 'déclare la variable col (COLlection)
Dim cel As Range 'déclare la variable cel (CELlule)
Me.ListBox1.Clear
ComboBox2.Clear 'vide la ComboBox2
'condition : si l'élément sélectionné est le dernier de la liste
If Me.ComboBox1.ListIndex = Me.ComboBox1.ListCount - 1 Then
'définit la cellule de début (numéro de la ligne de l'année sélectionnée), colonne C
Set cd = Cells(Me.ComboBox1.List(Me.ComboBox1.ListIndex, 1), 5)
'définit la cellule de fin (dernière ligne éditée de la colonne C)
Set cf = Range("E65536").End(xlUp)
Else 'sinon
'définit la cellule de début (numéro de la ligne de l'année sélectionnée), colonne C
Set cd = Cells(Me.ComboBox1.List(Me.ComboBox1.ListIndex, 1), 5)
'définit la cellule de fin (numéro de la ligne de l'année suivante -1), colonne C
Set cf = Cells(Me.ComboBox1.List(Me.ComboBox1.ListIndex + 1, 1) - 1, 5)
End If 'fin de la condition
'alimentation de la collection col sans doublons
Set col = New Collection 'définit la collection col
For Each cel In Range(cd, cf) 'boucle sur toutes les cellules cel comprises entre la cellule de début et la celllule de fin
On Error Resume Next 'en cas d'erreur passe à la cellule suivante
col.Add cel.Value, CStr(cel.Value) 'ajoute la valeur de la cellule à la collection (un doublon provoque une erreur
Next cel 'prochaine cellule cel de la boucle
'alimentation de la ComboBox2
For x = 1 To col.Count 'boucle sur tous les éléments de la collection
ComboBox2.AddItem col(x) 'ajoute l'élément de la collection à la combobox2
Next x 'prochain élément de la collection
'ComboBox2.ListIndex = 0 'affiche le premier élément de la ComboBox2
End Sub
Private Sub ComboBox2_Change()
Dim C As Range, annee As String
If ComboBox2 <> "" Then
Me.ListBox1.Clear
For Each C In Range("E2:E" & Range("E65536").End(xlUp).Row)
annee = ActiveSheet.Cells(C.Row, 1)
If (C.Text = ComboBox2) And (annee = ComboBox1) Then
Me.ListBox1.AddItem C
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 4) = C.Offset(, -4) 'num
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = C.Offset(, -2) '*
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = C.Offset(, -1) '*
End If
Next
End If
End Sub
Private Sub UserForm_Initialize()
Dim C As Range, annee As String
Me.ComboBox1.Clear
For Each C In Range([A2], [A65000].End(xlUp)) ' liste non triée
If (C <> "") And (C <> annee) Then
Me.ComboBox1.AddItem C
Me.ComboBox1.List(Me.ComboBox1.ListCount - 1, 1) = C.Row
End If
annee = C Next C
End Sub |
Partager