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 CSV [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 221
    Par défaut Import fichier CSV
    Bonjour,

    J'utilise le code suivant pour importer un fichier CSV (séparé par des points virgules) dans un onglet d'une feuille excel:

    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
     
     
        Dim fichier As String      'fichier csv d'entrée
        Dim cpt As Integer        'Compteur de ligne du fichier de log
        Const Sep = ";"            'Séparateur des champs dans le fichier de log
        Dim Tablo() As String     'Tableau qui stockera chaque ligne du fichier log
        Dim Recup As String       'Variable qui contiendra la ligne du fichier de log
     
        ' Effacement de l'onglet "temp" du classeur de macro s'il existe
        Application.DisplayAlerts = False
        On Error Resume Next
            wbanalyse.Worksheets("temp").Delete
        On Error GoTo 0
        Application.DisplayAlerts = True
     
        'On créé un onglet "temp" dans lequel on importera le fichier de log
        wbanalyse.Worksheets.Add(After:=Worksheets("Index")).Name = "temp"
        Set wstemp = wbanalyse.Sheets("temp")
     
        'On importe le fichier de log OCAGE au format CSV dans l'onglet "temp"
        fichier = "C:\fichier.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)
                    wstemp.Range("A1").Offset(cpt, i) = Tablo(i)
                Next i
                cpt = cpt + 1
            Loop
        Close #1
    Pour le fichier CSV "CT001_S38.csv" ci-joint cela fonctionne parfaitement.

    Par contre pour le fichier "CT001_OCAGE_2010-09-24.csv" également ci-joint, importation le code me fait n'importe quoi: Il prends les caractères "," pour des retours chariots.

    En regardant de plus près, ce découpage se produit lors de l'instruction: input #1, Recup

    Quelqu'un saurait me dire pourquoi et comment contourner ce problème?

    Max
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 875
    Par défaut
    mais pourquoi vous ne vous contentez pas d'ouvrrir les fichiers csv avec workbooks.open ?
    Excel est capable de gérer ce format.

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

    Informations forums :
    Inscription : Avril 2010
    Messages : 221
    Par défaut
    Bonjour,

    C'est surtout une question de présentation, car avec cela, le fichier est ouvert dans un "onglet" du classeur Excel qui contient cette macro.

    Je garde également en mémoire la dernière importation

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 875
    Par défaut
    est ce qu'en mettant ceci à la place de votre code ça suffit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        dim wbk as workbook
        set wbk=workbooks.open("C:\fichier.csv")
        wbk.sheets(1).copy after:=wbanalyse.sheets("Index")
        wbk.close savechanges:=false

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

    Informations forums :
    Inscription : Avril 2010
    Messages : 221
    Par défaut
    Non, cela ne fonctionne pas,

    même en spécifiant le délimiteur de colonne à ";", Excel me prends toujours les virgules....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        Dim wbk As Workbook
        fichier = "C:\fichier.csv"
        Set wbk = Workbooks.Open(fichier, , , 4)
        wbk.Sheets(1).Copy after:=wbanalyse.Sheets("Index")
        wbk.Close savechanges:=False
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        Dim wbk As Workbook
        fichier = "C:\fichier.csv"
        Set wbk = Workbooks.Open(fichier, , , 6, , , , , ";")
        wbk.Sheets(1).Copy after:=wbanalyse.Sheets("Index")
        wbk.Close savechanges:=False

  6. #6
    Membre Expert
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 875
    Par défaut
    et comme ceci:

    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 sh As Worksheet
    Set sh = wbanalyse.Worksheets.Add(after:=Worksheets("Index"))
    Dim obj As Object
     
        With sh.QueryTables.Add(Connection:= _
            "TEXT;C:\Documents and Settings\Benjîle\Bureau\CT001_OCAGE_2010-09-24.csv", _
            Destination:=sh.Range("$A$1"))
            .Name = "Temp"
            '.TextFileParseType = xlDelimited
            .TextFileSemicolonDelimiter = True
            .Refresh BackgroundQuery:=False
        End With
            sh.QueryTables("Temp").Delete
    c'est l'équivalent de données importer

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

Discussions similaires

  1. Import fichier CSV
    Par oki972 dans le forum SQLite
    Réponses: 5
    Dernier message: 08/10/2007, 20h58
  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