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 :

Trier un tableau qui a des filtres [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre très actif
    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2015
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Décembre 2015
    Messages : 110
    Par défaut Trier un tableau qui a des filtres
    Bonjour à tous,

    J’ai un tableau avec des colonnes utilisées de A à V .

    Dans toutes les colonnes j’ai des filtres sur la ligne 2.


    Mon tableau est aujourd’hui renseigné jusqu’à la ligne 800, mais ça va continuer.

    Ce que j’aimerai faire :

    Un trie sur trois critères avec mes données ont des têtes (la ligne 2)

    Les critères sont les colonnes G, H et F

    Ca je sais faire en manuel, mais pas en VBA, car je n’arrive pas à définir les lignes à prendre en comptes pour le tri, puisqu’elle change en fonction des filtres utilisées dans les autres colonnes.

    voici le code fait en automatique pour une configuration de filtre, mais la première ligne et dernière change si le tri est différent ou même les lignes ne ce suivent pas.

    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
    Sub Clas_N_P_NU()
    '
     
        Rows("2:1399").Select
        ActiveWorkbook.Worksheets("Gestion des données ").Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Gestion des données ").Sort.SortFields.Add _
            Key:=Range("G3:G1399"), SortOn:=xlSortOnValues, Order:=xlAscending, _
            DataOption:=xlSortNormal
        ActiveWorkbook.Worksheets("Gestion des données ").Sort.SortFields.Add _
            Key:=Range("H3:H1399"), SortOn:=xlSortOnValues, Order:=xlAscending, _
            DataOption:=xlSortNormal
        ActiveWorkbook.Worksheets("Gestion des données ").Sort.SortFields.Add _
            Key:=Range("F3:F1399"), SortOn:=xlSortOnValues, Order:=xlAscending, _
            DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("Gestion des données ").Sort
            .SetRange Range("A587:W1399")
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
     
        Range("B588").Select
     
    End Sub
    Merci pour votre aide.

    Cordialement

  2. #2
    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 114
    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 114
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je n'ai jamais dû utiliser en VBA le tri de colonnes filtrées mais d'après moi, la seule chose à indiquer c'est le numéro des colonnes à trier ou la plage des colonnes.

    [EDIT]
    Je confirme.
    Je viens d'utiliser ma procédure générique de tri sur une table (ListObject) filtrée et cela fonctionne parfaitement, les lignes filtrées sont bien triées dans l'ordre souhaité et pas les autres.
    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

  3. #3
    Expert confirmé Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 274
    Par défaut
    Bonjour
    Si vous voulez filtrer trier une plage dynamique, une méthode parmi tant d'autres
    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
    31
    Option Explicit
    Sub Trier3Colonnes()
    Dim xlWbk As Workbook
    Dim xlWsh As Worksheet
    Dim rngSort As Range
    Dim iRows As Long, iCols As Long
     
    Set xlWbk = ThisWorkbook
    Set xlWsh = xlWbk.Worksheets("Gestion des données") ' Attention il y a un espace avant le dernier guillemet dans votre syntaxe !!!
     
    iRows = xlWsh.Range("A2").CurrentRegion.Rows.Count ' nombre de lignes
    iCols = xlWsh.Range("A2").CurrentRegion.Columns.Count ' nombre de colonnes
     
    Set rngSort = xlWsh.Range(xlWsh.Cells(2, 1), xlWsh.Cells(iRows, iCols)) ' range plage dynamique
     
    Application.ScreenUpdating = False
     
    With xlWsh.Sort
         .SortFields.Clear
         .SortFields.Add Key:=xlWsh.Range("G2"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
         .SortFields.Add Key:=xlWsh.Range("H2"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
         .SortFields.Add Key:=xlWsh.Range("F2"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
         .SetRange rngSort
         .Header = xlYes
         .MatchCase = False
         .Orientation = xlTopToBottom
         .SortMethod = xlPinYin ' ne sert à rien sauf si caractères chinois dans le tableau
         .Apply
    End With
     
    End Sub

  4. #4
    Membre très actif
    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2015
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Décembre 2015
    Messages : 110
    Par défaut
    Bonjour #hyperion13, à tous,

    Un grand merci à #hyperion13, ça fonctionne nickel. Merci aussi à Philippe

    Je vais essayé de l'adapter à d'autres types de trie, par exemple lorsqu'on lance la macro on a le choix des trois colonnes à filtrer.
    Un imputbox je pense et 3 choix possibles, après validation du choix le filtrage sera réalisé.

    Si je n'y arrive pas je reviendrais vers vous.
    j'ai un décalage horaire de -6 h, donc mes réponses est questions sont décalées par rapport à la France.

    Cordialement

  5. #5
    Expert confirmé Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 274
    Par défaut
    re,
    Et pour compéter si jamais vous travaillez avec un tableau structuré
    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
    Option Explicit
    Sub Trier3Colonnes1()
    Dim xlWbk As Workbook
    Dim xlWsh As Worksheet
    Dim lstObj As ListObject
     
    Set xlWbk = ThisWorkbook
    Set xlWsh = xlWbk.Worksheets("Gestion des données")
    Set lstObj = Range("Tableau1").ListObject ' vérifier nom effectif du tableau strcuturé
     
    Application.ScreenUpdating = False
     
    With lstObj.Sort
         .SortFields.Clear
         .SortFields.Add Key:=lstObj.ListColumns(7).Range, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ' colonne G
         .SortFields.Add Key:=lstObj.ListColumns(8).Range, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ' colonne H
         .SortFields.Add Key:=lstObj.ListColumns(6).Range, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ' colonne F
         .Header = xlYes
         .MatchCase = False
         .Orientation = xlTopToBottom
         .Apply
    End With
     
    End Sub

  6. #6
    Membre très actif
    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2015
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Décembre 2015
    Messages : 110
    Par défaut
    Bonjour #hyperion13, à tous,


    j'ai ajouté en début de votre macro,

    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
     
    Dim choix_tri, A, B, C As String
     
    debut:
     
    MsgBox "Voici les choix de tri possible : " & Chr(13) & Chr(10) & Chr(13) & Chr(10) & _
    "1 - tri sur NOM (G), Prénom (H) et Numéro de clim (F)" & Chr(13) & Chr(10) & _
    "2 - tri sur N° série clims (R et S) et N° clims (F)" & Chr(13) & Chr(10) & _
    "3 - tri sur N° OP (D) nom (G) et Prénom (H)"
     
    choix_tri = InputBox("Entrer votre choix 1, 2 ou 3 :", " Définition du tri choisi")
     
    If choix_tri = 1 Then A = "G2": B = "H2": C = "F2": GoTo suite
    If choix_tri = 2 Then A = "R2": B = "S2": C = "F2": GoTo suite
    If choix_tri = 3 Then A = "D2": B = "G2": C = "H2": GoTo suite
     
    MsgBox "Votre choix n'est pas conforme aux possibilités": GoTo debut
     
    suite:
    et modifier les lignes


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    '.SortFields.Add Key:=xlWsh.Range("G2"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
         '.SortFields.Add Key:=xlWsh.Range("H2"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
         '.SortFields.Add Key:=xlWsh.Range("F2"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
     
         .SortFields.Add Key:=xlWsh.Range(A), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
         .SortFields.Add Key:=xlWsh.Range(B), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
         .SortFields.Add Key:=xlWsh.Range(C), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

    mais ça ne fonctionne pas,

    RECTIF, ça fonctionne, je lancé une mauvaise macro. ce n'est peut-être pas très bien au niveau programmation mais ça fonctionne.

    merci de l'aide.

    Cordialement

  7. #7
    Expert confirmé Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 274

  8. #8
    Membre très actif
    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2015
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Décembre 2015
    Messages : 110
    Par défaut
    Bonjour #hyperion13 à tous,

    Merci pour la réponse.

    Cordialement

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

Discussions similaires

  1. Tableau qui a des lignes qui se rajoute
    Par mathieu1475 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 23/05/2013, 04h18
  2. Le tri d'un tableau qui contient des input text
    Par haylox dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 17/03/2013, 12h47
  3. [Lazarus] TStringGrid : Trier une colonne qui contient des noms de fichiers
    Par Invité dans le forum Lazarus
    Réponses: 2
    Dernier message: 03/03/2012, 10h27
  4. Réponses: 3
    Dernier message: 07/06/2007, 16h03
  5. trier un tableau et compter des elements du tableau
    Par remi51 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 17/06/2002, 16h51

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