Sub QuickSortColonnes(arr As Variant, ByVal low As Long, ByVal high As Long) 'Quick sort décroissant ligne 2 croissant ligne 1
Dim i As Long, j As Long
Dim pivot1 As Variant, pivot2 As Variant
Dim tmp1 As Variant, tmp2 As Variant
i = low
j = high
pivot1 = arr(2, (low + high) \ 2) ' valeur
pivot2 = arr(1, (low + high) \ 2) ' n° d'origine
Do While i <= j
Do While Comparer(arr(2, i), arr(1, i), pivot1, pivot2) < 0
i = i + 1
Loop
Do While Comparer(arr(2, j), arr(1, j), pivot1, pivot2) > 0
j = j - 1
Loop
If i <= j Then
' Échanger les deux colonnes i et j (les deux lignes)
tmp1 = arr(1, i): tmp2 = arr(2, i)
arr(1, i) = arr(1, j): arr(2, i) = arr(2, j)
arr(1, j) = tmp1: arr(2, j) = tmp2
i = i + 1
j = j - 1
End If
Loop
If low < j Then QuickSortColonnes arr, low, j
If i < high Then QuickSortColonnes arr, i, high
End Sub
Function Comparer(v1 As Variant, k1 As Variant, v2 As Variant, k2 As Variant) As Long
' Compare les valeurs principales (v1, v2), puis secondaire (k1, k2)
Select Case True
Case IsEmpty(v1)
Comparer = Abs(Not IsEmpty(v2))
Case Else
Select Case True
Case IsEmpty(v2)
Comparer = -1
Case Else
Select Case v1 - v2
Case 0
If k1 < k2 Then
Comparer = -1
ElseIf k1 > k2 Then
Comparer = 1
Else
Comparer = 0
End If
Case Is < 0
Comparer = 1
Case Is > 0
Comparer = -1
End Select
End Select
End Select
End Function