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
|
' TRI D'UN ARRAY 2D via la colonne N°colTri
' a() = le tableau à trier
' gauc = indice bas du tableau
' droi = indice haut du tableau
' colTri = la colonne sur laquelle on effectue le tri
' http://boisgontierjacques.free.fr/
Sub tri(a(), gauc, droi, NbCol, colTri) ' Quick sort (Jacques Boisgontier)
ref = a((gauc + droi) \ 2, colTri)
g = gauc: D = droi
Do
Do While a(g, colTri) < ref: g = g + 1: Loop
Do While ref < a(D, colTri): D = D - 1: Loop
If g <= D Then
For C = 0 To NbCol - 1
temp = a(g, C): a(g, C) = a(D, C): a(D, C) = temp
Next
g = g + 1: D = D - 1
End If
Loop While g <= D
If g < droi Then Call tri(a, g, droi, NbCol, colTri)
If gauc < D Then Call tri(a, gauc, D, NbCol, colTri)
End Sub
Private Sub UserForm_Initialize()
Dim tableau(4, 3) As Variant 'tableau(x,y) à deux dimensions, x lignes et y colonnes
Dim i As Integer
tableau(0, 1) = "toto"
tableau(1, 1) = "nono"
tableau(2, 1) = "dada"
tableau(3, 1) = "titi"
tableau(0, 2) = 50
tableau(1, 2) = 30
tableau(2, 2) = 10
tableau(3, 2) = 4
tableau(0, 3) = "Z"
tableau(1, 3) = "C"
tableau(2, 3) = "M"
tableau(3, 3) = "F"
For i = 0 To 3
Me.ListBox1.ColumnCount = 3
Me.ListBox1.ColumnWidths = "30;30;30"
Me.ListBox1.AddItem
Me.ListBox1.Column(0, i) = tableau(i, 1)
Me.ListBox1.Column(1, i) = tableau(i, 2)
Me.ListBox1.Column(2, i) = tableau(i, 3)
Next
End Sub
Private Sub btntri_Click()
Dim a()
With Me
a = .ListBox1.List
NbCol = .ListBox1.ColumnCount
Call tri(a(), LBound(a), UBound(a), NbCol, 1)
.ListBox1.List = a
End With
End Sub |
Partager