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 de .csv


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 12
    Par défaut Import de .csv
    Bonjour à tous,
    J'ai un problème, comme d'habitude:
    j'ai un fichier csv, créé automatiquement par un logiciel, et j'aimerai l'importer par une macro dans un feuillet excel, et faire la mise en forme du tableau obtenu.
    Avec le logiciel, je peux aussi obtenir un fichier txt, contenant ces mêmes informations. La macro fonctionne parfaitement avec le txt, mais le fichier csv pose problème.

    Voici la partie du code chargée d'importer les lignes des fichiers, et de les ranger en colonnes, dans le cas du fichier txt.

    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
     
    'Ouverture et lecture du fichier à importer
    Open Fichier For Input As #1
    While Not EOF(1)
        Line Input #1, a
        'Copie des lignes dans excel
        ActiveSheet.Cells(NumRow + i, NumCol).Value = a
        i = i + 1
    Wend
    Close #1
     
    'Conversion des données délimitées par une virgule
    Set Plage = Range(Cells(NumRow, NumCol), Cells(NumRow + i, NumCol))
    Plage.TextToColumns DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
            ConsecutiveDelimiter:=False, Comma:=True
    Lorsque j'applique cela au csv, j'obtiens que la première ligne du document. En enlevant le TextToColumns, tout le document est copié dans une seule cellule .

    La principale différence que je vois entre le csv et le txt est que le csv contient une ligne "sautée" au début, et trois à la fin. Les données (séparateurs ",", guillemets,...) sont identiques ensuite.
    En convertissant le csv en txt, le bloc note ne parvient pas à lire les retours chariots (rectangle, comme pour les caractères inconnus)

    J'ai déjà cherché sur le forum, beaucoup de solutions existent pour importer un csv dans un nouveau feuillet, mais moi, je veux l'intégrer à un feuillet déjà existant, et contenant d'autres données (d'autres csv et txt importés, en fait).
    Pour l'instant, j'ai une solution temporaire, en passant par une querytable, mais celle ci insère une colonne pour chacune de ses colonnes, et décale donc le reste de mes données.

    Quelqu'un a une idée pour m'aider?
    Merci d'avance...

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    La méthode par le txt est la bonne (VBA 2003) cf http://www.developpez.net/forums/sho...d.php?t=298785
    Ton problème se situe au niveau de l'intégration de ce csv dans ta feuille Excel. D'où ma question : Où veux-tu l'intégrer ? A la suite ?
    Tu dis
    A+

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 12
    Par défaut
    En fait, l'utilisateur désigne une cellule et la macro importe le txt ou le csv à l'endroit désigné.
    Le tout tient sur un feuillet excel, qui a donc pour but de contenir plusieurs tableaux créés à partir de ces fichiers txt et/ou csv. (Le feuillet récapitule toutes ces données)
    Vois tu?

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Ok. Comme je m'en vais, je donne vite la procédure pour que l'utilisateur puis sélectionner une cellule où copier le csv. Ce sera à adapter et à placer après ouverture du csv.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim FL1 as Worksheet 'Feuille Excel ds laquelle sera incorporée le csv
    Dim FL2 as worksheet 'feuille csv
    Dim Adres as range
    Set FL1 = Workbooks("NomFichier.xls").Worksheets("NomDeLaFeuilleOùInsérerCsv")
    'Ici le code pour ouvrir le csv renommé txt
    'comme le csv est ouvert, la feuille active est le csv
    Set FL2 = ActiveSheet.name
    FL1.activate
    'Le choix de la cellule où coller
    set Adres = Application.Inputbox("Sélectionner une cellule où copier le fichier",Type:=8)
    'Sélection de la plage de données du csv
    Plage= FL2.Range("A1:" & cells(dernièreLigne, DernièreColonne).address).address 'tu as le code dans la FAQ ou sur le forum
    FL2.Range(Plage).copy FL1.Range(Adres.Address)
    Désolé mais je dois partir.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 12
    Par défaut
    Merci ouskel'nor !
    Grâce à toi, et à du bidouillage, j'ai réussi à adapter à mon code, et ça donne ça:

    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
    Set Wbtarg = ActiveSheet 'classeur où je veux copier les données
    Set Wbcsv = Application.Workbooks.Open(Fichier) 'Fichier est le nom du fichier csv
     
    Wbcsv.Activate
    PremiereLigne = Range("A1").End(xlDown).Row
    DerniereLigne = Range("A65536").End(xlUp).Row
    DerniereColonne = Range("IV2").End(xlToLeft).Column
    i = DerniereLigne - PremiereLigne + 1 'cette variable me permet de connaitre le nombre de lignes copiées. Non utilisé dans ce bout de code.
    Set Cible = Range("A1:" & Cells(DerniereLigne, DerniereColonne).Address)
    Cible.Copy
    Wbtarg.Activate
    CelTarg.Offset(1, 0).PasteSpecial 'CelTarg est la zone où on veut copier les données.
    'L'offset est pour un souci de présentation
    Application.CutCopyMode = False
    Wbcsv.Close

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

Discussions similaires

  1. [Importation] pbm pour importer un ".csv"
    Par javazer dans le forum Outils
    Réponses: 8
    Dernier message: 11/04/2006, 16h06
  2. import fich. CSV - delimitateur ',' - champs contenants ','
    Par nokiariver dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 10/04/2006, 17h26
  3. Réponses: 9
    Dernier message: 31/01/2006, 22h42
  4. [CSV] Imports Excel CSV à reformater
    Par boteha dans le forum Langage
    Réponses: 13
    Dernier message: 23/01/2006, 21h41
  5. Import Excel / CSV
    Par aston_max dans le forum SQL Procédural
    Réponses: 8
    Dernier message: 04/07/2004, 23h31

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