IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

[E-07] Méthode de tri tableau


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 17
    Par défaut [E-07] Méthode de tri tableau
    Bonjour,

    Je dois trier un tableau avec 5 colonnes et 41 lignes.

    Voici le tableau en question : t_general(j, i)

    FR0000031122 AIR FRANCE 20,66 24,1218604 0,16756343
    FR0000045072 CREDIT AGRICOLE 22,46 23,2544186 0,035370374
    FR0000120073 AIR LIQUIDE 91,618 80,50849612 - 0,121258965
    FR0000120172 CARREFOUR 50,49 45,08139535 - 0,107122295
    FR0000120271 TOTAL 57,03 50,96108527 - 0,10641618
    FR0000120321 L OREAL 86,95 78,5227907 - 0,096920176


    Le tableau continue comme ca sur 41 lignes.
    Je souhaite le trier a partir de la colonne de droite (0,16756343) en tri décroissant. Il faut bien sur que les autres colonnes soient elles aussi triées en correspondance.

    Si quelqu'un voulait bien avoir la bienveillance de mettre un algorithme de tri pour le réaliser, cela serait très gentils !!!

  2. #2
    Membre Expert Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Par défaut
    bonjour helprojet le forum si j ai compris!! avec l enregistreur de macros

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Macro2()
        Range("A1:E41").Select
        Range("E41").Activate
        Selection.Sort Key1:=Range("E41"), Order1:=xlDescending, Header:=xlGuess, _
         OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
         DataOption1:=xlSortNormal
    End Sub

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 17
    Par défaut
    Je me suis mal exprimé, mon tableau n'est pas sur une feuille excel, c'est juste un tableau vb avec les données suivantes que j'ai imprimées afin de montrer comment le tableau était fait.

  4. #4
    Membre émérite
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2006
    Messages
    542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mai 2006
    Messages : 542
    Par défaut
    Bonjour à tous
    Bonjour helprojet

    Tout d'abord, pourquoi trier ? à quoi cela peut te servir ?

    Ne pas oublier que de nombreuses fonctions Excel sont utilisables en VBA avec l’objet WorksheetFunction, suivi du nom en anglais de la fonction : le plus petit, le plus grand, la somme, .......

    Une solution complétant celle de Laetitia : tu copies ton Tablo() sur une feuille, tu le tries et tu remets le tout dans ton Tablo(). Un peu capilotracté, mais pourquoi pas.....

    Une 2ème solution : le tri à bulle ou par permutations (jamais essayé, tu trouveras des exemples sur internet)

    Une 3ème solution : le tri par sélection (jamais essayé, tu trouveras des exemples sur internet)

    Tu nous dis

    Eric

  5. #5
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonjour.

    Avec 41 lignes, un tri par substitution devrait faire l'affaire.
    On considère Tablo(1 to 41, 1 to 5) as variant à trier. On ajoute un tableau Index(1 to 41) as integer.
    L'idée est d'enregistrer l'ordre des éléments de Tablo dans Index.
    Comme j'ai un peu de temps :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Dim Tablo(1 To 41, 1 To 5) As Variant, Index() As Integer
    Dim i As Integer, k As Integer, Min As Integer, iTemp As Integer
     
    Const Fin As Integer = 41
    Const jC As Integer = 5
     
    ReDim Index(1 To Fin)
    For i = 1 To Fin
        Index(i) = i
    Next i
     
    For i = 1 To Fin
        Min = i
        For k = i + 1 To Fin
            If Tablo(Index(k), jC) < Tablo(Index(Min), jC) Then Min = k
        Next k
        iTemp = Index(i)
        Index(i) = Index(Min)
        Index(Min) = iTemp
    Next i
    A partir de là, Tablo(Index(i),j) renvoie la donnée de la colonne j et la ième ligne après tri. Suivant le besoin, on peut s'arrêter là.

    Maintenant si tu veux que le tri soit physiquement contenu dans le tableau, c-a-d que Tablo(i) soit la ième ligne après tri, tu peux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Dim Tablo(1 To 41, 1 To 5) As Variant, Index() As Integer, v() As Variant
    Dim i As Integer, k As Integer, Min As Integer, iTemp As Integer
     
    Const Fin As Integer = 41
    Const jC As Integer = 5
     
    ReDim Index(1 To Fin)
    For i = 1 To Fin
        Index(i) = i
    Next i
     
    For i = 1 To Fin
        Min = i
        For k = i + 1 To Fin
            If Tablo(Index(k), jC) < Tablo(Index(Min), jC) Then Min = k
        Next k
        iTemp = Index(i)
        Index(i) = Index(Min)
        Index(Min) = iTemp
    Next i
     
    v = Tablo()
    For i = 1 To Fin
        For k = 1 To jC
            Tablo(i, k) = v(Index(i), k)
        Next k
    Next i
     
    Erase Index()
    Erase v()
    Bon dimanche,

    PGZ

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 17
    Par défaut
    Merci pour ce programme, je vais le tester cette apres-midi.

    Pour ce type de tableau de taille moyenne, ou tous les elements sont rangés de facon très aléatoire, votre algorithme est l'un des plus efficaces ?

Discussions similaires

  1. [XL-2013] Méthode de tri de tableau
    Par ben 48 dans le forum Excel
    Réponses: 4
    Dernier message: 19/09/2013, 13h46
  2. Réponses: 4
    Dernier message: 30/05/2007, 14h35
  3. algorithme de tri tableau :afficher que les éléments unique
    Par sofiane61 dans le forum Algorithmes et structures de données
    Réponses: 19
    Dernier message: 31/03/2005, 19h50
  4. [Débutant] Tri tableau String
    Par Sigwald dans le forum Collection et Stream
    Réponses: 22
    Dernier message: 14/05/2004, 08h55
  5. [langage] TRI TABLEAU ASSOCIATIF
    Par proner dans le forum Langage
    Réponses: 5
    Dernier message: 04/03/2003, 16h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo