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 :

Import fichier .txt et format de date


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier Avatar de m@tix
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 304
    Points : 76
    Points
    76
    Par défaut Import fichier .txt et format de date
    Bonjour,

    Je dispose d'un fichier .txt dont l'une des colonnes comporte des dates de la forme Sep-11 (pour 01/09/2011), Feb-12 (pour 01/02/2012).

    J'importe les données du fichier texte dans un classeur Excel via une macro.
    Tout se passe bien, sauf pour les dates. En effet, après import, les dates obtenues sont les suivantes (pour les exemples cités ci-dessus par exemple) :

    Sep-11 (pour 01/09/2011) devient 11/09/2012 (affichage 11-sept)
    Feb-12 (pour 01/02/2012) devient 12/02/2012 (affichage 12-févr)

    Du coup, forcément, ça me fausse tout dans la gestion de mes données... Comment puis-je arranger le problème ?

    Voici le code que j'utilise :

    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
    Set wk1 = ThisWorkbook
     
        fichier = "https://***/fichier_texte.txt"
     
     
        'on efface les précédentes données importées
     
        With wk1.Sheets("Feuil1")
     
            derlign1 = .Range("A1").SpecialCells(xlLastCell).Row
            .Range("A3:G" & derlign1).ClearContents
     
        End With
     
     
     
        'ouvre le fichier txt
        Workbooks.Open fichier
     
        Set wk2 = Workbooks("fichier_texte.txt")
     
        With wk2.Sheets(1)
     
     
            derlign2 = .Range("A1").SpecialCells(xlLastCell).Row
     
            .Range("A2:G" & derlign2).Copy
     
     
        End With
     
     
        wk1.Sheets("Feuil1").Cells(3, 1).PasteSpecial
     
        wk2.Close
    Je rajoute que lorsque je fais un simple copier/coller à la main à partir du fichier texte, je ne rencontre pas ce problème...

  2. #2
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 272
    Points
    11 272
    Par défaut
    Salut, de la lecture ici

  3. #3
    Membre régulier Avatar de m@tix
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 304
    Points : 76
    Points
    76
    Par défaut
    Merci pour le lien. Je viens de le parcourir, mais je n'ai pas trouvé la solution à mon problème.. Je pensais peut-être regarder du côté des options régionales, mais je ne trouve rien qui correspond... C'est réellement problématique dans le sens où mes données sont toutes faussées !

    En espérant que quelqu'un finira par trouver d'où peut venir le problème. Je pense avoir cherché partout..

  4. #4
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 272
    Points
    11 272
    Par défaut
    Salut, via une recherche

  5. #5
    Membre régulier Avatar de m@tix
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 304
    Points : 76
    Points
    76
    Par défaut
    Merci kiki29. J'ai regardé les résultats de cette recherche, mais rien ne correspond à mon problème.

    J'essaie de reformuler plus précisément.

    D'un côté j'ai un fichier texte qui, en l'ouvrant avec Excel via la macro que j'ai mise, comporte des dates colonne G : sep-11, oct-11, nov-11, dec-11, jan-12...

    En exécutant ma macro en pas à pas, je m'aperçois que ces dates se "transforment" en 11/09/2012, 11/10/2012, 11/11/2012, 11/12/2012, 12/01/2012..

    Du coup, même en essayant de convertir le format US/FR une fois le classeur ouvert, ça ne résout pas le problème..

  6. #6
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 272
    Points
    11 272
    Par défaut
    Salut, en décomposant au maximum, à adapter à ton contexte.
    il y a plus concis.
    En bouclant de la 1ere ligne à la dernière
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim i As Long
    Dim v As Double
            v = CDbl(CDate(Cells(i, x)))
            Cells(i, x) = v
            Cells(i, x).NumberFormat = "dd/mm/yyyy"

  7. #7
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bonjour,

    Sans répondre à la question, je voudrais juste apporter une modification à ton code.

    Pour rechercher la dernière cellule de la colonne A, je n'utiliserais pas la méthode SpecialCells(xlLastCell) pour deux raisons :
    1. même en précisant la colonne, cela va te renvoyer la dernière cellule utilisée de la feuille et tu ne trouveras donc pas forcément la dernière ligne d'une colonne bien précise
      Tu peux faire le test avec une valeur en A5 et une autre en B10, Range("A1").SpecialCells(xlLastCell).Row te renverra 10 comme résultat.
    2. tant que le classeur n'a pas été sauvegardé, si tu supprimes (dans l'exemple ci-dessus) la valeur en B10, qu'il ne te reste plus que celle en A5, SpecialCells(xlLastCell).Row te renverra malgré tout 10 comme résultat

    pour rechercher la dernière cellule d'une colonne il vaut donc mieux utiliser la méthode suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    derlign1 = .Range("A" & Rows.Count).End(XlUp).Row

  8. #8
    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 : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Bonjour à tous,

    Personnellement, je ne vois pas d'autre solution que de faire l'import ligne par ligne en ajoutant "1-" devant chaque date.

    Et encore, je ne sais pas comment faire interpréter correctement les mois en anglais.

    Si j'ai un peu de temps, je ferai un test.
    Mais plus cette nuit...

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

    Informations forums :
    Inscription : Février 2007
    Messages : 400
    Points : 171
    Points
    171
    Par défaut
    le sujet est peut-être un peu vieux, mais j'ai trouvé une solution à condition de transformer les noms de mois anglais en mois français sur 4 caractères
    (exemple feb en févr) sinon la fonction cdate ne fonctionne pas
    une fois cette transformation effectuée à l'importation grâce à une petite matrice par exemple, il est possible d'écrire :

    si chaine="sept-11" (ou chaine="févr-12")

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(x, y) = Format(CDate("01-" + chaine), "MM-yyyy")
    ce qui donne :
    sept-11
    févr-12

    et avec le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(x, y) = CDate("01-" + chaine)
    cela donne :
    01/09/2011
    01/02/2012

    espérant avoir pu aider

  10. #10
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Points : 5 901
    Points
    5 901
    Par défaut
    Bonjour,

    Et si tu essayais une autre méthode avec le DataObject...
    Est-ce que ça fonctionne mieux ?

    Pour utiliser le DataObject, il faut cocher la référence Microsoft Forms 2.0 Object Library

    ex:
    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
    Dim strTemp as String   
    Dim Fichier As String
    Dim MyDataObject As DataObject
     
    Fichier = "https://***/fichier_texte.txt"
     
    Open Fichier For Binary As #1
    strTemp = Space$(LOF(1))
    Get #1, , strTemp
     
    Set MyDataObject = New DataObject
    MyDataObject.SetText strTemp
    MyDataObject.PutInClipboard
    Range("A1").PasteSpecial
     
    Close #1
     
    MyDataObject.Clear
    Set MyDataObject = Nothing

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 400
    Points : 171
    Points
    171
    Par défaut
    avec la fonction de remplacement du mois, ça marche bien.
    j'ai indiqué sur la même ligne les 3 résultats différents selon le traitement :

    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
    Sub test()
    en = Array("jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec")
    fr = Array("janv", "févr", "mars", "avri", "mai", "juin", "juil", "août", "sept", "oct", "nov", "déc")
    Cells.Clear
    'le fichier test.txt contient les lignes de date genre :
    'sep-11 etc...
    'feb-12 etc...
    Open "test.txt" For Input As #1
    i = 1
    Do While Not EOF(1)
        Line Input #1, chaine
        ladate = Mid$(chaine, 1, 6)
        ladate = Replace(ladate, Mid$(ladate, 1, 3), fr(Application.Match(Mid$(ladate, 1, 3), en, 0) - 1))
        Cells(i, 1) = ladate
        Cells(i, 2) = Format(CDate("01-" + ladate), "MM/yyyy")
        Cells(i, 3) = CDate("01-" + ladate)
        i = i + 1
    Loop
    Close #1
     
    End Sub
    Citation Envoyé par parmi Voir le message
    Pour utiliser le DataObject, il faut cocher la référence Microsoft Forms 2.0 Object Library
    et c'est où pour cocher ça dans excel ?

  12. #12
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Points : 5 901
    Points
    5 901
    Par défaut
    Quand tu es dans le code (Alt-F11), tu vas dans Outils / Références et tu coches la référence que tu veux utiliser.

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 400
    Points : 171
    Points
    171
    Par défaut
    merci
    j'allais juste indiquer que j'avais trouvé ;o)

    en fait ta proposition ne règle pas le problème de transformation de la date lors de la copie dans la feuille
    il faut absolument traiter la chaine, quelle que soit la manière de faire le copier coller
    merci quand même, je ne connaissais pas cette méthode de copier/coller mais je la trouve bien plus compliquée que ma méthode pour remplir les cellules ;o)

Discussions similaires

  1. [phpMyAdmin] importer fichier txt problème de date
    Par docteurdorian dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 16
    Dernier message: 26/01/2011, 14h39
  2. [SQLServer]Script import fichier .txt
    Par Jenbi dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 25/08/2006, 17h49
  3. import fichier TXT via ACCESS
    Par lepierre dans le forum Access
    Réponses: 4
    Dernier message: 03/12/2005, 07h52
  4. import fichier txt
    Par nogood1 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 05/10/2005, 12h33
  5. Pb import fichier txt avec lignes de longueurs diverses
    Par zebulon90 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/12/2004, 09h32

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