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 :

Format date lors d'execution d'une macro


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Consolideur
    Inscrit en
    Janvier 2024
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Consolideur
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2024
    Messages : 1
    Par défaut Format date lors d'execution d'une macro
    Bonjour à tous,

    Je suis tout nouveau en VBA et je n'ai pas forcément encore tout le vocabulaire nécessaire, excusez moi donc par avance si la réponse existe déjà sur le forum, je n'ai pas réussi à la trouver !

    J'ai un grand nombre de fichier CSV à combiner afin d'en avoir qu'un seul et j'ai donc essayé de développer une macro afin d'automatiser le truc ! Jusqu'ici rien de spécial, la macro tourne très bien et mes données sont bien consolidées.

    Mon problème est le suivant : dans chaque fichier individuel, j'ai une colonne "date" au format jj-mm-aaaa, seulement, lorsque j'exécute la macro, les dates dont le jour est inférieur à 12 se transforment en mm-jj-aaaa sans raison. le 12 aout devient donc le 8 décembre par exemple.

    ce qui m'étonne beaucoup, c'est que si j'ouvre un fichier individuel et que je convertis la colonne (séparation fixe virgule), le format de date reste le bon. Idem si j'ouvre un excel vierge et que j'importe les données du fichier individuel en question, pas de problème non plus.

    voici un extrait de mon code si cela peut aider :

    ici j'ouvre un fichier individuel, je copie les données, puis je les colles dans un onglet de consolidation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Workbooks.Open "C:\Users\mmetivier\Desktop\Projet\Sources\E0.csv"
    DerniereLigne = Range("A1000000").End(xlUp).Row
    Rows("1:" & DerniereLigne).Select
    Selection.Copy
    Workbooks("Consolidation base données Europe").Activate
    Sheets("Consolidation ANG").Select
    LastRowConsolidation = Range("A1000000").End(xlUp).Row + 1
    Cells(LastRowConsolidation, 1).Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    merci pour votre aide !

    Maxime

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 508
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 508
    Par défaut
    Salut,

    As-tu essayé avec Power Query ?
    https://support.microsoft.com/en-us/...8-6a00041c90e4

  3. #3
    Membre émérite
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2022
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2022
    Messages : 685
    Par défaut
    Bonjour,

    Pour répondre à la question posée, c'est perdu dès le :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks.Open "C:\Users\mmetivier\Desktop\Projet\Sources\E0.csv"
    En ouverture de CSV, Excel passe en full automatique et pour des raisons qui personnellement m'ont toujours échappées et que je considère comme un bug il essaye en priorité d'interpréter les dates au format US donc mm/jj/aaaa et se rabat seulement sur JJ/MM/AAAA si le premier nombre est supérieur à 12 et donc non interprétable comme un mois, comme tu l'as remonté.

    Il faut utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks.OpenText MonChemin & Monfic, Encodage, , xlDelimited, xlTextQualifierNone, , False, True, , , , , MesColonnes
    où MesColonnes est un tableau à deux dimensions, qui en théorie contient des couples n° colonne / format mais si j'en crois ce que j'écrivais dans une vie antérieure il faut surtout mettre le code format de la colonne k en position k, colonne 2

    Voici un code qui fonctionnait pour charger le tableau (Dim MesColonnes(1 To MaxColCSV) As Variant ):
    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
                    'préparation formats de colonnes (sinon XL retourne le date en mmjjaaaa si jj<=12)
                    For k = 1 To MaxColCSV
                        'normalement inutile car array(k, toto) suffirait pour mettre la colonne k dans le type toto
                        'en fait c'est la position donc mescolonnes(k) qui donne le n° de colonne...
                        'comme ça, ça marche et ça marchera encore si le bug XL est corrigé...
                        MesColonnes(k) = Array(k, xlGeneralFormat)
                    Next k
                    MesColsX = .Cells(MaLigne, ColImpDates)
                    While MesColsX <> "" ' partie utile : type jjmmaaaa sur colonnes date
                        k = UnElement(MesColsX)
                        MesColonnes(k) = Array(k, xlDMYFormat)
                    Wend
                    MesColsX = .Cells(MaLigne, ColImpTextes)
                    While MesColsX <> "" ' partie utile : type texte forcé
                        k = UnElement(MesColsX)
                        MesColonnes(k) = Array(k, xlTextFormat)
                    Wend
    Les .cells(MaLigne, UneColonne) renvoient du paramétrage qui contient la liste des colonnes respectivement contenant des dates (colImpDate) et du texte (colImpTextes pour éviter par exemple qu'un numéro de sécu soit considéré comme un numérique) sous la forme par exem queple "1;2;3" puis la fonction "UnElement" renvoie le premier élément et raccourcit la chaine.

    J'ai retrouvé que je renommais aussi les fichiers en .txt, mais je ne sais plus si c'est parce qu'Excel ignore le paramètre MesColonnes dans le cas d'un .csv, ou si c'était seulement par parano.

    Je recommande donc également PowerQuery...

Discussions similaires

  1. [OL-2003] Code pour afficher le Pop-Up d'impression lors de l'exécution d'une macro
    Par Dailyplanet dans le forum VBA Outlook
    Réponses: 4
    Dernier message: 05/10/2009, 09h14
  2. figer l'écran lors de l'exécution d'une macro
    Par julien0000 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 14/08/2008, 10h35
  3. probleme de lenteur lors de l'execution d'une macro sous excel
    Par smartbis dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/05/2007, 08h49
  4. [Excel] Changer de profil lors de l'éxécution d'une macro
    Par TeetyTweety dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/02/2007, 08h35
  5. [VBA-EXCEL] format de date lors d'écriture dans une cellule
    Par ustilago dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/02/2007, 17h44

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