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 d'un fichier CSV dans un classeur ouvert


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 Importation d'un fichier CSV dans un classeur ouvert
    Bonjour,

    J'utilise la commande:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Workbooks.OpenText Filename:=fichier, Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, Semicolon:=True
    Pour ouvrir un fichier texte CSV.

    Le souci c'est qu'Excel m'ouvre un nouveau classeur.

    Comment puis-je faire pour que cette importation soit faite sur une feuille de mon classeur qui contient la macro?

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    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
    Sub Importcsv()
    Const Sep = ";"
    Dim Tablo() As String
    Dim i As Integer, Cmpt As Integer
    Dim fichier As String, strLig As String
     
    Application.ScreenUpdating = False
    fichier = "C:\Users\user\Desktop\test.csv"
    Open fichier For Input As #1
       Do While Not EOF(1)
          Line Input #1, strLig
          Tablo = Split(strLig, Sep)
          Cmpt = Cmpt + 1
          For i = 0 To UBound(Tablo)
             Sheets("DESTINATION").Cells(Cmpt, i + 1) = Tablo(i)
          Next i
       Loop
    Close #1
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 42
    Points : 68
    Points
    68
    Par défaut
    Bonjour,

    attention avec le séparateur, car (et j'ai le soucis), si dans une colonne tu a le caractère séparateur (ici le cela te rajoute une colonne.


  4. #4
    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
    OK,

    Il n'y a pas de commande toute faite...
    Il faut donc lire le fichier ligne par ligne et faire un "split" sur le caractère ";"

    Merci, ça marche nickel sauf pour la commande:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("DESTINATION").Cells(Cmpt, i + 1) = Tablo(i)
    que j'ai du remplacé par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Worksheets("DESTINATION").Range("A1").Offset(cmpt, i+1).Value = Tablo(i)

  5. #5
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Si tu souhaite commencer à la 2ème ligne, il suffit d'initialiser Cmpt
    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
    Sub Importcsv()
    Const Sep = ";"
    Dim Tablo() As String
    Dim i As Integer, Cmpt As Integer
    Dim fichier As String, strLig As String
     
    Application.ScreenUpdating = False
    fichier = "C:\Users\user\Desktop\test.csv"
    Cmpt=1                  'l'import commence à la ligne Cmpt+1
    Open fichier For Input As #1
       Do While Not EOF(1)
          Line Input #1, strLig
          Tablo = Split(strLig, Sep)
          Cmpt = Cmpt + 1
          For i = 0 To UBound(Tablo)
             Sheets("DESTINATION").Cells(Cmpt, i + 1) = Tablo(i)
          Next i
       Loop
    Close #1
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  6. #6
    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
    OK, merci tout fonctionne.

    il n'y aura pas de souci non plus quant au formatage du fichier CSV d'entrée

+ 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. Importer correctement un fichier .csv dans un classeur
    Par youpitralala dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 11/02/2011, 10h46
  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