VBA, matrice, vecteur, tri

dzino Messages postés 2 Statut Membre -  
lermite222 Messages postés 9042 Statut Contributeur -
Bonjour,

Je vous expose ma situation :
J'ai un tableau, composé de deux colonnes. Une avec des noms et l'autre avec des numéros.
Ce que je sais faire:
- c'est déclarer un vecteur, que mon vecteur, via une boucle, prend les valeurs d'une colonne (numéros).
- effectuer le tri de ce vecteur (tjrs via une boucle)
- Puis pour finir, copier mon vecteur trié dans ma colonne de départ (numéros)

Maintenant, ce que je ne sais pas faire est la généralisation à une matrice.
Enfaite je voudrais effectuer la même chose mais que le tri affecte ma colonne des noms. En d'autres termes, chaque noms est associé à un numéro, si je trie les numéros, la colonne noms va se modifier aussi (en fonction de mon tri).

Les solutions avec l'enregistreur de macro ne m'intéressent pas, j'aimerais comprendre la logique !

Merci d'avance,

3 réponses

  1. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Bonjour,
    Les solutions avec l'enregistreur de macro ne m'intéressent pas, j'aimerais comprendre la logique !
    C'est justement ce que tu dois faire, pour comprendre la logique tu poste le code sur un poste suivant et ont te l'expliquera.
    A moins que tu veux te compliqué la vie avec des boucles et des tests.
    A+

    Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
    NOTE : Je ne répond pas aux MP pour les questions techniques.
    0
  2. dzino Messages postés 2 Statut Membre
     
    Bonjour,

    Voilà ce que j'ai fait :

    Range("A1").Select
    n = Range(Selection, Selection.End(xlDown)).Count
    m = Range(Selection, Selection.End(xlToRight)).Count

    ReDim tableau(1 To n, 1 To m) As Variant

    For i = 2 To n
    tableau(i, 1) = Cells(i, 1)
    Next i

    For i = 2 To n
    tableau(i, 2) = Cells(i, 2)
    Next i

    For i = 1 To n
    For j = 1 To n - 1
    If tableau(j, 2) > tableau(j + 1, 2) Then
    a = tableau(j, 2)
    b = tableau(j, 1)
    tableau(j, 2) = tableau(j + 1, 2)
    tableau(j, 1) = tableau(j + 1, 1)
    tableau(j + 1, 2) = a
    tableau(j + 1, 1) = b
    End If
    Next j
    Next i

    For i = 1 To n - 1
    Cells(i + 1, 1) = tableau(i + 1, 1)
    Cells(i + 1, 2) = tableau(i + 1, 2)
    Next i

    C'est sur que c'est plus long, mais l'idée était de comprendre.
    0
  3. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Si tu veux VRAIMENT... mais alors Vraiment... te compliquer la vie, voir du côté de l'objet Dictionary.
    Mais tu perd ton temps, fais un tri avec l'éditeur de macro.
    A++
    0