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 66 67 68 69 70 71 72 73 74 75 76 77
   | Sub UserForm_Initialize()
Dim DernLigne As Long, i As Long
Dim MonDico As Object
Dim Tb
 
ListBox1.Clear
ListBox1.ColumnCount = 2
 
With Sheets("FEC 2018")
    DernLigne = .Cells(.Rows.Count, 1).End(xlUp).Row
    Tb = .Range("A2:A" & DernLigne)
End With
 
Set MonDico = CreateObject("Scripting.Dictionary")
For i = 1 To DernLigne - 1
    Tb(i, 1) = UCase(Left(Tb(i, 1), 1)) & Mid(Tb(i, 1), 2)
    If Not MonDico.Exists(Tb(i, 1)) Then MonDico.Add Tb(i, 1), Tb(i, 1)
Next i
Tb = MonDico.items
QuickSort Tb, LBound(Tb), UBound(Tb)
ListBox1.List = Tb
End Sub
 
 
Sub QuickSort(List, ByVal lngMin As Long, ByVal lngMax As Long)
Dim strMidValue As String
Dim lngHi As Long
Dim lngLo As Long
Dim lngIndex As Long
 
' S'il y a 0 ou 1 élément dans la liste,
' la sous-liste est déjà triée
If lngMin >= lngMax Then Exit Sub
 
' Valeur de partionnement
lngIndex = Int((lngMax - lngMin + 1) * Rnd + lngMin)
strMidValue = List(lngIndex)
 
' Echanger les valeurs
List(lngIndex) = List(lngMin)
 
lngLo = lngMin
lngHi = lngMax
Do
    ' Chercher, à partir de lngHi, une valeur < strMidValue
    Do While List(lngHi) >= strMidValue
        lngHi = lngHi - 1
        If lngHi <= lngLo Then Exit Do
    Loop
    If lngHi <= lngLo Then
        List(lngLo) = strMidValue
        Exit Do
    End If
 
    ' Echanger les valeurs lngLo et lngHi
    List(lngLo) = List(lngHi)
 
    ' Chercher à partir de lngLo une valeur >= strMidValue
    lngLo = lngLo + 1
    Do While List(lngLo) < strMidValue
        lngLo = lngLo + 1
        If lngLo >= lngHi Then Exit Do
    Loop
    If lngLo >= lngHi Then
        lngLo = lngHi
        List(lngHi) = strMidValue
        Exit Do
    End If
 
    ' Echanger les valeurs lngLo et lngHi
    List(lngHi) = List(lngLo)
Loop
 
' Trier les 2 sous-listes
QuickSort List, lngMin, lngLo - 1
QuickSort List, lngLo + 1, lngMax
End Sub | 
Partager