Function DicoTriKeysVal(dico, colTri) As Object
Dim d As Object
Set d = CreateObject("scripting.dictionary")
Dim Tbl(): ReDim Tbl(1 To dico.Count, 1 To 2)
i = 0
For Each c In dico.Keys
i = i + 1
Tbl(i, 1) = c: Tbl(i, 2) = dico(c)
Next c
tri Tbl, LBound(Tbl), UBound(Tbl), colTri, 0
For i = LBound(Tbl) To UBound(Tbl)
d(Tbl(i, 1)) = Tbl(i, 2)
Next i
Set DicoTriKeysVal = d
End Function
Sub tri(a, gauc, droi, colTri, ordre) ' Quick sort Ordre=1 Croissant/Ordre=0:décroissant
ref = a((gauc + droi) \ 2, colTri)
g = gauc: d = droi
Do
If ordre = 1 Then
Else
Do While a(g, colTri) > ref: g = g + 1: Loop
Do While ref > a(d, colTri): d = d - 1: Loop
End If
If g <= d Then
temp = a(g, 1): a(g, 1) = a(d, 1): a(d, 1) = temp
temp = a(g, 2): a(g, 2) = a(d, 2): a(d, 2) = temp
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call tri(a, g, droi, colTri, 0)
If gauc < d Then Call tri(a, gauc, d, colTri, 0)
End Sub