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 :

Limite 3 tris successifs en vba?


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 9
    Points : 9
    Points
    9
    Par défaut Limite 3 tris successifs en vba?
    Bonjour,

    j'ai un fichier sur lequel j'aimerais effectuer 6 tris successifs (6 clés de tris) sur les colonnes, et quand je code ça en vba, les 3 premiers tris successifs marchent très bien, mais à partir du moment où je rajoute une quatrième clé, le message "Erreur de compilation : argument nommé introuvable" apparait.
    J'ai l'impression que ca vient du fait que ce soit un quatrième critère de tri, car quand je mets ce critère en 3è (et sans 4è critère), le tri marche, donc ca ne vient pas du critère.

    Voici mon code :


    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
     
    Sub tri2()
     
        Dim nb As Integer
        nb = Application.WorksheetFunction.CountA(Range("A:A"))
     
        Dim plage As Excel.Range
        Set plage = Sheets(31).Range(Cells(2, 1), Cells(nb, 38))
     
        plage.Sort key1:=Range(Cells(2, 3), Cells(nb, 3)), Order1:=xlAscending, _
        key2:=Range(Cells(2, 20), Cells(nb, 20)), order2:=xlAscending, _
        key3:=Range(Cells(2, 1), Cells(nb, 1)), order3:=xlDescending, _
        key4:=Range(Cells(2, 16), Cells(nb, 16)), order4:=xlDescending
     
     
    End Sub
    Est-ce que le nombre de critères de tri est limité en vba? Parce que avec la fonction normale de tri on peut réaliser les 6 critères de tri successif.
    Ou alors y a-t-il une erreur dans mon code dont je ne me rends pas compte?

    Merci pour votre aide.

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    L'astuce est d'ajouter une colonne où tu concatène tes 6 colonnes de critères, tu tri sur cette colonne ajoutée et ensuite tu la supprime.

  3. #3
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, voir limites pour 2003 2007

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 9
    Points : 9
    Points
    9
    Par défaut
    @Mercatoq : je ne comprends pas trop comment la concaténation va aider parce que mes critères ne sont pas du même type, et en plus il y a des tris croissants et décroissants. Tu pourrais m'expliquer stp?

    @kiki29 : merci pour la liste des limites, je cherchais en fait une solution =)

  5. #5
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Exemple
    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
    Sub tri2()
    Dim LastLig As Long
     
    With Worksheets("Feuil1")
        LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
        With .Range("AM2:AM" & LastLig) 'En colonne AM on concatène les colonnes avec tri croissant (Pour cet exemple, il s'agit des colonnes C et T
            .Formula = "=C2 &""|""&T2"
            .Value = .Value
        End With
        With .Range("AP2:AP" & LastLig) 'En colonne AP on concatène les colonnes avec tri décroissant (Pour cet exemple, il s'agit des colonnes A et P
            .Formula = "=A2 &""|""&P2"
            .Value = .Value
        End With
        .Range("A2:AP" & LastLig).Sort Key1:=.Range("AM2"), Order1:=xlAscending, Key2:=.Range("AP2"), order2:=xlDescending, Header:=xlNo
        .Range("AM1:AP1").EntireColumn.Delete
    End With
    End Sub

  6. #6
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 500
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 500
    Points : 16 418
    Points
    16 418
    Par défaut
    Bonjour


    Si tu utilises une version antérieure à 2007 il est également possible de faire 2 tris successifs : un avec les 3 critères de poids inférieur (donc les 4ème, 5ème et 6ème) puis un second tris avec les 3 critères de poids fort.

    C'est valable en manuel comme en macro.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 9
    Points : 9
    Points
    9
    Par défaut
    mercatog, je ne comprends pas trop comment ta technique peut marcher pour des tris successifs sachant que tu mets tout dans la même colonne.

    Le plus simple n'est-il pas de coder directement l'algo de tri pour les 3 derniers?

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 928
    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 : 12 928
    Points : 28 922
    Points
    28 922
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Tu as un tableau avec 10 colonnes.
    Dans excel à la 11ème colonne, dans la cellule K1, tu tapes
    Soit la concaténation de 4 cellules provenant de 4 colonnes.
    A l'aide de la poignée de recopie, tu copies cette formules sur les autres lignes.
    Tu sélectionnes K1 et tu cliques sur tri de A à Z, tu viens de faire un tri sur 4 colonnes.
    C'est cela que Mercatog, t'explique de faire en VBA mais sur 2 colonnes parce-que tu veux faire un tri croissant et décroissant.
    Cela s'appelle une astuce pour contourner les limitations d'excel (200)

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 9
    Points : 9
    Points
    9
    Par défaut
    Ok j'avais pas compris ca comme ca.
    Effectivement c'est assez efficace. Le seul problème reste pour des caractères spéciaux pour lesquels il se passe des trucs bizarres.
    Typiquement mon tri croissant manuel met les espaces et les * à la fin alors qu'avec cette manip il les met au début. Si vous avez une (autre) astuce, je suis preneur.
    Merci en tous cas!

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

Discussions similaires

  1. Macro VBA pour tri successif de lignes
    Par thierryakaguy dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 21/07/2009, 23h27
  2. Tris successifs TStringGrid
    Par dennler dans le forum Langage
    Réponses: 5
    Dernier message: 03/03/2008, 19h40
  3. executer une règle de tri outlook par VBA
    Par benpinta dans le forum VBA Outlook
    Réponses: 1
    Dernier message: 06/12/2007, 18h47
  4. [SQL] Tris successifs avec un limit
    Par LestoK dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 03/08/2007, 10h47
  5. [SQL] Limitation avec tri
    Par navis84 dans le forum Oracle
    Réponses: 30
    Dernier message: 03/10/2006, 13h47

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