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
| Private Sub UserForm_Initialize()
Dim LastLig As Long
Dim Tb
With Worksheets("Repertoire")
LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
Tb = .Range("A3:A" & LastLig)
End With
TriRapide Tb, 1, LastLig - 2
Me.ComboBox1.List = Tb
End Sub
Private Sub TriRapide(T As Variant, ByVal LB As Long, ByVal UB As Long)
Dim Med As String, Hi As String, Lo As String
Dim i As Long
If LB >= UB Then Exit Sub
i = Int((UB - LB + 1) * Rnd + LB)
Med = T(i, 1)
T(i, 1) = T(LB, 1)
Lo = LB
Hi = UB
Do
Do While T(Hi, 1) >= Med
Hi = Hi - 1
If Hi <= Lo Then Exit Do
Loop
If Hi <= Lo Then
T(Lo, 1) = Med
Exit Do
End If
T(Lo, 1) = T(Hi, 1)
Lo = Lo + 1
Do While T(Lo, 1) < Med
Lo = Lo + 1
If Lo >= Hi Then Exit Do
Loop
If Lo >= Hi Then
Lo = Hi
T(Hi, 1) = Med
Exit Do
End If
T(Hi, 1) = T(Lo, 1)
Loop
TriRapide T, LB, Lo - 1
TriRapide T, Lo + 1, UB
End Sub |