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 :

Importer correctement un fichier .csv dans un classeur


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 86
    Points : 66
    Points
    66
    Par défaut Importer correctement un fichier .csv dans un classeur
    Bonjour,

    Je dois faire un traitement super simple... J'ai un fichier .CSV (séparateur ; - pas de caractères " au bout des chaines et il peut y avoir plusieurs ; consécutifs) dans lequel je veux insérer 4 colonnes vide entre E:E et F:F !

    Et je coince bêtement parce que c'est un fichier .CSV

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim sNOM As String
    Dim objWKB As Excel.Workbooks
    Dim objSHT As Excel.Worksheet
     
    sNOM = "C:\1738.csv"
     
    Set objWKB = Application.Workbooks.OpenText(sNOM, SemiColumn:=True)
    Et rien que là, ça marque quand je compile Fonction ou Variable attendue...

    Si tout se passait bien (je voudrais rajouter ça au bout du code) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        Set objSHT = objWKB.Sheets(1)
        objSHT.Activate
        Columns("F:F").Select
        Selection.Insert Shift:=xlToRight
        Selection.Insert Shift:=xlToRight
        Selection.Insert Shift:=xlToRight
        Selection.Insert Shift:=xlToRight
        Application.DisplayAlerts = False
        objWKB.Save
        objWKB.Close
    Avez-vous une petite idée ?

    Merci d'avance

    Vincent

  2. #2
    Membre expérimenté Avatar de Vadorblanc
    Profil pro
    Inscrit en
    Février 2008
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 309
    Points : 1 482
    Points
    1 482
    Par défaut
    Bonjour youpitralala
    Je viens de proposer un code à azsdcv discussion "Compilation de données Excel", je pense que tu peux essayer aussi, tu as la meme demande, par contre je ne comprends pas ta demande "J'ai un fichier .CSV (séparateur ; - pas de caractères", un fichier CSV est toujoiurs séparés par des points virgules non ?
    Cordialement

  3. #3
    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, déjà
    ensuite voir aide en ligne sur OpenText : [F1], sans oublier le post de Joel sur http://www.developpez.net/forums/d67...xt-separateur/

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 86
    Points : 66
    Points
    66
    Par défaut
    Bonjour à tous,

    Mon problème ne vient pas tout à fait de l'ouverture du fichier .CSV mais de l'affectation du résultat dans un objet EXCEL.Workbooks

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        Dim sNOMS As String, sNOMD As String
        Dim objWKB As Excel.Workbooks
        Dim objSHT As Excel.Worksheet
     
        sNOMS = "C:\1738.csv"
        sNOMD = "C:\1738.txt"
     
        ' J'ai essayé de passer par un .TXT intermédiaire
        Name sNOMS As sNOMD
     
        Set objWKB = Workbooks.OpenText(Filename:=sNOMD, Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, Semicolon:=True)
    --> Génère Fonction ou variable attendue et s'arrête sur le OpenText

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        Set objWKB = Application.Workbooks.OpenText(Filename:=sNOMD, Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, Semicolon:=True)
    --> idem : fonction ou variable attendue

    Si je mets juste la ligne ci dessous ça marche sauf que je veux faire un traitement 'invisible' donc je ne souhaite pas que des fenêtres s'ouvrent.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks.OpenText Filename:=sNOMD, Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, Semicolon:=True
    La doc me dit pourtant s'applique à Workbooks (Collection)

    La même ligne suivante fonctionne bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set objWKB = Application.Workbooks.Open(Filename:=sNOMD)
    Je tourne un peu en rond.......

    Si quelqu'un a une idée du problème ou peut me donner un code qui fait le traitement suivant :

    ouverture du fichier sNOM (format CSV)
    Insertion de 4 colonnes en F:F
    Sauvegarde + fermeture

    Merci d'avance,

    Vincent

  5. #5
    Membre chevronné Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Points : 2 003
    Points
    2 003
    Par défaut
    Bonjour,
    il faut effectivement convertir ton fichier en .txt.
    Je n'ai pas de probleme en faisant 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    Sub inser_ligne_csv()
    Dim chemin As String, fichier As String, sNOM As String
    Dim objWKB As Workbook, objSHT As Worksheet
     
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
     
    chemin = "C:\"
    fichier = "1738.csv"
    sNOM = "1738.txt"
     
    Name chemin & fichier As chemin & sNOM
     
    Workbooks.OpenText Filename:=chemin & sNOM, SemiColon:=True
     
    Set objWKB = Workbooks(sNOM)
     
    Set objSHT = objWKB.Sheets(1)
        With objSHT.Columns("F:F")
         For i = 1 To 4
          .Insert Shift:=xlToRight
         Next i
        End With
     
     
        objWKB.SaveAs Filename:=chemin & fichier, FileFormat:=xlCSV, local:=True
     
        objWKB.Close
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    End Sub

  6. #6
    Membre régulier
    Inscrit en
    Mai 2010
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 100
    Points : 95
    Points
    95
    Par défaut
    Pour l'importation de ton csv :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Workbooks.OpenText Filename:="Chemin & nom du fichier", Origin:=xlWindows, StartRow:=1 _
         , DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
         ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=True, Comma:=False _
         , Space:=False, Other:=False, FieldInfo:=Array(Array(1, 2), Array(2, 9), _
         Array(3, 9), Array(4, 9), Array(5, 9), Array(6, 9), Array(7, 1), Array(8, 9), Array(9, 9), TrailingMinusNumbers:=True
    Il y aura autant d'Array qu'il y aura de colonnes.

    Ensuite tu insères tes colonnes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Columns("E:H").Select
        Selection.Insert Shift:=xlToRight
    Ensuite tu sauvegardes en format csv
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        ActiveWorkbook.SaveAs Filename:= _
            "répertoire & nom fichier", FileFormat:=xlCSV, _
            CreateBackup:=False
        ActiveWorkbook.Close

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 86
    Points : 66
    Points
    66
    Par défaut
    Bonjour,

    Effectivement l'affectation du Set objWKB en 2 fois marche parfaitement !

    Merci, ça m'a tout résolu mon problème.

    Vncent

  8. #8
    Membre chevronné Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Points : 2 003
    Points
    2 003
    Par défaut
    juste une remarque, dans le code que j'ai mis, l'instruction "name ... as ..." transforme ton fichier ici en Txt.
    Mais comme à la fin de la macro tu enregistres ton fichier en ".csv" tu te retrouves avec deux fichiers a savoir un .txt et un .csv.
    Il faut donc supprimer le .txt.
    Dans le code que j'ai mis , on peux rajouter pour supprimer le .txt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    objWKB.Close
    Kill chemin & sNOM 'supprime le fichier snom = test.txt
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True

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

Discussions similaires

  1. Importer un fichier csv dans un classeur excel
    Par olivverte dans le forum Excel
    Réponses: 14
    Dernier message: 15/11/2013, 16h59
  2. Importation d'un fichier CSV dans un classeur ouvert
    Par mamax29 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 31/05/2010, 16h03
  3. [XL-2003] Importer automatiquement un fichier CSV dans une feuille
    Par Mikayel dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 12/06/2009, 10h35
  4. Import d'un fichier CSV dans access par VB
    Par Shoezman13 dans le forum VBA Access
    Réponses: 3
    Dernier message: 18/06/2008, 10h43
  5. Réponses: 1
    Dernier message: 29/04/2008, 12h54

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