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 suivant une liste spécifique en VBA [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 9
    Points : 4
    Points
    4
    Par défaut Trier suivant une liste spécifique en VBA
    Bonjour !

    Alors voilà, j'ai créé tout un programme qui fait pleins de bidouilles pour récupérer des données. Jusqu'ici je m'en sortais. Mais je veux maintenant trier ces données suivant une colonne en me basant sur une liste de valeurs spécifique. J'ai donc utilisé l'enregistreur de macro et j'obtiens ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Columns("D:D").Select
    ActiveWorkbook.Worksheets("05.10.039.3").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("05.10.039.3").Sort.SortFields.Add Key:=Range(        "D1:D12"), SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:="Chantier,Statut,CC,EC", DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("05.10.039.3").Sort
        .SetRange Range("A1:AK12")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Que je modifie pour correspondre a mon code par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Range("D1:D" & Range("A65536").End(xlUp).Row).Select
    ActiveSheet.Sort.SortFields.Clear
    ActiveSheet.Sort.SortFields.Add Key:=Range( _
    "D1:D" & Range("A65536").End(xlUp).Row), SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:= "Chantier,Statut,CC,EC", DataOption:=xlSortNormal
    With ActiveSheet.Sort
         .SetRange Range("A1:AK12")
         .Header = xlGuess
         .MatchCase = False
         .Orientation = xlTopToBottom
         .SortMethod = xlPinYin
         .Apply
    End With
    Le résultat : Les cellules sont bien sélectionnées mais le trie ne s'est pas fait. Par contre si je test de le faire à la main juste après ça fonctionne ben. Alors je ne comprends pas pourquoi le "trie ne se fait pas"....

    Si quelqu'un comprend

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Points : 2 502
    Points
    2 502
    Par défaut
    Bonsoir,

    Peut être le problème vient du fait que dans la ligne 6 de ton code, le nombre de ligne est fixe,
    ou bien que la colonne A (utilisée pour calculer le nombre de ligne) est vide.

    A essayer :
    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 MonTriColonneD()
        Dim nbligne As Long
        With Worksheets("05.10.039.3")
            nbligne = .Range("A" & Rows.Count).End(xlUp).Row
            With .Sort
                .SortFields.Clear
                .SortFields.Add Key:=Range("D1:D" & nbligne), SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:="Chantier,Statut,CC,EC", DataOption:=xlSortNormal
                .SetRange Range("A1:AK" & nbligne)
                .Header = xlGuess
                .MatchCase = False
                .Orientation = xlTopToBottom
                .SortMethod = xlPinYin
                .Apply
            End With
        End With
    End Sub

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Je l'ai testé mais malheureusement ça me fait la même chose, le trie ne se fait pas...

  4. #4
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Bonjour,

    et si tu définis ta liste dans 'outils / options / listes pers.' (sur 2003) et que tu utilises celle-ci en tri tu as le même pb ?
    Accessoirement un fichier de test serait le bienvenu.

    eric

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Si je le fait manuellement ça fonctionne. Même à la suite du traitement, le programme se termine, les cellules sont sélectionnées et si je clic sur Trier, les paramètres sont correctement renseignés et il me suffit de cliquer sur Ok pour que le trie se fasse.

  6. #6
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Re,

    Je ne te parlais pas de le faire manuellement mais de te créer une liste personnalisée (dans les options) et de trier par macro selon cette liste personnalisée.
    Je viens de tester avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A1:B" & Range("A65536").End(xlUp).Row).Sort Key1:=Range("A2"), Header:=xlYes, OrderCustom:=8
    ça marche bien chez moi (sur 2003).

    eric

  7. #7
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Points : 2 502
    Points
    2 502
    Par défaut
    Bonsoir,

    J'ai testé le code posté en #2, il avait l'air de fonctionner également.
    La seule chose qui explique ce problème doit être quelque chose qu'on ne voit pas.
    Donc comme le conseillait Eriiic , un fichier avec quelques données exemple serait ici très utile pour reproduire le problème.

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Malheureusement je n'arrive pas a reproduire le problème avec un fichier exemple. Je veux dire par là que les données de mes fichiers sont confidentielles, j'ai donc cherché à créer un fichier exemple avec quelques données et le même bout de code dans une macro mais bien sûr le trie fonctionne....
    Je ne sais pas, peut être le fait que le trie soit dans une boucle déplaît à Excel.

  9. #9
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Bonjour,

    ton classeur s'est peut-être vérolé.
    Reconstruit-le dans un neuf en copiant-collant les données (plages sélectionnées, pas les feuilles).

    eric

  10. #10
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Points : 2 502
    Points
    2 502
    Par défaut
    Bonjour,

    Il n'y a pas de protection sur la feuille ?
    Sinon pour essayer de faire un classeur exemple sans données confidentielle,
    est-ce qu'il est possible de :
    - copier la feuille 05.10.039.3 dans un nouveau classeur,
    - supprimer toutes les données du classeur.
    Un ActiveSheet.UsedRange.SpecialCells(xlCellTypeConstants).ClearContents supprimera toutes les constantes de la feuille active.
    (en gardant les formules, des fois que le problème vienne de la).
    ou au pire un ActiveSheet.UsedRange.ClearContents supprimera toutes les valeurs de la feuille Active.

    - Puis mettre quelques valeurs de simulation pour voir si le problème se reproduit.

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Le truc c'est que j'ai 2 feuilles avec toutes mes données (chantiers, ouvriers, heures, paie, etc...) et à partir de ça je génère une feuille pour chaque chantier contenant les heures des ouvriers pour le mois.
    Je vous met une feuille pour un chantier si vous voulez mais lorsque je prend le code de trie, que je le met dans une nouvelle macro et l’exécute sur une feuille ça fonctionne donc vous ne pourrez pas reproduire le problème

    je suis désolé de pas pouvoir vous donnez les bonnes données pour reproduire le problème ^^"

    PS: Nan ma feuille n'est pas protégé et le classeur est créé par la macro.
    PS2: J'ai fait un copier collé valeur pour le fichier exemple, il n'y a pas d'autres formules que des RECHERCHEV sur la feuille de donnée (que j'ai aussi viré) donc je ne pense pas que ça vienne de là.

    Pointage par chantier mai 2013.xls

  12. #12
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Je t'avais proposé
    ton classeur s'est peut-être vérolé.
    Reconstruit-le dans un neuf en copiant-collant les données (plages sélectionnées, pas les feuilles).
    Tu as essayé ? Ca donne quoi ?

    Parce que chercher dans un classeur qui fonctionne bien je ne vois pas trop ce qu'on pourrait trouver de mauvais...

    eric

  13. #13
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Oui j'ai essayé et le trie fonctionne après cette manip. Je comprend vraiment pas...

  14. #14
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Points : 2 502
    Points
    2 502
    Par défaut
    Re.

    Quelle est la version d'Excel utilisée XLS2003, XLS2007, XLS2010, XLS2013 ?
    Est-ce qu'il y a des lignes masquées ou des cellules fusionnées ?
    Est-ce qu'il y a un groupement
    Est-ce que la colonne D (celle de la clé de filtre) est un résultat de formule, ou bien des valeurs tapées ?
    Est-ce qu'il y a un filtre automatique actif sur la même plage ?

  15. #15
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Oui j'ai essayé et le trie fonctionne après cette manip. Je comprend vraiment pas...
    Ca arrive qu'un fichier s'abîme à force de manips et devienne instable.
    Dans ce cas il vaut mieux le reconstruire.
    eric

  16. #16
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    C'est XLS2007, Il n'y a ni filtre, ni groupement, ni cellules fusionnées, ni ligne masquée. Par contre la colonne D sur laquelle je veux trier est le résultat d'un RECHERCHEV pour récupéré le statut de l'ouvrier à partir de son matricule dans la feuille de Données.

  17. #17
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Par contre la colonne D sur laquelle je veux trier est le résultat d'un RECHERCHEV
    Tu ne peux pas trier des formules, juste des données.
    Une formule va être réévaluée et reprendra la valeur calculée.
    Puisque tu es en vba met la valeur.
    eric

  18. #18
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Points : 2 502
    Points
    2 502
    Par défaut
    Bonsoir,

    Citation Envoyé par eriiic Voir le message
    Tu ne peux pas trier des formules, juste des données.
    Une formule va être réévaluée et reprendra la valeur calculée.
    Après vérification, ce n'est pas tout à fait vrai.
    Excel peut trier une plage par rapport à un résultat de fonction, à condition que les paramètres clés de la fonction soient intégrés à la plage triée.

    Autrement dit, il faut que la valeur recherchée par la fonction RECHERCHEV (ici le matricule de l'ouvrier) soit inclus dans la plage de tri.

    Donc pour l'algo qui tri posté en #2 fonctionne, il faut que le matricule de l'ouvrier se trouve dans la plage A1:AK & nbligne.
    Sinon le tri, même en manuel (sans VBA) ne fonctionnera pas.

    A+

  19. #19
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Excel peut trier une plage par rapport à un résultat de fonction, à condition que les paramètres clés de la fonction soient intégrés à la plage triée.
    Oui, tu as tout à fait raison. Tu as bien fait de relever mon approximation.
    eric

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

Discussions similaires

  1. Attribuer les valeurs d'une liste déroulante en VBA
    Par SnakeCharmer dans le forum VBA Access
    Réponses: 2
    Dernier message: 28/05/2008, 09h19
  2. Réponses: 2
    Dernier message: 20/02/2008, 12h30
  3. Réponses: 2
    Dernier message: 21/10/2007, 00h56
  4. Réponses: 1
    Dernier message: 20/03/2007, 09h24
  5. Réponses: 4
    Dernier message: 16/06/2005, 15h37

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