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 :

Conversion de date par une macro exécutée dans un fichier 2 par un Userform d'un fichier 1 [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 17
    Par défaut Conversion de date par une macro exécutée dans un fichier 2 par un Userform d'un fichier 1
    Bonjour,

    J'ai un soucis que je n'arrive à résoudre et je vais essayer d'expliquer ça clairement:

    J'ai créé une macro que j'ai exporté en un fichier .bas. Cette macro permet la conversion de dates (situées dans une même colonne) au format FR à partir de dates aux format différents (format de la cellule Date ou Standard suivant le chiffre du mois: si <12 -> Excel l'interprète comme une date au format FR, si >12 -> Excel l'interprète comme du texte).

    J'exécute un Userform à l'ouverture d'un fichier 1. Ce Userform ouvre un fichier 2, importe le fichier bas puis exécute la macro importée du fichier bas dans le fichier 2, le sauvegarde puis le referme.

    Lorsque j'exécute cette macro directement à partir du fichier 2 (à la main), aucun soucis.
    Le problème se produit lorsque la macro est exécutée à partir du Userform et du fichier 1. La conversion ne se déroule pas comme prévue mais ne m'indique aucun message d'erreur. Cependant j'ai des dates fausses en sortie (mauvais jour/mois et/ou année).

    Voici ma macro de conversion des dates:
    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
     
    Dim i, DernLign As Long
    DernLign = Range("H" & Rows.Count).End(xlUp).Row
     
    Columns("G:G").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
     
    For i = 2 To DernLign
        If IsEmpty(Cells(i, 8)) = False Then
        Cells(i, 7).FormulaR1C1 = "=IF(LEN(RC[1])=5,DATE(RIGHT(TEXT(RC[1],""mm/jj/aaaa""),4),MID(TEXT(RC[1],""mm/jj/aaaa""),4,2),LEFT(TEXT(RC[1],""mm/jj/aaaa""),2)),DATE(RIGHT(RC[1],4),LEFT(RC[1],2),MID(RC[1],4,2)))"
        End If
    Next i
     
    Columns("G:G").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
     
    Cells(1, 7).Value = "Due Date"
    Range(Cells(2, 8), Cells(DernLign, 8)).Copy
    Range(Cells(2, 7), Cells(DernLign, 7)).PasteSpecial Paste:=xlPasteValues
    Range(Cells(2, 7), Cells(DernLign, 7)).NumberFormat = "m/d/yyyy"
    Columns("I:I").Delete
    Columns("H:H").Delete
    Je fais appel au fichier 2 par un Application.Workbooks.Open, importe le fichier bas par VBProject.VBComponents.Import et lance la macro par un Application.Run. J'ai eu du mal mais finalement cela fonctionne bien.

    Je suspecte un problème de format de date par le code VBA (format US uniquement géré, si je ne me trompe pas). Cependant je ne comprends pas pourquoi la macro fonctionne très bien quand je l'exécute directement dans le fichier et pas dans l'autre cas.

    Merci pour vos lumières expertes!

    Bien cordialement.

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,


    Citation Envoyé par seboboch Voir le message
    Bonjour,


    J'ai créé une macro que j'ai exporté en un fichier .bas. Cette macro permet la conversion de dates (situées dans une même colonne) au format FR à partir de dates aux format différents (format de la cellule Date ou Standard suivant le chiffre du mois: si <12 -> Excel l'interprète comme une date au format FR, si >12 -> Excel l'interprète comme du texte).
    Pourquoi ? Une simple macro dans ton classeur de macros personnelles, serait constamment disponible et l'espace disque utilisé serait minime, vu que le classeur est enregistré en binaire.

    Voici ma macro de conversion des dates:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        Cells(i, 7).FormulaR1C1 = "=IF(LEN(RC[1])=5,DATE(RIGHT(TEXT(RC[1],""mm/jj/aaaa""),4),MID(TEXT(RC[1],""mm/jj/aaaa""),4,2),LEFT(TEXT(RC[1],""mm/jj/aaaa""),2)),DATE(RIGHT(RC[1],4),LEFT(RC[1],2),MID(RC[1],4,2)))"
    Là, il n'est pas nécessaire d'avoir une formule d'un mille de long. VBA a tout ce qu'il faut pour décortiquer une date, peu importe que le classeur soit anglais britannique, anglais américain, anglais canadien, français de France, Canadien-Français, ou même zoulou.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 17
    Par défaut
    Bonjour,

    Merci pour la réponse.
    Cette macro est une ancienne et une de mes premières, d'où la formule.
    Je me suis décidé à la coder intégralement en VBA:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim i, DernLign As Long
    Dim j, k, l As Integer
     
    DernLign = Range("A" & Rows.Count).End(xlUp).Row
     
    For i = 2 To DernLign
        If IsEmpty(Cells(i, 4)) = False Then
            l = CInt(Left(Cells(i, 4), 2)) ' mois
            k = CInt(Mid(Cells(i, 4), 7, 4)) ' annee
            j = CInt(Mid(Cells(i, 4), 4, 2)) 'jour
            Cells(i, 4).Value = DateSerial(k, l, j)
        End If
    Next i
    Range(Cells(2, 4), Cells(DernLign, 4)).NumberFormat = "m/d/yyyy"
    Cependant, je suis confronté au même soucis: la macro marche très bien lorsque je l'importe manuellement dans mon fichier et que je l'exécute manuellement, mais elle me donne de faux résultats lorsque je l'exécute par l'intermédiaire de mon Userform et de mon autre fichier (pas de message d'erreur mais des dates fausses).

    Exemples des résultats:
    - Macro exécutée manuellement (bons résultats):
    27/09/2014
    18/10/2014
    13/12/2014
    18/09/2014
    13/12/2014
    26/11/2014
    18/09/2014
    19/09/2014
    12/09/2014
    19/09/2014
    04/10/2014
    08/10/2014

    - Macro exécutée par le Userform (mauvais résultats):
    09/03/2016
    10/06/2015
    12/01/2015
    09/06/2015
    12/01/2015
    11/02/2016
    09/06/2015
    09/07/2015
    09/12/2014
    09/07/2015
    10/04/2014
    10/08/2014

    Pour répondre à la première remarque, c'est une macro disponible sur un disque réseau et utilisée par plusieurs personne.

    Merci pour votre aide.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 17
    Par défaut
    Je continue bien entendu à chercher mais rien pour le moment.
    Une bonne âme pour m'aider??

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 17
    Par défaut
    Bonjour,

    Je pense avoir trouvé l'origine de mon soucis.

    Lorsque je teste mon code sans l'import de la macro ni son exécution (donc simplement en ouvrant le fichier CSV (mon fichier 2) et en l'enregistrant au format XLSM), les dates sont converties toute seule au format FR (par VBA??).

    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
     
    'Déclaration des variables
    Dim xlApp As Excel.Application 'Application Excel
    Dim xlWb As Excel.Workbook 'Classeurs Excel
     
    'Affectation des données aux objets
    'Affectation de Excel en créant un nouvelle instance
    Set xlApp = New Excel.Application
    'Ouverture du fichier
    Set xlWb = xlApp.Workbooks.Open(ActiveWorkbook.Path & "\query_export_results.csv")
    'Enregistrer l'extraction en fichier Excel gérant les macros
    xlWb.SaveAs Filename:= _
            ActiveWorkbook.Path & "\query_export_results.xlsm", _
            FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
    'Fermeture de l'application
    xlWb.Close
    Set xlWb = Nothing
    xlApp.Quit
    Set xlApp = Nothing
    Ce que je trouve très bizarre c'est que quand j'enregistre manuellement au format XLSM à partir du format CSV, les formats de date ne changent pas du tout (en même temps c'est logique, je ne modifie rien).
    Pour ma curiosité personnelle, si quelqu'un connait la raison....

    Bref un grand mystère pour moi, mais du coup ça me simplifie mon code et son exécution.

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

Discussions similaires

  1. [XL-2010] Exécuter une macro seulement dans les feuilles nommées par des nombres.
    Par baptou42 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/05/2014, 16h40
  2. Ouvrir un fichier video par une macro excel
    Par cott333 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 10/05/2013, 14h11
  3. Nommer un fichier exporté par une macro
    Par meumeu73.1 dans le forum QlikView
    Réponses: 1
    Dernier message: 28/11/2011, 13h56
  4. ouverture d'un fichier excel par une macro
    Par gaihdriah dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 11/02/2009, 12h16
  5. créer un évenement dans ThisWorkbook par une macro
    Par jmcrib dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/09/2007, 11h56

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