Tri rapide avec vba excel
bonjour, :cry:
j'aurai besoin de vos talents pour m'aider a implementer un code sur VBA pour excel qui me fera un tri rapide (quicksort) d'une serie de chiffre dans une colonne sans necessairement connaitre combien de valeurs j'ai
voila ce quil faut faire :
la methode qui doit etre utilisée est la methode pivot fixe . idealement la derniere valeur de ma serie.
je dois avoir une sub qui me lit les donnees a partir de ma feuille excel qui les mets ensuite en memoire , ensuite , CEST LA FONCTION qui me permettra de faire le tri .
elle doit faire en sorte de faire avancer mon pivot vers l'avant jusqu'a temps ou toutes les valeurs qui sont devant lui sont plus petites a lui ,
ensuite je prend un autre pivot pour faire le travail pour les donnees qui sont restés deriere et ainsi de suite ,
jai commence avec ce code la :
-----------------------------------------------------------------------
Code:
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
| Sub litcalculecrit()
Dim donnees(2302) As Double, i As Integer, mini As Double, maxi As Double, tri As Double
'Etape de lecture
For i = 1 To 2302
donnees(i) = Worksheets("feuil1").Cells(i, 1).Value
Next i
'etape de calcul
tri = Trirapid(donnees)
'etape decriture
For i = 1 To 2302
Worksheets("feuil1").Cells(i, 2).Value = donnees(i)
Next
--------------------------------------------------------------
Function Trirapid(donnees() As Double) As Double
Dim n As Double, i As Long, temp As Double, pivot As Double, j As Long
n = UBound(donnees) - LBound(donnees) + 1
pivot = donnees(n)
For i = 1 To n - 1
If pivot < donnees(i) Then
temp = donnees(i)
For j = i + 1 To n - 1
donnees(j - 1) = donnees(j)
Next
donnees(n - 1) = donnees(n)
donnees(n) = temp
i = i - 1
End If
Next |
MERCI DE VOTRE AIDE à l'avance
Attention au tri automatique Excel
Bonjour,
C'est malheureusement faux, car Excel trie comme un pignouf !
Essayez donc en mettant dans les cellules A1 à A4 les valeurs suivantes : "a-a", "ac", "a-b", "a-d"
Une véritable macro VBA de tri les rangera bien dans l'ordre "a-a", "a-b", "a-d", "ac"
alors qu'Excel2007 donne : "a-a", "a-b", "ac", "a-d"
Autre problème si on mélange lettres majuscules et minuscules...
Je n'ai pas trouvé la moindre logique dans la méthode utilisée par Excel.
Bon courage...