Rechercher : dans
Par :

VBA - tri tableau 3x3

Dernière réponse le 16 mai 2009 à 16:43:52 Cha69, le 14 mai 2009 à 17:37:21 
 Signaler ce message aux modérateurs

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 !!

Configuration: Windows XP Internet Explorer 6.0

Meilleures réponses pour « VBA tri tableau 3x3 » dans :
Trier un tableau sans utiliser la fonction sort VoirTrier un tableau sans utiliser la fonction sort D'abord on initialise une variable $max avec la 1ère valeur de tableau. Ensuite on va faire une boucle tant que le tableau contient encore des éléments. C'est avec la fonction splice qui a le rôle...
Tri par fusion - récursivité- VoirVoici une procédure récursive qui permet de trier un tableau de n entiers en utilisant la méthode de tri par fusion : Procedure Tri_Fusion (Var t : TAB; g, d : integer); Var m, i, j, k : integer; s : TAB; Begin If d > g Then ...
Pascal - Tri par insertion - Récursivité- VoirVoici une procédure récursive qui permet de trier un tableau de n entiers en utilisant la méthode de tri par insertion : Procedure Tri_Ins (Var t: TAB; n: integer); Var aux,i : integer; begin If n > 1 Then begin ...

1

eriiic, le 14 mai 2009 à 19:11:38

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

Répondre à eriiic

2

Cha69, le 16 mai 2009 à 12:35:44

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

Répondre à Cha69

3

 eriiic, le 16 mai 2009 à 16:43:52

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

Répondre à eriiic