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...
Mémoriser des constantes sous Excel VoirVous avez créé votre tableau, et il y a plusieurs constantes plusieurs fois utilisées (TVA, Taux horaire, etc..). Solution basique 1 :vous les inscrivez dans vos formules, ex : =C3*1,196 pour calculer une valeur TTC à partir d'une valeur...
Excel - Convertir fichier(s) CSV / XLS VoirComme dit dans le titre, cette application convertit des fichiers CSV en fichiers XLS N’est pas nécessaire pour Excel 2007, ce dernier faisant la conversion automatiquement La conversion n’ayant pas de mise en forme, en cas de modification...
VBScript - Les fonctions de manipulation de tableaux VoirLes fonctions de manipulation de tableaux Fonction Description Array(arglist) Crée un Variant contenant un tableau. L'argument arglist est la liste des valeurs, séparées par des...
Tableur - Les fonctions mathématiques VoirLes fonctions standards Méthode description ABS() Cette méthode renvoie la valeur absolue d'un nombre, il renvoie donc le nombre s'il est positif, son opposé (positif) s'il est négatif IMPAIR(valeur) Cette méthode renvoie la valeur...

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