VBA - tri tableau 3x3

Fermé
Cha69 Messages postés 32 Date d'inscription jeudi 23 avril 2009 Statut Membre Dernière intervention 16 mai 2009 - 14 mai 2009 à 17:37
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 - 16 mai 2009 à 16:43
Bonjour,

Je débute depuis quelques jours sur VBA et à vrai dire, je me mélange les pinceaux !!

Comment trier un tableau à 3 colonnes et 3 lignes en fonction de la 3ème ligne et par ordre décroissant?

ex:
10 19 40
6 16 76
50 100 300

quand l'algo fait le tri, je voudrais qu'il déplace la colonne entièrement et non juste la valeur. pour obtenir ceci :

40 19 10
76 16 6
300 100 50


Merci beaucoup pour votre aide !!

3 réponses

eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 239
14 mai 2009 à 19:11
Bonjour,

Dans ces cas là c'est plus simple de le faire avec l'enregistreur de macro pour avoir les parametres.
Et tu obtiens :
    Range("A1:C3").Sort Key1:=Range("A3"), Order1:=xlDescending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlLeftToRight, _
        DataOption1:=xlSortNormal
eric
0
Cha69 Messages postés 32 Date d'inscription jeudi 23 avril 2009 Statut Membre Dernière intervention 16 mai 2009 4
16 mai 2009 à 12:35
Bonjour Eriiic!

Ta solution n'est pas réalisable, car le tableau construit n'est pas sur excel mais sur VBA.
Le tableau est fictif.
J'avais un code qui marchait pour un tableau à une colonne mais il ne marche pas pour trois colonnes!
Il ne trie que la troisième ligne sans modifier les autres.

exemple code ne fonctionnant pas:

Dim tableau3(1 To 3, 1 To 20)

For l = 1 To nb
m = l

For k = m + 1 To nb + 1
If tableau3(3, k) > tableau3(3, m) Then
m = k
End If
Next k

If l <> m Then
tmp = tableau3(3, m)
tableau3(3, m) = tableau3(3, l)
tableau3(3, l) = tmp
End If

Next l
0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 239
16 mai 2009 à 16:43
Sans analyser ton code s'il ne trie que la 3ème ligne c'est que tu ne permutes pas les éléments des autres lignes en même temps...
Ceci dit rien ne t'empeche d'utiliser une feuille pour y déposer ton tableau et utiliser le .sort qui sera toujours plus performant que 2 ou 3 boucles imbriquées contenant des tests.
Ex:
Sub test()
    Dim tableau3
    ReDim tableau3(1 To 3, 1 To 20)
    ' remplir tableau3 avec ses valeurs
    '
' on dépose le tableau
    [Feuil2!A1:C20] = tableau3
' on trie décroissant sur la ligne 3
    [Feuil2!A1:C20].Sort Key1:=Range("A3"), Order1:=xlDescending, Header:=xlGuess, _
            OrderCustom:=1, MatchCase:=False, Orientation:=xlLeftToRight, _
            DataOption1:=xlSortNormal
' et on récupère le résultat
    tableau3 = [Feuil2!A1:C20].Value
End Sub

A moins que ce ne soit pour te perfectionner en vba...

eric
0