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 col2 As Collection
Dim cel As Range 'déclare la variable cel (CELlule)
ComboBox2.Clear 'vide la ComboBox2
ComboBox3.Clear
'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), 4)
'définit la cellule de fin (dernière ligne éditée de la colonne C)
Set cf = Range("D65536").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), 4)
'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, 4)
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
Set col2 = New Collection
For Each cel In Range(cd.Offset(0, -1), cf.Offset(0, -1))
On Error Resume Next
col2.Add cel.Value, CStr(cel.Value)
Next cel
'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
For x = 1 To col2.Count
ComboBox3.AddItem col2(x)
Next x
'ComboBox2.ListIndex = 0 'affiche le premier élément de la ComboBox2
Me.TextBox1.Text = Me.ComboBox1.Text
End Sub