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 :

Tri multi-niveau sur 2 colonnes


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2014
    Messages : 28
    Par défaut Tri multi-niveau sur 2 colonnes
    Bonjour à tous,

    Je suis à la recherche d'un bout de code me permettant de trier sur 2 niveaux tel que le permet Excel sous l'onglet "données / trier / ajouter un niveau"

    Situation : Sur ma colonne A, j'ai des données texte et alphanumérique / Sur ma colonne B, j'ai des occurrences pour chaque donnée.
    NB: il peut exister des doublons, ce n'est pas un problème.

    Id Occ
    A61K 17
    A61K 19
    A61K 330
    A61P 20
    A61P 3
    A61P 250
    Arrival 50
    Phoenix 500
    Phoenix 800
    Arrival 70
    B29C 8
    B29C 13
    Arrival 90
    B29C 200
    A61K 16

    Objectif : classer sur la colonne a les données par ordre alphabétique tout en triant sur la colonne B l'occurrence du plus grand au plus petit, pour obtenir ceci :

    Id Occ
    A61K 330
    A61K 19
    A61K 17
    A61K 16
    A61P 250
    A61P 20
    A61P 3
    Arrival 90
    Arrival 70
    Arrival 50
    B29C 200
    B29C 13
    B29C 8

    ____________________________________________
    Jusqu'à présent, j'utilisais ce code, en utilisant une plage comprenant à la fois la colonne A et B, en pensant que le filtre considèrerait les 2 colonnes. En fait, il tri chaque colonne indépendamment, et casse donc tout le tableur puisque chaque donnée en colonne A est "glissée" de sa valeur en colonne B...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub Triage()
    Range("A2:B5000").Sort Key1:=Columns("A:A"), Order1:=xlAscending   ' Tri la colonne 1 (A) par ordre alphabétique
    Range("A2:B5000").Sort Key1:=Columns("B:B"), Order1:=xlDescending  ' Tri la colonne 2 (B) du plus grand au plus petit
    End Sub
    _____________________________________________

    Connaissez-vous une solution pour remédier à ce problème ?
    Merci par avance pour vos retours,

    Bien cordialement,
    François.

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut




    Bonjour,

    la solution se trouve déjà dans l'aide VBA de la méthode Sort car elle accepte aussi une deuxième clef de tri
    comme cela peut se constater en effectuant manuellement le tri …



    __________________________________________________________________________________________________
    Tous unis, tous Charlie

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 168
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Une procédure toute faite dont le lien se trouve dans cette contribution Procédure de tri - Excel 2003-2010
    A l'adresse du lien, le code de la procédure ainsi qu'un classeur exemple à télécharger;
    Dans ton cas, si la liste de données se trouve sur la feuille nommée Feuil1 et commence en cellule A1, la syntaxe est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SortTable ThisWorkbook.Worksheets("Feuil1"), SortList:="1;-2"
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  4. #4
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2014
    Messages : 28
    Par défaut
    Merci beaucoup à vous,

    Philippe, ta solution marche superbement.
    Coupler avec une macro pour éliminer les doublons uniquement sur la colonne "A" (Id), j'obtiens alors les couples "Id / Occurence" uniques présentant la valeur d'occurence la + élevée.

    Permettant de gagner 15 bonnes minutes de traitement a la mano.

    Merci encore.

    Bien à toi.
    François

  5. #5
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2014
    Messages : 28
    Par défaut
    Philippe, je me permets de revenir vers toi concernant ta SortList.

    Jusqu'à présent, j'utilisais ta syntaxe pour générer un tri sur 2 colonnes (colonne 1 de A à Z, et, colonne 2 du plus grand au plus petit)

    Je souhaiterais modifier ce qui est nécessaire dans ta SortList pour générer un tri cette fois sur 3 colonnes (colonne 1 de A à Z, colonne 2 de A à Z, et, colonne 3 du plus grand au plus petit).

    Comme dans ta SortList, il faudrait que les données restent solidaires sur chaque ligne, et que le tri ne "casse" pas le tableur.
    (Les données Cells(1, 1) / Cells(1, 2) / Cells(1, 3) sont liées et ne doivent pas être perturbées).

    Comment puis-je amener les modifications nécessaire pour amener ce résultat ?

    Dans le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub Triage()
    SortTable ThisWorkbook.Worksheets("Feuil1"), SortList:="1;2;-3"         ' Exécute la procédure de tri pour la feuille "excelfile" sur les colonnes 1 (Ascending) et 2 (Descending car négatif, donc plus grand au plus petit)
    End Sub
    Le résultat ne produit pas le bon résultat, et il semble que le tri ne fonctionne que sur la 1ère colonne ?

    Merci de ton retour par avance
    Bien à toi

    PJ : le fichier test
    test.xlsx

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 168
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Le résultat ne produit pas le bon résultat, et il semble que le tri ne fonctionne que sur la 1ère colonne ?
    Effectivement pour une raison que j'ignore le niveau 3 du tri avait un mauvais argument. (Ligne 7 de la partie ci-dessous Il fallait Order3 au lieu de Order2 qui était présent sur les deux lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     ' *** Sort ***
     If Len(CustomList) Then Application.AddCustomList ListArray:=Split(CustomList, ";") ' Tri sur liste personnalisée
     With Table
      .Sort _
       Key1:=.Worksheet.Range(SortAddr(1)), Order1:=SortOrder(1), DataOption1:=SortTxtVal(1), _
       Key2:=.Worksheet.Range(SortAddr(2)), Order2:=SortOrder(2), DataOption2:=SortTxtVal(2), _
       Key3:=.Worksheet.Range(SortAddr(3)), Order3:=SortOrder(3), DataOption3:=SortTxtVal(3), _
        Header:=xlNo + Header, Orientation:=Orientation, MatchCase:=False, _
        OrderCustom:=1 + (Application.CustomListCount * Abs(Len(CustomList) > 0))
     End With
     If Len(CustomList) Then With Application: .DeleteCustomList .CustomListCount: End With ' Destruction de la liste personnalisée
     On Error GoTo 0: Set Table = Nothing: Exit Sub ' *** Fin de procédure ***
    Je viens de corriger la source et le classeur à télécharger (Version 5.2) à l'adresse Procédure de tri - VBA Excel 2003-2010
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  7. #7
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2014
    Messages : 28
    Par défaut
    Merci Philippe,

    Ton travail sur cette SortTable est vraiment super.
    Je vais prendre le temps de bien comprendre ton code.

    Bonne soirée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] [VBA] Tri multi critère sur tableau
    Par Carlito01 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/05/2014, 15h01
  2. Réponses: 1
    Dernier message: 10/07/2012, 15h10
  3. Tri multi-criteres sur une liste d'objets
    Par Rolf-IV dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 01/04/2009, 08h21
  4. Tri effectif que sur certaines colonnes
    Par benoitbs dans le forum Excel
    Réponses: 4
    Dernier message: 22/02/2008, 15h36
  5. tri par moyenne sur plusieurs colonnes
    Par adr22 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 11/12/2007, 16h19

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