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.

Rechercher des sujets similaires à "classer tableau physique type"