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 :

Importation fichier csv et date [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations forums :
    Inscription : Septembre 2011
    Messages : 65
    Par défaut Importation fichier csv et date
    Bonjour à tous,

    Je viens de faire une partie de code pour transformer un csv en fichier Excel mise en forme.
    Par contre à un moment il y a des dates et celle-ci sont parfois bien au format européen mais d'autres sont au format américain et je ne vois pas trop ce que je peux faire.

    Je vous joins le code :

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    Sub Importer_csv()
     
    On Error Resume Next
    Const Separateur = ","                  'type de séparateur
    Dim Tableau() As String                   'Tableau pour récupérer les valeurs entre séparateur du fichier csv
    Dim i As Integer, Cmpt As Integer       'Pour les compteurs des boucles qui vont faire les lignes et les colonnes des cellules du fichiers Excel
    Dim LigneCSV As String                  'Pour enregistrer les lignes CSV
    Dim Fichier As Variant                  'Emplacement du fichier CSV à importer
     
    Sheets("Feuil1").Cells.Clear            'Effacer la feuille Feuil1 avant l'importation du CSV
    ChDir ThisWorkbook.Path & "\"
    Fichier = Application.GetOpenFilename("Fichier CSV (*.csv), *.csv")
     
    'Format des cellules impératif d'avoir du texte sur la colonne 2
    'Format standard ensuite car sinon les qtés de manière aléatoire peuvent être au format date
    'Worksheets("Feuil1").Cells.Select
    'Worksheets("Feuil1").Selection.NumberFormat = "General"
    'Worksheets("Feuil1").Columns("B:B").Select
    'Worksheets("Feuil1").Selection.NumberFormat = "@"
     
    If Fichier <> False Then
    Application.ScreenUpdating = False
    Open Fichier For Input As #1                'Ouverture du fichier CSV à la ligne #1
    Cmpt = 0                                    'l'écriture de l'importation commence à la ligne cmpt + 1
    Do While Not EOF(1)                         'Faire tant que je ne suis pas à la dernière ligne
        Line Input #1, LigneCSV                 'Affectation de la ligne CSV à LigneCSV
        Tableau = Split(LigneCSV, Separateur)   'Ecriture du CSV dans le tableau
     
        Cmpt = Cmpt + 1
        For i = 0 To UBound(Tableau)
            If Cmpt = 1 Then
            Sheets("Feuil1").Cells(Cmpt, i + 2) = Format(Tableau(i), "@") 'Ecriture du CVS dans la feuille Excel en démarant à ligne 1 et colonne 2
            Else
            Sheets("Feuil1").Cells(Cmpt, i + 2) = Format(Tableau(i), "@")
            End If
        Next i
    Loop
    Close #1
    Application.ScreenUpdating = True
    Else
    Exit Sub
    End If
     
    'Colonne largeur automatique sur toutes les colonnes
    Cells.EntireColumn.AutoFit
     
    'Dernière ligne de la colonne 2 donc "B"
    With ThisWorkbook.Worksheets("Feuil1")
    DernièreLigne = .Cells(.Rows.Count, 2).End(xlUp).Row
    End With
     
    'Insertion de lignes
    Worksheets("Feuil1").Select
    Rows("1:5").Select
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
     
    'Boucle pour recopier le symbole dans la colonne 1
    For j = 1 To DernièreLigne - 1
        'Sheets("Feuil1").Cells(j * 12, 1) = Sheets("Feuil1").Cells(j * 12, 2)
        Sheets("Feuil1").Cells(j * 12 + 1, 1) = Sheets("Feuil1").Cells(j * 12, 2)
        Sheets("Feuil1").Cells(j * 12 + 2, 1) = Sheets("Feuil1").Cells(j * 12, 2)
        Sheets("Feuil1").Cells(j * 12 + 3, 1) = Sheets("Feuil1").Cells(j * 12, 2)
        Sheets("Feuil1").Cells(j * 12 + 4, 1) = Sheets("Feuil1").Cells(j * 12, 2)
        Sheets("Feuil1").Cells(j * 12 + 5, 1) = Sheets("Feuil1").Cells(j * 12, 2)
        Sheets("Feuil1").Cells(j * 12 + 6, 1) = Sheets("Feuil1").Cells(j * 12, 2)
        Sheets("Feuil1").Cells(j * 12 + 7, 1) = Sheets("Feuil1").Cells(j * 12, 2)
        Sheets("Feuil1").Cells(j * 12 + 8, 1) = Sheets("Feuil1").Cells(j * 12, 2)
        Sheets("Feuil1").Cells(j * 12 + 9, 1) = Sheets("Feuil1").Cells(j * 12, 2)
        Sheets("Feuil1").Cells(j * 12 + 10, 1) = Sheets("Feuil1").Cells(j * 12, 2)
        Sheets("Feuil1").Cells(j * 12 + 11, 1) = Sheets("Feuil1").Cells(j * 12, 2)
        Sheets("Feuil1").Cells(j * 12, 2).ClearContents
        'Sheets("Feuil1").Cells(j * 12, 1).ClearContents
    Next j
     
    'Suppression des lignes inserées
    Worksheets("Feuil1").Select
    Rows("1:5").Select
    Selection.Delete Shift:=xlUp
     
     
    End Sub

    J'ai aussi mis un fichier Excel avec la source csv et le résultat de l'import dans lequel j'ai mis les dates en jaune qui sont male écrite.

    En vous remerciant par avance de votre aide
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Essaie :

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    Sub Importer_csv()
     
    On Error Resume Next
    Const Separateur = ","                  'type de séparateur
    Dim Tableau() As String                   'Tableau pour récupérer les valeurs entre séparateur du fichier csv
    Dim i As Integer, Cmpt As Integer       'Pour les compteurs des boucles qui vont faire les lignes et les colonnes des cellules du fichiers Excel
    Dim LigneCSV As String                  'Pour enregistrer les lignes CSV
    Dim Fichier As Variant                  'Emplacement du fichier CSV à importer
     
    'Sheets("Feuil1").Cells.Clear            'Effacer la feuille Feuil1 avant l'importation du CSV
    Sheets("Feuil1").Cells.Clear
    ChDir ThisWorkbook.Path & "\"
    Fichier = Application.GetOpenFilename("Fichier CSV (*.csv), *.csv")
     
    'Format des cellules impératif d'avoir du texte sur la colonne 2
    'Format standard ensuite car sinon les qtés de manière aléatoire peuvent être au format date
    'Worksheets("Feuil1").Cells.Select
    'Worksheets("Feuil1").Selection.NumberFormat = "General"
    'Worksheets("Feuil1").Columns("B:B").Select
    'Worksheets("Feuil1").Selection.NumberFormat = "@"
     
    If Fichier <> False Then
    Application.ScreenUpdating = False
    Open Fichier For Input As #1                'Ouverture du fichier CSV à la ligne #1
    Cmpt = 0                                    'l'écriture de l'importation commence à la ligne cmpt + 1
    Do While Not EOF(1)                         'Faire tant que je ne suis pas à la dernière ligne
        Line Input #1, LigneCSV                 'Affectation de la ligne CSV à LigneCSV
        Tableau = Split(LigneCSV, Separateur)   'Ecriture du CSV dans le tableau
     
        Cmpt = Cmpt + 1
        For i = 0 To UBound(Tableau)
            If Cmpt = 1 Then
            Sheets("Feuil1").Cells(Cmpt, i + 2) = Format(Tableau(i), "@") 'Ecriture du CVS dans la feuille Excel en démarant à ligne 1 et colonne 2
            ElseIf IsDate(Tableau(i)) Then
                Sheets("Feuil1").Cells(Cmpt, i + 2) = DateValue(Tableau(i))
            Else
                Sheets("Feuil1").Cells(Cmpt, i + 2) = Format(Tableau(i), "@")
            End If
        Next i
    Loop
    Close #1
    Application.ScreenUpdating = True
    Else
    Exit Sub
    End If
     
    'Colonne largeur automatique sur toutes les colonnes
    Cells.EntireColumn.AutoFit
     
    'Dernière ligne de la colonne 2 donc "B"
    With ThisWorkbook.Worksheets("Feuil1")
    DernièreLigne = .Cells(.Rows.Count, 2).End(xlUp).Row
    End With
     
    'Insertion de lignes
    Worksheets("Feuil1").Select
    Rows("1:5").Select
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
     
    'Boucle pour recopier le symbole dans la colonne 1
    For j = 1 To DernièreLigne - 1
        'Sheets("Feuil1").Cells(j * 12, 1) = Sheets("Feuil1").Cells(j * 12, 2)
        Sheets("Feuil1").Cells(j * 12 + 1, 1) = Sheets("Feuil1").Cells(j * 12, 2)
        Sheets("Feuil1").Cells(j * 12 + 2, 1) = Sheets("Feuil1").Cells(j * 12, 2)
        Sheets("Feuil1").Cells(j * 12 + 3, 1) = Sheets("Feuil1").Cells(j * 12, 2)
        Sheets("Feuil1").Cells(j * 12 + 4, 1) = Sheets("Feuil1").Cells(j * 12, 2)
        Sheets("Feuil1").Cells(j * 12 + 5, 1) = Sheets("Feuil1").Cells(j * 12, 2)
        Sheets("Feuil1").Cells(j * 12 + 6, 1) = Sheets("Feuil1").Cells(j * 12, 2)
        Sheets("Feuil1").Cells(j * 12 + 7, 1) = Sheets("Feuil1").Cells(j * 12, 2)
        Sheets("Feuil1").Cells(j * 12 + 8, 1) = Sheets("Feuil1").Cells(j * 12, 2)
        Sheets("Feuil1").Cells(j * 12 + 9, 1) = Sheets("Feuil1").Cells(j * 12, 2)
        Sheets("Feuil1").Cells(j * 12 + 10, 1) = Sheets("Feuil1").Cells(j * 12, 2)
        Sheets("Feuil1").Cells(j * 12 + 11, 1) = Sheets("Feuil1").Cells(j * 12, 2)
        Sheets("Feuil1").Cells(j * 12, 2).ClearContents
        'Sheets("Feuil1").Cells(j * 12, 1).ClearContents
    Next j
     
    'Suppression des lignes inserées
    Worksheets("Feuil1").Select
    Rows("1:5").Select
    Selection.Delete Shift:=xlUp
     
     
    End Sub

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations forums :
    Inscription : Septembre 2011
    Messages : 65
    Par défaut
    Pour les dates cela fonctionne très bien par contre maintenant c'est la partie nombre qui se transforme en heure.

    Cela doit venir du fait que mes nombres sont de la forme suivante 3.0 dans le fichier csv (export d'un ERP) pour le nombre entier de 3.

    Dans ces données j'ai trois formats en fait de la date où il y avait le problème de départ, des nombres entiers qui finissent tous par .0 et du texte partout ailleurs.

    As-tu une idée pour cette histoire de nombre ?

    Merci par avance

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Oups, j'avais oublié :

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    Sub Importer_csv()
     
    On Error Resume Next
    Const Separateur = ","                  'type de séparateur
    Dim Tableau() As String                   'Tableau pour récupérer les valeurs entre séparateur du fichier csv
    Dim i As Integer, Cmpt As Integer       'Pour les compteurs des boucles qui vont faire les lignes et les colonnes des cellules du fichiers Excel
    Dim LigneCSV As String                  'Pour enregistrer les lignes CSV
    Dim Fichier As Variant                  'Emplacement du fichier CSV à importer
     
    'Sheets("Feuil1").Cells.Clear            'Effacer la feuille Feuil1 avant l'importation du CSV
    Sheets("Feuil1").Cells.Clear
    ChDir ThisWorkbook.Path & "\"
    Fichier = Application.GetOpenFilename("Fichier CSV (*.csv), *.csv")
     
    'Format des cellules impératif d'avoir du texte sur la colonne 2
    'Format standard ensuite car sinon les qtés de manière aléatoire peuvent être au format date
    'Worksheets("Feuil1").Cells.Select
    'Worksheets("Feuil1").Selection.NumberFormat = "General"
    'Worksheets("Feuil1").Columns("B:B").Select
    'Worksheets("Feuil1").Selection.NumberFormat = "@"
     
    If Fichier <> False Then
    Application.ScreenUpdating = False
    Open Fichier For Input As #1                'Ouverture du fichier CSV à la ligne #1
    Cmpt = 0                                    'l'écriture de l'importation commence à la ligne cmpt + 1
    Do While Not EOF(1)                         'Faire tant que je ne suis pas à la dernière ligne
        Line Input #1, LigneCSV                 'Affectation de la ligne CSV à LigneCSV
        Tableau = Split(LigneCSV, Separateur)   'Ecriture du CSV dans le tableau
     
        Cmpt = Cmpt + 1
        For i = 0 To UBound(Tableau)
            If Cmpt = 1 Then
            Sheets("Feuil1").Cells(Cmpt, i + 2) = Format(Tableau(i), "@") 'Ecriture du CVS dans la feuille Excel en démarant à ligne 1 et colonne 2
            ElseIf IsNumeric(Tableau(i)) Then
                Sheets("Feuil1").Cells(Cmpt, i + 2) = CInt(Tableau(i))
            ElseIf IsDate(Tableau(i)) Then
                Sheets("Feuil1").Cells(Cmpt, i + 2) = DateValue(Tableau(i))
            Else
                Sheets("Feuil1").Cells(Cmpt, i + 2) = Format(Tableau(i), "@")
            End If
        Next i
    Loop
    Close #1
    Application.ScreenUpdating = True
    Else
    Exit Sub
    End If
     
    'Colonne largeur automatique sur toutes les colonnes
    Cells.EntireColumn.AutoFit
     
    'Dernière ligne de la colonne 2 donc "B"
    With ThisWorkbook.Worksheets("Feuil1")
    DernièreLigne = .Cells(.Rows.Count, 2).End(xlUp).Row
    End With
     
    'Insertion de lignes
    Worksheets("Feuil1").Select
    Rows("1:5").Select
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
     
    'Boucle pour recopier le symbole dans la colonne 1
    For j = 1 To DernièreLigne - 1
        'Sheets("Feuil1").Cells(j * 12, 1) = Sheets("Feuil1").Cells(j * 12, 2)
        Sheets("Feuil1").Cells(j * 12 + 1, 1) = Sheets("Feuil1").Cells(j * 12, 2)
        Sheets("Feuil1").Cells(j * 12 + 2, 1) = Sheets("Feuil1").Cells(j * 12, 2)
        Sheets("Feuil1").Cells(j * 12 + 3, 1) = Sheets("Feuil1").Cells(j * 12, 2)
        Sheets("Feuil1").Cells(j * 12 + 4, 1) = Sheets("Feuil1").Cells(j * 12, 2)
        Sheets("Feuil1").Cells(j * 12 + 5, 1) = Sheets("Feuil1").Cells(j * 12, 2)
        Sheets("Feuil1").Cells(j * 12 + 6, 1) = Sheets("Feuil1").Cells(j * 12, 2)
        Sheets("Feuil1").Cells(j * 12 + 7, 1) = Sheets("Feuil1").Cells(j * 12, 2)
        Sheets("Feuil1").Cells(j * 12 + 8, 1) = Sheets("Feuil1").Cells(j * 12, 2)
        Sheets("Feuil1").Cells(j * 12 + 9, 1) = Sheets("Feuil1").Cells(j * 12, 2)
        Sheets("Feuil1").Cells(j * 12 + 10, 1) = Sheets("Feuil1").Cells(j * 12, 2)
        Sheets("Feuil1").Cells(j * 12 + 11, 1) = Sheets("Feuil1").Cells(j * 12, 2)
        Sheets("Feuil1").Cells(j * 12, 2).ClearContents
        'Sheets("Feuil1").Cells(j * 12, 1).ClearContents
    Next j
     
    'Suppression des lignes inserées
    Worksheets("Feuil1").Select
    Rows("1:5").Select
    Selection.Delete Shift:=xlUp
     
     
    End Sub

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations forums :
    Inscription : Septembre 2011
    Messages : 65
    Par défaut
    Ok je viens de faire le test et j'ai toujours le même résultat avec ces chaînes de caractère (exemple 3.0) qui ne sont pas pris comme des nombres entiers mais des heures.

    Et même pire quand je fais un format de cellule et que je passe en standard ou en nombre cela me met 0 au lieu des vrais valeurs initiales.

    du coup le rajout ne fonctionne pas

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Regarde le classeur joint. Ca peut venir du fichier csv. Poste-le en retour.
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. [XL-2007] Import fichier CSV date pose probleme
    Par guy2004 dans le forum Excel
    Réponses: 3
    Dernier message: 31/01/2012, 06h44
  2. [Pb Importation fichier CSV]
    Par Jeremie_Vi dans le forum Access
    Réponses: 2
    Dernier message: 04/05/2007, 06h54
  3. Importation fichier CSV Excel
    Par @lex(is) dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 22/06/2006, 02h16
  4. Update de plusieurs tables, import fichier csv sql loader
    Par fusuke dans le forum SQL*Loader
    Réponses: 2
    Dernier message: 18/05/2006, 15h08
  5. Réponses: 9
    Dernier message: 31/01/2006, 22h42

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