Sub NewQuickSorts()
Dim Tb
Tb = Array("toto§45", "titi§12", "U3§Usine3", "riri§27", "fifi§85", "Patrick§ClasseB2P", "toto§34llou", "E3§Entreprise3", "loulou§94", "tutu§62", "Robert§ClasseB2R", "toto1§12", "toto2§45", "Dranreb§ClasseC3D", "U2§Usine2", "E1§Entreprise1", "tata§13", "fifi§18", "Julien§ClasseA1J", "titi§73", "E2§Entreprise2", "U1§Usine1", "Ryu§ClasseB2T", "mapomme§ClasseC3M")
' Tb = SortQuickSort(Tb, 1, -1, -1, 167) ' tri par suffixe croissant full argument(argument sepa en numerique)
' Tb = SortQuickSort(Tb, 1, -1, -1, "§") ' tri par suffixe croissant full argument(argument sepa en string)
' Tb = SortQuickSort(Tb, 2) ' tri par chaine complète decroissant
'Tb = SortQuickSort(Tb, 1) ' tri par chaine complète croissant
'Tb = SortQuickSort(Tb, Sepa:="§") ' tri par suffixe (croissant par defaut) (argument sepa en string)
' Tb = SortQuickSort(Tb, Sepa:="à") ' (test avec un mauvais separateur) tri par suffixe (croissant par defaut) (argument sepa en string)
MsgBox Join(Tb, vbNewLine)
End Sub
Function SortQuickSort(tbl, _
Optional Sortmode& = 1, _
Optional Gauche& = -1, _
Optional Droite& = -1, _
Optional Sepa As Variant = "~") ' Quick sort
Dim ref, G&, D&, temp1, First, tim#
If Droite = -1 And Gauche = -1 Then First = 1 Else First = 0
Droite = IIf(Droite = -1, UBound(tbl), Droite)
If Val(Sepa) > 0 Then Sepa = Chr(Sepa)
Gauche = IIf(Gauche = -1, LBound(tbl), Gauche)
ref = tbl((Gauche + Droite) \ 2)
G = Gauche: D = Droite
Do
If Sortmode = 1 Then
Do While Split(tbl(G), Sepa)(Abs(tbl(G) Like "*" & Sepa & "*")) < Split(ref, Sepa)(Abs(ref Like "*" & Sepa & "*")): G = G + 1:: Loop
Do While Split(ref, Sepa)(Abs(ref Like "*" & Sepa & "*")) < Split(tbl(D), Sepa)(Abs(tbl(D) Like "*" & Sepa & "*")): D = D - 1:: Loop
Else
Do While Split(tbl(G), Sepa)(Abs(tbl(G) Like "*" & Sepa & "*")) > Split(ref, Sepa)(Abs(ref Like "*" & Sepa & "*")): G = G + 1:: Loop
Do While Split(ref, Sepa)(Abs(ref Like "*" & Sepa & "*")) > Split(tbl(D), Sepa)(Abs(tbl(D) Like "*" & Sepa & "*")): D = D - 1:: Loop
End If
If G <= D Then
temp1 = tbl(G): tbl(G) = tbl(D): tbl(D) = temp1
G = G + 1: D = D - 1
Ch = Ch + 1
End If
Debug.Print "résultat " & Join(tbl)
Debug.Print "et on reboucle jusqu'a que G soit > D"
Loop While G <= D
If G < Droite Then x = SortQuickSort(tbl, Sortmode, G, Droite, Sepa): Debug.Print "c'est G(pas Gauche qui est < Droite trouvé on relance la fonction en appel récursif avec le nouveau gauche et droite donc G et droite "
If Gauche < D Then x = SortQuickSort(tbl, Sortmode, Gauche, D, Sepa): Debug.Print "c'est Gauche(pas G) qui est < D trouvé on relance la fonction en appel récursif avec le nouveau gauche et droite donc G et droite "
If First = 1 Then SortQuickSort = tbl
End Function