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 les données par date au format jour mois année... [FAQ]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    (Extrait d'une réponse et à défaut d'une solution plus sioux qu'il me semble pourtant bien avoir vue sur le forum)
    Si on trie les données selon les dates formatées, on obtient :
    01/01/06
    01/03/06
    02/02/06
    etc.
    Pour trier par date, convertir la colonne de dates en nombre sans décimale, Trier les données et reformater la colonne en date.
    C'est lourd mais ça donne le résultat excompté
    Exemple si les dates sont dans la colonne A
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        Columns("A:A").Select
        Selection.NumberFormat = "0"
        DoEvents
        Cells.Select
        Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlYes, _
            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
        DoEvents
        Columns("A:A").Select
        Selection.NumberFormat = "dd/mm/yyyy"
    Header:=xlYes s'il existe un en-tête de colonne

    Ça, c'était pour le côté pédagogique de la chose.
    Une fois "traduit en VBA", ça donnerait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        Columns("A:A").NumberFormat = "0"
        DoEvents
        Cells.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlYes, _
            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
        DoEvents
        Columns("A:A").NumberFormat = "dd/mm/yyyy"

  2. #2
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Bien franchement, je ne comprends pas où est le problème...

    Si une colonne Excel contient des dates, le tri se fera correctement car Excel stocke les dates de façon numérique. Seul l'affichage est formaté.

    Par contre, si la colonne contient du texte (représentant des dates), là le tri sera incorrect.

    Je pense donc que le fait de forcer l'affichage en numérique oblige Excel à essayer d'interpréter le contenu des cellules et convertir le texte en date.

    Si tu as encore un fichier présentant cette particularité, je pense qu'une simple boucle forçant un CDate sur le contenu des cellules devrait remettre les choses en ordre.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  3. #3
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Quand les dates sont saisies manuellement, si la colonne n'est pas formatée, tu as des variations dans le format qui trompe Excel.
    Formater avec cdate, c'est bien, mais sur une base de données qui ne t'appartient pas, ça nécessite de passer toutes tes dates en revue. Le tri par date que je propose évite cela.
    D'ailleurs le problème se pose bien puisque la question sur le tri de date est récurrente, ce qui signifie bien que le problème l'est aussi
    Ceci dit mon code ne règle pas le pb de manière exhaustive... Si la plage de données commence à la ligne 5, colonne 3, on fait quoi ?
    J'ajoute donc un code qui permet de corriger cette omission sans prétendre l'être, exhaustif...
    Je suppose donc que la première colonne de la plage à trier est la colonne 3, que la première ligne est la ligne 5... Ce qui donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        PremiereLigne = 5
        Premierecolonne = 3
        Columns(Premierecolonne).NumberFormat = "0"
        Cells(PremiereLigne, Premierecolonne).CurrentRegion.Sort _
              Key1:=Cells(PremiereLigne, Premierecolonne), _
              Order1:=xlAscending, Header:=xlYes, _
            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
        DoEvents
        Columns(Premierecolonne).NumberFormat = "dd/mm/yyyy"
    Pour que ce code fonctionne avec CurrentRegion, il est nécessaire qu'aucune ligne ni colonne de la plage de données à trier ne soit entièrement vide (une cellule vide dans la plage ne pose pas de pb)

Discussions similaires

  1. Insérer Date au format jour/mois/année
    Par momjunior dans le forum MySQL
    Réponses: 2
    Dernier message: 27/01/2015, 14h05
  2. [XL-2010] Nom de fichier automatique avec date en format Jour mois année
    Par chipster62 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/02/2014, 20h17
  3. Réponses: 5
    Dernier message: 04/11/2013, 17h11
  4. Date en format Jour/Mois/Année sur SQL server 2K5 Anglais
    Par YoussefTS dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 19/11/2008, 11h03
  5. Trier mes requete par date au format dd/mm/yy
    Par danje dans le forum Langage SQL
    Réponses: 6
    Dernier message: 19/09/2005, 18h06

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