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
|
Sub TriTableau2D2Critères()
Dim clé() As String, index() As Long
a = Range("A2:D" & [A65000].End(xlUp).Row).Value
Dim b()
ReDim b(LBound(a) To UBound(a), LBound(a, 2) To UBound(a, 2))
ReDim clé(LBound(a) To UBound(a, 1))
ReDim index(LBound(a) To UBound(a, 1))
For i = LBound(a) To UBound(a, 1)
clé(i) = a(i, 1) & Format(a(i, 3), "0000"): index(i) = i
Next i
Call Tri(clé(), index(), LBound(a), UBound(clé))
For lig = LBound(clé) To UBound(clé)
For col = LBound(a, 2) To UBound(a, 2): b(lig, col) = a(index(lig), col): Next col
Next lig
[H2].Resize(UBound(b), UBound(b, 2)) = b ' Attention! pas de dates dans le champ
' si dates <Excel 2007 [K2].Resize(UBound(b)).Value = Application.index(b, , 4) ' Colonne des dates
End Sub
Sub Tri(clé() As String, index() As Long, gauc, droi) ' Quick sort
ref = clé((gauc + droi) \ 2)
g = gauc: d = droi
Do
Do While clé(g) < ref: g = g + 1: Loop
Do While ref < clé(d): d = d - 1: Loop
If g <= d Then
temp = clé(g): clé(g) = clé(d): clé(d) = temp
temp = index(g): index(g) = index(d): index(d) = temp
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call Tri(clé, index, g, droi)
If gauc < d Then Call Tri(clé, index, gauc, d)
End Sub |
Partager