Salut,
Voici un algo su shellsort pour trier un tableau VBA:
'Respect ou non de la casse, Croissant ou décroissant, Tableau Uni et bidimensionel
Sub TriParInsertion(T, Col As Byte, Optional SensTri As Boolean = True _
, Optional Casse As Boolean = True) 'Zon
Dim I&, J&, K&, L&, Chaine
I = 1
While I <= UBound(T) - LBound(T) + 1
I = I * 3 + 1
Wend
I = I / 3
While (I > 0)
J = LBound(T) + I
While J <= UBound(T)
K = J
Do
On Error Resume Next
If Casse Then
If UCase(T(K, Col)) >= UCase(T(K - I, Col)) = SensTri Then
If Err = 0 Then
Exit Do
Else
If UCase(T(K)) >= UCase(T(K - I)) = SensTri Then Exit Do
End If
End If
Else
If (T(K, Col)) >= (T(K - I, Col)) = SensTri Then
If Err = 0 Then
Exit Do
Else
If (T(K)) >= (T(K - I)) = SensTri Then Exit Do
End If
End If
End If
Err.Clear
For L = LBound(T, 2) To UBound(T, 2)
Chaine = T(K, L)
T(K, L) = T(K - I, L)
T(K - I, L) = Chaine
Next L
If Err <> 0 Then
Chaine = T(K)
T(K) = T(K - I)
T(K - I) = Chaine
End If
K = K - I
Loop Until K < (LBound(T) + I)
J = J + 1
Wend
I = I / 3
J = J + 1
Wend
End Sub
Par ex:
T=range("A1:C5000").value
'on trie le tableau sur la 1 ère colonne en ordre décroissant
triparinsertion T,1,false
A+++
Lien supprimé