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
| Option Compare Text
Type Personne
Nom As String
Dte As Long
Ville As String
End Type
Sub triSimpleStructures()
t = Timer
Set Rng = Range("A2:C" & [A65000].End(xlUp).Row)
TblE = Rng.Value
n = UBound(TblE)
Dim a() As Personne: ReDim a(1 To n)
For i = 1 To UBound(TblE)
a(i).Nom = TblE(i, 1): a(i).Dte = TblE(i, 2): a(i).Ville = TblE(i, 3)
Next i
'--- tri par nom
Tri a(), LBound(a), UBound(a)
'-- transfert feuille pour test
Dim TblS(): ReDim TblS(1 To n, 1 To UBound(TblE, 2))
For i = 1 To n
TblS(i, 1) = a(i).Nom
TblS(i, 2) = a(i).Dte
TblS(i, 3) = a(i).Ville
Next i
[A2].Resize(n, UBound(TblS, 2)).Value = TblS
MsgBox Timer - t
End Sub
Sub Tri(a() As Personne, gauc, droi) ' Quick sort
Dim tmp As Personne
pref = (gauc + droi) \ 2
ref = a(pref).Nom
g = gauc: d = droi
Do
Do While a(g).Nom < ref: g = g + 1: Loop
Do While a(d).Nom > ref: d = d - 1: Loop
If g <= d Then
tmp = a(g): a(g) = a(d): a(d) = tmp
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call Tri(a, g, droi)
If gauc < d Then Call Tri(a, gauc, d)
End Sub |
Partager