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
| Option Compare Text
Sub Tri()
Dim a() ' le tableau VBA
' on rempli le tableau avec ta plage
' adapte la plage !
a = [C8:C10].Value
' je prend pour exemple :
' - C8 = "A"
' - C9 = "T"
' - C10 = "Z"
'-- tri croissant
'Call Quick(a(), LBound(a), UBound(a), 1, True)
' avant de faire le tri
' mon premier élément est "A"
MsgBox a(1, 1)
'-- tri décroissant
Call Quick(a(), LBound(a), UBound(a), 1, False)
' après tri décroissant
' mon premier élément est "Z"
MsgBox a(1, 1)
End Sub
Sub Quick(a(), gauc, droi, col, ordre) ' Quick sort
' Procédure qui effectue le tri
' a() = le tableau à trier
' gauc = le premier élément du tableau
' droi = le dernier élément
' col = la dimension à trier
' ordre : True = croissant / False = décroissant
ref = a((gauc + droi) \ 2, col)
g = gauc: d = droi
Do
If ordre Then
Do While a(g, col) < ref: g = g + 1: Loop
Do While ref < a(d, col): d = d - 1: Loop
Else
Do While a(g, col) > ref: g = g + 1: Loop
Do While ref > a(d, col): d = d - 1: Loop
End If
If g <= d Then
For i = LBound(a, 2) To UBound(a, 2)
temp = a(g, i): a(g, i) = a(d, i): a(d, i) = temp
Next i
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call Quick(a, g, droi, col, ordre)
If gauc < d Then Call Quick(a, gauc, d, col, ordre)
End Sub |
Partager