Dim bd, f
Private Sub UserForm_Initialize()
Set f = Sheets("BD")
Set d = CreateObject("Scripting.Dictionary")
Set bd = f.Range("A2:M" & f.[M65000].End(xlUp).Row)
For i = 1 To bd.Rows.Count
If bd.Cells(i, 1) <> "" Then d(bd.Cells(i, 1).Value) = ""
Next i
temp = d.keys
Call Tri(temp, LBound(temp), UBound(temp))
Me.ComboBox1.List = temp
Me.ListBox1.List = bd.Value
For k = 1 To 13: Me("label" & k).Caption = f.Cells(1, k): Next k
End Sub
Private Sub ComboBox1_Click()
Dim a()
n = Application.CountIf(Application.Index(bd, , 1), Me.ComboBox1)
ReDim a(1 To n, 1 To bd.Columns.Count)
ligne = 0
For i = 1 To bd.Rows.Count
If bd.Cells(i, 1) = Me.ComboBox1 Then
ligne = ligne + 1
For k = 1 To bd.Columns.Count: a(ligne, k) = bd.Cells(i, k): Next k
End If
Next i
Me.ListBox1.List = a()
End Sub
Sub Tri(a, gauc, droi) ' Quick sort
ref = a((gauc + droi) \ 2)
g = gauc: d = droi
Do
Do While a(g) < ref: g = g + 1: Loop
Do While ref < a(d): d = d - 1: Loop
If g <= d Then
temp = a(g): a(g) = a(d): a(d) = temp
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call Tri(a, g, droi)
If gauc < d Then Call Tri(a, gauc, d)
End Sub