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 dynamique


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 39
    Points : 36
    Points
    36
    Par défaut Trier un tableau dynamique
    Bonjour,
    J'ai un tableau dynamique à 2 dimensions. J'aimerais savoir s'il est possible de trier le tableau sur plusieurs critères comme dans une feuille excel.
    Par exemple, j'ai ceci en range :
    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
    nb_LT_viole = Range("A2").CurrentRegion.Rows.Count
     
     
        ActiveWorkbook.Worksheets("LT violé").AutoFilter.Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("LT violé").AutoFilter.Sort.SortFields.Add Key:=Range(Cells(2, 3), Cells(nb_LT_viole + 1, 3)) _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
            xlSortNormal
        With ActiveWorkbook.Worksheets("LT violé").AutoFilter.Sort
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
     
    End Sub
    ou bien :

    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
    nb_transaction = Range("F2").CurrentRegion.Rows.Count
     
     
        ActiveWorkbook.Worksheets("Transactions").Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Transactions").Sort.SortFields.Add Key:=Range(Cells(2, 6), Cells(nb_transaction + 1, 6)) _
           , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
            xlSortNormal
        ActiveWorkbook.Worksheets("Transactions").Sort.SortFields.Add Key:=Range(Cells(2, 9), Cells(nb_transaction + 1, 9)) _
            , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
            xlSortNormal
        ActiveWorkbook.Worksheets("Transactions").Sort.SortFields.Add Key:=Range(Cells(2, 10), Cells(nb_transaction + 1, 10)) _
            , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
            xlSortNormal
        With ActiveWorkbook.Worksheets("Transactions").Sort
            .SetRange Range(Cells(2, 1), Cells(nb_transaction + 1, 22))
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
     
     
     
    End Sub
    Est-il possible de trier dans le tableau dynamique, car je viens de découvrir que les tableaux sont de loin, bien plus rapide que la méthode des "Range".

    Merci !

    Hehee

  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
    12 922
    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 922
    Points : 28 908
    Points
    28 908
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Personnellement j'utiliserais le tri d'excel qui est très rapide.
    Le code ci-dessous testé avec 15 000 lignes et 6 colonnes prends moins de 2 secondes. Tri ascendant de la première colonne et descendant sur la troisième.
    J'utilise une autre feuille que celle d'origine et j'utilise une procédure de tri (qui utilise la méthode Sort de l'objet Range) que j'ai écrite et que tu peux trouver dans une de mes contributions dont tu trouveras le lien en dessous de ma signature.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     Dim myTable()
     Application.ScreenUpdating = False
     myTable = shtFac.Range("A1").CurrentRegion
     With Feuil3
     .Range(.Cells(1, 1), .Cells(UBound(myTable), UBound(myTable, 2))) = myTable
     End With
     SortTable Feuil3.Range("A1"), lstCol:="1;-3"
     myTable = Feuil3.Range("A1").CurrentRegion
     Feuil3.Cells.Clear
     Application.ScreenUpdating = True

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 39
    Points : 36
    Points
    36
    Par défaut Merci!
    Merci d'avoir répondu!
    Malgré que ce n'est pas la méthode que je recherchais, j'ai tout de même trouvé le problème. Il venait du fait que j'avais des colonnes qui avaient des formules à l'intérieures, donc Excel plantait.

    Merci !

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

Discussions similaires

  1. Trier un tableau php dynamiquement
    Par spads dans le forum Langage
    Réponses: 42
    Dernier message: 19/06/2012, 09h35
  2. [CR XI] Trier un tableau croisé dynamique
    Par kikidrome dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 09/07/2009, 09h26
  3. [PHP] trier un tableau dynamiquement
    Par caro. dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 31/01/2006, 17h08
  4. trier tableau dynamique
    Par prodi_64 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 11/10/2005, 13h44
  5. Réponses: 4
    Dernier message: 13/05/2002, 16h43

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