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 personalisé sur plusieurs colonnes [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 111
    Points : 118
    Points
    118
    Par défaut Tri personalisé sur plusieurs colonnes
    Bonjour,

    J'ai besoin de trier la feuille ws_globale selon plusieurs colonnes avec des tris personnalisés.
    pour la compréhension du code :
    "listeGlobale.hauteur" donne le nombre de lignes du tableau
    "ordreCentre" est un String ="CENTRE1, CENTRE2, CENTRE3"
    "ordreSejour" est un String = "SEJOUR1, SEJOUR2, SEJOUR3"

    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
    ws_globale.Sort.SortFields.Clear
    ws_globale.Sort.SortFields.Add _
            Key:=range("B2:B" & listeGlobale.hauteur + 1), _
            SortOn:=xlSortOnValues, _
            Order:=xlAscending, _
            CustomOrder:=ordreCentre, _
            DataOption:=xlSortNormal
    ws_globale.Sort.SortFields.Add _
            Key:=range("C2:C" & listeGlobale.hauteur + 1), _
            SortOn:=xlSortOnValues, _
            Order:=xlAscending, _
            CustomOrder:=ordreSejour, _
            DataOption:=xlSortNormal
    ws_globale.Sort.SortFields.Add _
            Key:=range("G2:G" & listeGlobale.hauteur + 1), _
            SortOn:=xlSortOnValues, _
            Order:=xlAscending, _
            DataOption:=xlSortNormal
    ws_globale.Sort.SortFields.Add
            Key:=range("H2:H" & listeGlobale.hauteur + 1), _
            SortOn:=xlSortOnValues, _
            Order:=xlAscending, _
            DataOption:=xlSortNormal
    With ws_globale.Sort
            .SetRange ws_globale.Cells
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
    End With
    Mon code vient de l'éditeur de macro, je l'ai réaménagé selon mes besoins.
    L'erreur affichée à l'exécution est "incompatibilité de type", alors-là je sèche depuis 1 heure...
    Merci de votre aide...

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 111
    Points : 118
    Points
    118
    Par défaut
    J'ai trouvé la solution, pour ceux que ça interresse, voici :
    Le problème vient de la variable de type String définissant l'ordre personnalisé. On ne peut pas l'affecter à la propriété "CustomOrder". Du coup, on transforme chaque String en Array, puis on créé une liste customisé de tri, on repère son numéro d'enregistrement et c'est ce numéro qu'on renseigne pour la propriété "CustomOrder". Là ça fonctionne.

    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
    32
    33
    34
    35
    36
    37
    38
    arrCentre = Array(Split(ordreCentre, ","))
    arrSejour = Array(Split(ordreSejour, ","))
    Application.AddCustomList ListArray:=arrCentre
    Application.AddCustomList ListArray:=arrSejour
    CentreNum = Application.GetCustomListNum(arrCentre)
    SejourNum = Application.GetCustomListNum(arrSejour)
     
    ws_globale.Sort.SortFields.Clear
    ws_globale.Sort.SortFields.Add _
            Key:=range("B2:B337"), _
            SortOn:=xlSortOnValues, _
            Order:=xlAscending, _
            CustomOrder:=CentreNum, _
            DataOption:=xlSortNormal
    ws_globale.Sort.SortFields.Add _
            Key:=range("C2:C" & listeGlobale.hauteur + 1), _
            SortOn:=xlSortOnValues, _
            Order:=xlAscending, _
            CustomOrder:=SejourNum, _
            DataOption:=xlSortNormal
    ws_globale.Sort.SortFields.Add _
            Key:=range("G2:G" & listeGlobale.hauteur + 1), _
            SortOn:=xlSortOnValues, _
            Order:=xlAscending, _
            DataOption:=xlSortNormal
    ws_globale.Sort.SortFields.Add _
            Key:=range("H2:H" & listeGlobale.hauteur + 1), _
            SortOn:=xlSortOnValues, _
            Order:=xlAscending, _
            DataOption:=xlSortNormal
    With ws_globale.Sort
            .SetRange ws_globale.Cells
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
    End With
    Remarque : il est possible ensuite de supprimer les listes de tri personnalisées à la fin du code par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Application.DeleteCustomList(Application.CustomListCount)
    Application.DeleteCustomList(Application.CustomListCount)

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

Discussions similaires

  1. Tri JTable sur plusieurs colonnes
    Par laetisam dans le forum Composants
    Réponses: 1
    Dernier message: 30/11/2012, 12h13
  2. Tri Automatique sur plusieurs colonnes
    Par fouinette17 dans le forum Excel
    Réponses: 0
    Dernier message: 20/04/2012, 21h34
  3. Réponses: 2
    Dernier message: 06/09/2007, 15h08
  4. [Tableaux] tri sur plusieurs colonnes
    Par melisse dans le forum Langage
    Réponses: 2
    Dernier message: 22/02/2007, 09h51
  5. Tri sur plusieurs colonnes
    Par soso78 dans le forum Access
    Réponses: 2
    Dernier message: 04/03/2006, 15h28

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