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 :

Inversion mois/jour lors d'une importation d'un CSV


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 221
    Points : 207
    Points
    207
    Par défaut Inversion mois/jour lors d'une importation d'un CSV
    Bonjour,

    Ce problème a été mainte fois abordé, mais aucune des solutions listées ne m'a apporté la solution...

    J'utilise le code suivant pour importer un fichier CSV et copier sont contenu dans une feuille

    voici le fichier d'entrée:
    Date;01/06/2010
    Date;10/06/2010
    Date;08/06/2010
    Date;30/06/2010
    Date;21/06/2010
    Date;13/06/2010
    Date;02/03/2010
    Date;04/03/2010
    Date;11/03/2010
    Date;15/03/2010
    Date;23/03/2010
    Date;29/03/2010
    voici le code VB
    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
            'On créé un onglet "temp" dans lequel on importera le fichier de log
            ActiveWorkbook.Worksheets.Add After:=Worksheets("Index")
            ActiveSheet.Name = "temp"
     
            Const Sep = ";"
            Dim Tablo() As String
     
            'On importe le fichier de log au format CSV
            Application.ScreenUpdating = False
            cpt = 0
            Open fichier$ For Input Access Read As #1
                Do Until EOF(1)
                    Input #1, Recup
                    Tablo = Split(Recup, Sep)
                    For i = 0 To UBound(Tablo)
                        Worksheets("temp").Range("A1").Offset(cpt, i).Value = Tablo(i)
                    Next i
                    cpt = cpt + 1
                Loop
            Close #1
    et voici le résultat
    Date	06/01/2010
    Date	06/10/2010
    Date	06/08/2010
    Date	30/06/2010
    Date	21/06/2010
    Date	13/06/2010
    Date	03/02/2010
    Date	03/04/2010
    Date	03/11/2010
    Date	15/03/2010
    Date	23/03/2010
    Date	29/03/2010
    Dès que le numéro de jour est inférieur à 13, l'inversion se produit, sinon, la chaine semble être traitée comme une simple chaine de texte.

    l'ajout de .NumberFormat = "dd/mm/yyyy" ne change absolument rien...

  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 274
    Points
    11 274
    Par défaut
    Salut, à insérer à l'endroit idoine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                If IsDate(Tablo(i)) Then
                    Range("A1").Offset(Cpt, i) = CDate(Tablo(i))
                Else
                    Range("A1").Offset(Cpt, i) = Tablo(i)
                End If

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 221
    Points : 207
    Points
    207
    Par défaut
    Non, j'ai essayé cela et cela ne fonctionnait pas...

    Par contre en fouillant et testant j'ai trouvé qq chose
    j'ai fait la condition un peu comme tu a fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    For i = 0 To UBound(Tablo)
    	If i > 0 Then
            	Worksheets("temp").Range("A1").Offset(cpt, i).Value = Tablo(i)
            Else
                    Worksheets("temp").Range("A1").Offset(cpt, i) = Tablo(i)
            End If
    Next i
    et j'ai remplacé la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("temp").Range("A1").Offset(cpt, i).Value = Tablo(i)
    du if par:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("temp").Range("A1").Offset(cpt, i).Value = Format(Tablo(i), "dd/MM/yyyy")
    => pas de changement

    et par:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("temp").Range("A1").Offset(cpt, i).Value = Format(Tablo(i), "dd/MMM/yyyy")
    => Youpi! la date s'affiche bien dans le bon sens mais le mois est affiché en lettre (janv, fev, etc...)

    du coup, un petit CDate

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("temp").Range("A1").Offset(cpt, i).Value = CDate(Format(Tablo(i), "dd/MMM/yyyy"))
    => et Bingo!

    Par contre j'aimerais que Micro$oft m'explique pourquoi une date en dd/MMM/yyyy détecte correctement le mois alors que dd/MM/yyyy inverse le mois et le jour....

  4. #4
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 699
    Points
    6 699
    Par défaut
    Par contre j'aimerais que Microsoft m'explique pourquoi une date en dd/MMM/yyyy détecte correctement le mois alors que dd/MM/yyyy inverse le mois et le jour....
    Bonjour, vois le tutoriel suivant :

    Comprendre et gérer les dates sous Excel et en VBA

    cordialement,

    Didier

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

Discussions similaires

  1. Inversion mois/jour lors d'une importation d'un CSV
    Par miliev83 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 11/07/2013, 12h20
  2. [XL-2007] Inversement de date lors d'une importation
    Par zangaloni dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 26/02/2012, 19h56
  3. Erreur lors d'une importation!
    Par mathumitha dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 13/02/2007, 19h15
  4. [Requete] Inversion mois/jours lors de resultat nul
    Par Jeremie_Vi dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 06/07/2006, 12h47
  5. [ACCESS] probleme Inversion Mois/Jours
    Par fredrider dans le forum Access
    Réponses: 10
    Dernier message: 26/06/2006, 17h37

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