Sub testcolonne()
Dim a
a = feuil1.[A1:b7000].Value' veuiller a preciser la feuille !!!!!!!!!
feuil1.[A1:b7000] = TableOrderByChooseColumn(a, Colonne:=1) '2 pour la colonne 2' ' pour ordre croissant plus d'arguments necessaires
End Sub
Function TableOrderByChooseColumn(a, Optional gauc = -1, Optional droi = -1, Optional sens As Long = 0, Optional Colonne As Long = 1) ' Quick sort
'Auteur patricktoulon
Dim ref, g&, d&, temp1, temp2, C&
If TypeName(a) = "Range" Then a = a.Value
droi = IIf(droi = -1, UBound(a), droi): gauc = IIf(gauc = -1, LBound(a), gauc)
ref = a((gauc + droi) \ 2, Colonne)
g = gauc: d = droi
Do
Select Case sens 'en fonction du sens de tri choisi
Case 0
' Pour un tri croissant
Do While a(g, Colonne) < ref: g = g + 1: Loop
Do While ref < a(d, Colonne): d = d - 1: Loop
Case 1
' Pour un tri décroissant
Do While a(g, Colonne) > ref: g = g + 1: Loop
Do While ref > a(d, Colonne): d = d - 1: Loop
End Select
If g <= d Then
'récupération des deux lignes entieres du tableau (a)
temp1 = Application.Index(a, g, 0): temp2 = Application.Index(a, d, 0)
'transfert d'une ligne a l'autre vice et versa
For C = 1 To UBound(temp1): a(g, C) = temp2(C): a(d, C) = temp1(C): Next
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then X = TableOrderByChooseColumn(a, g, droi, sens, Colonne)
If gauc < d Then X = TableOrderByChooseColumn(a, gauc, d, sens, Colonne)
TableOrderByChooseColumn = a
End Function