Classer tableau non physique de type f(i,j)
Bonjour,
Après avoir longtemps cherché pas moyen de trouver le code pour classer un tableau par ordre croissant.
Mais pas un tableau physique, un tableau de données donc non visuel (f() ou f(i,j) etc).
Il n'existe aucune instruction pour manipuler des tableaux de données ?
Quelqu'un aurait des infos à ce sujet car j'ai l'impression que personne n'utilise ce genre de tableau ...
Bonjour,
Sur le site de Jacques Boisgontier [http://boisgontierjacques.free.fr/] on trouve une procédure de tri rapide (Quick Sort) pour les variables tableaux à une dimension :
Sub tri(a, gauc, droi) ' Quick sort
ref = a((gauc + droi) \ 2)
g = gauc: d = droi
Do
Do While a(g) < ref: g = g + 1: Loop
Do While ref < a(d): d = d - 1: Loop
If g <= d Then
temp = a(g): a(g) = a(d): a(d) = temp
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
Exemple de code appelant :
Call tri(Tb, LBound(Tb), UBound(Tb))
Pour le tri de tableaux multidimensionnels, tu peux regarder cette discussion : http://stackoverflow.com/questions/4873182/sorting-a-multidimensionnal-array-in-vba
Bonjour,
Tu peux faire une recherche sur le thème
vba excel trier variable tableau
A+
Merci,
Le soucis c'est que le tableau est en colonne et non en ligne du coup je suis perdu.
C'est quand même incroyable qu'il n'existe pas de fonction toute faite pour trier un simple tableau ?!!
C'est quand même incroyable qu'il n'existe pas de fonction toute faite pour trier un simple tableau ?!!
La fonction existe, je te l'ai donnée ci-dessus.
C'est juste que tu ne sais pas l'utiliser.
Les variables tableaux demandent un peu d'entrainement au début. Mais une fois bien maitrisées elles sont un redoutable outil.
Montre nous le code tenté pour le tri de ton tableau "en colonne" pour corrections.
Quand je parle d'une fonction c'est un "mot" avec argument qui permet de classer juste en mettant en argument le tableau voulu.
Ici le code est le suivant :
Sub couple_d1d2()
Dim fmin1(200)
For i = 0 To 2 ' scanne les d1
Sheets("Datas").Range("G75").Value = Sheets("Calculations").Range("CE" & 79 + i)
fmin1(i) = Sheets("Results").Range("Z53")
Next
Call tri(fmin1, LBound(fmin1), UBound(fmin1))
MsgBox fmin1(0) & " " & fmin1(1) & " " & fmin1(2)
End Sub
Sub tri(a, gauc, droi) ' Quick sort
ref = a((gauc + droi) \ 2)
g = gauc: d = droi
Do
Do While a(g) < ref: g = g + 1: Loop
Do While ref < a(d): d = d - 1: Loop
If g <= d Then
temp = a(g): a(g) = a(d): a(d) = temp
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
J'ai remplacer le tableau à double entrée par un simple pour tester.
Ce que je ne comprend pas c'est comment accéder au tableau trié à la fin ? c'est le même tableau qui a été mis en argument ? ou c'est un autre tableau ?
Quand je veux afficher le contenu des premières lignes du tableau initial rien ne s'affiche, tout est vide.
Bon c'est pas du tout mon trip la programmation donc je suis pas spécialement doué pour debugger un programme.
Merci d'avance pour votre aide.
phurba.
Ce que je ne comprend pas c'est comment accéder au tableau trié à la fin ? c'est le même tableau qui a été mis en argument ? ou c'est un autre tableau ?
C'est le même tableau. Tu l'envoies en paramètre à la fonction Tri et elle te le rends tout trié...
Quand je veux afficher le contenu des premières lignes du tableau initial rien ne s'affiche, tout est vide.
C'est parce que tu n'as pas affecté de données à ton tableau.
Regarde ce test, il t'aidera à comprendre :
Sub Test()
Dim fmin1(2)
fmin1(0) = "David"
fmin1(1) = "Roger"
fmin1(2) = "Albert"
MsgBox fmin1(0) & " " & fmin1(1) & " " & fmin1(2)
Call tri(fmin1, LBound(fmin1), UBound(fmin1))
MsgBox fmin1(0) & " " & fmin1(1) & " " & fmin1(2)
End Sub
Sub tri(a, gauc, droi) ' Quick sort
ref = a((gauc + droi) \ 2)
g = gauc: d = droi
Do
Do While a(g) < ref: g = g + 1: Loop
Do While ref < a(d): d = d - 1: Loop
If g <= d Then
temp = a(g): a(g) = a(d): a(d) = temp
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
C'est parce que tu n'as pas affecté de données à ton tableau
Si justement ici :
Sheets("Datas").Range("G75").Value = Sheets("Calculations").Range("CE" & 79 + i)
fmin1(i) = Sheets("Results").Range("Z53")
d'où mon interrogation.
Bon en réalité c'est à cause de la déclaration du tableau au début, si l'argument n'est pas = à 2 le programme n'affiche rien !
Moi et la prog' ...
merci encore je vais essayer de me débrouiller maintenant.
phurba.