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


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Inscrit en
    Mars 2008
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 257
    Par défaut
    Bonjour,

    J'ai une macro dans ma feuille Transfert de fichier (version MAD)2.xls qui lors de son execution m'ouvre le fichier transfert_fichiers2.csv . La macro importe bien le fichier mais le formattage est pas le bon et j'aurai besoin de votre aide svp.

    Voici la macro qui fait le travail :
    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
    Sub LireFichierTxt()
    Dim Ligne As String, NoLigne As Long, NoCol As Integer
    Dim Tableau, Chemin, NomFich
    Chemin = "I:\49801\Public\#AMK#\MAD\"
    NomFich = "transfert_fichiers.csv"
        NoLigne = 2
        Open Chemin & NomFich For Input As #1
        While Not EOF(1)
            Input #1, Ligne
            Tableau = Split(Ligne, ",")
            NoLigne = NoLigne + 1
            For NoCol = 0 To UBound(Tableau)
                 Cells(NoLigne, NoCol + 1).Value = Tableau(NoCol)
            Next
        Wend
        Close #1
    End Sub
    Je vous laisse en piece jointe aussi mon fichier contenant ma macro et le fichier que je desire importer. Je souhaite simplement que lors de l'importation, tout s'affiche pareil que lorsque j'ouvre le fichier transfert_fichiers2.csv

    En ce moment, il affiche les donnees sur plsieurs lignes sans tenir compte des tabulations.

    Merci de votre aide d'avance pour une piste !

    resalut,

    j'ai essayé de lire le fichier transfert_fichiers2.csv via une connection adodb mais helas, les extensions .csv de la méthode de Skillyroad sont pas acceptés.

    Code utilisé :
    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
    Sub RequeteClasseurFerme()
        Dim Cn As ADODB.Connection
        Dim Fichier As String
        Dim NomFeuille As String, texte_SQL As String
        Dim Rst As ADODB.Recordset
     
        'Définit le classeur fermé servant de base de données
        Fichier = "I:\49801\Public\#AMK#\MAD\transfert_fichiers2.csv"
        'Nom de la feuille dans le classeur fermé
        NomFeuille = "transfert_fichiers2"
     
        Set Cn = New ADODB.Connection
     
        '--- Connection ---
        With Cn
            .Provider = "Microsoft.Jet.OLEDB.4.0"
            .ConnectionString = "Data Source=" & Fichier & _
                ";Extended Properties=Excel 8.0;"
            .Open
        End With
        '-----------------
     
        'Définit la requête.
        '/!\ Attention à ne pas oublier le symbole $ après le nom de la feuille.
        texte_SQL = "SELECT * FROM [" & NomFeuille & "$]"
     
        Set Rst = New ADODB.Recordset
        Set Rst = Cn.Execute(texte_SQL)
     
        'Ecrit le résultat de la requête dans la cellule A2
        Range("A2").CopyFromRecordset Rst
     
        '--- Fermeture connexion ---
        Cn.Close
        Set Cn = Nothing
     
    End Sub
    Si quelqu'un à une idée, merci de m'aider !
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Par défaut
    Bonsoir,

    je m'en tiendrai à ton premier message, pour lire ton fichier ligne à ligne remplace ton input #1.... par line Input #1, .....


    tu dis quoi ...

  3. #3
    Membre éclairé
    Inscrit en
    Mars 2008
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 257
    Par défaut
    Salut JackOuYA,

    En faisant Line input #1, il m'affiche le tout sur la premiere ligne. Avec Input #1, il m'affiche le tout sur la premiere colonne.

    Moi je desire faire afficher le tout tel que présenté dans le fichier .csv

    Merci pour ton aide.

  4. #4
    Membre Expert
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Par défaut
    Citation Envoyé par Mimosa777 Voir le message
    Salut JackOuYA,

    En faisant Line input #1, il m'affiche le tout sur la premiere ligne. Avec Input #1, il m'affiche le tout sur la premiere colonne.

    Moi je desire faire afficher le tout tel que présenté dans le fichier .csv

    Merci pour ton aide.
    tu dis cela de mémoire ou tu as testé ?

  5. #5
    Membre éclairé
    Inscrit en
    Mars 2008
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 257
    Par défaut
    Non non j'ai testé.. Tu peux aussi le tester, j'ai mis les fichiers en piece jointe dans mon premier message.

    Merci !

  6. #6
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonsoir.

    Je me demandais pourquoi tu n'ouvres pas tout simplement le fichier .CSV sous Excel pour récupérer ce qu'il y a dedans? Pourquoi le lire en texte?

    PGZ

  7. #7
    Membre éclairé
    Inscrit en
    Mars 2008
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 257
    Par défaut
    ui, je pourrai faire cela, mais le fichier .csv qyui est généré à partir d'un autre programme Unix ne me permet pas de l'ouvrir directement dans Excel. Il ne fonctionne pas car il contient des caractères que Excel ne reconnait pas lors de l'ouverture du fichier. Je dois le convertir d'abord en fichier txt pour l'ouvrir
    un excel.

    Merci encore pour ceux qui peuvent m'aider.

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 288
    Par défaut
    Curieux, j'ai testé tes fichiers et ça marche impec pour moi, en mettant Line Input

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Open Chemin & NomFich For Input As #1
        While Not EOF(1)
            Line Input #1, Ligne

  9. #9
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 288
    Par défaut
    Peut-être un problème de retour ligne dans la mesure où le fichier vient d'unix ?
    Effectivement si les retours lignes sont figurés par LF, ça pose problème (Line Input voit le fichier comme une seule grande ligne et Excel plante par manque de colonnes).
    Par contre ça fonctionne bien avec CR-LF, ce qui est le cas dans le fichier que tu as mis en pièce jointe. A tout hasard, il faudrait que tu vérifies ton fichier csv original avec un éditeur comme Notepad++ ou Ultraedit pour être sûr de ce que tu as comme caractère de retour ligne dans le fichier.

  10. #10
    Membre éclairé
    Inscrit en
    Mars 2008
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 257
    Par défaut
    C'est vraiment bizarre que ca fonctionnes pour toi et pas moi. Je fais exactement le meme test que toi avec le fichier que je vous ai remis et ca marches pas pour moi. Il me les mets tous sur la meme ligne lorsque j'utilises Line Input #1, Ligne

    Pour ce que tu dis a propos de UNix, tu as bien raison je crois. Que dois-je faire alors pour regler ce probleme ? comment ouvrir ce fichier la correctement ?

    Merci

  11. #11
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 288
    Par défaut
    Bon je n'ai pas le temps de finasser, ce petit ajout pourrait te dépanner.
    Il s'agit de remplacer d'éventuels LF seuls en CR-LF avant de faire le traitement.
    Ce n'est pas forcément très fin

    Et bien sûr, ça ne dépannera que si c'est bien ça le problème, à tester donc (attention à l'insérer au bon endroit).

    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
    NomFich = "transfert_fichiers.csv" 'ou .txt
        
        varTexte = ""
        Open Chemin & NomFich For Input As #1
        While Not EOF(1)
            Line Input #1, Ligne
            varTexte = varTexte & Ligne
        Wend
        Close #1
        
        varTexte = Replace(varTexte, vbLf, vbCrLf)
        
        Open Chemin & NomFich For Output As #1    ' Ouvre le fichier en écriture.
            Print #1, varTexte
        Close #1
    
        NoLigne = 2
        Open Chemin & NomFich For Input As #1

  12. #12
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 288
    Par défaut
    Bon ça a un effet tout à fait néfaste pour le fichier si tu le relances une deuxième fois ou si le problème n'est pas là... il faudrait autre chose...

  13. #13
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 288
    Par défaut
    Allez c'est pas très beau, mais ça marche mieux :

    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
    NomFich = "transfert_fichiers.csv" 'ou .txt
        
        varTexte = ""
        Open Chemin & NomFich For Input As #1
        While Not EOF(1)
            Line Input #1, Ligne
            varTexte = varTexte & Ligne & vbCrLf
        Wend
        Close #1
        
        varTexte = Replace(varTexte, vbLf, vbCrLf)
        varTexte = Replace(varTexte, vbCr & vbCr, vbCr)    
        Open Chemin & NomFich For Output As #1    ' Ouvre le fichier en écriture.
            Print #1, varTexte
        Close #1
    
        NoLigne = 2
        Open Chemin & NomFich For Input As #1

  14. #14
    Membre éclairé
    Inscrit en
    Mars 2008
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 257
    Par défaut
    Effectivement, ca ne marches pas. Il me cree une erreur sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Open Chemin & NomFich For Output As #1    ' Ouvre le fichier en écriture.
    Il me dit path/file access error !

    Ceci est le code complet de ma macro avec ce que tu as demandé d'ajouter :
    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 LireFichierTxt()
    Dim Ligne As String, NoLigne As Long, NoCol As Integer
    Dim Tableau, Chemin, NomFich
    Chemin = "I:\49801\Public\#AMK#\MAD\"
    NomFich = "transfert_fichiers.csv"
    varTexte = ""
        Open Chemin & NomFich For Input As #1
        While Not EOF(1)
            Line Input #1, Ligne
            varTexte = varTexte & Ligne
        Wend
        Close #1
     
        varTexte = Replace(varTexte, vbLf, vbCrLf)
     
        Open Chemin & NomFich For Output As #1    ' Ouvre le fichier en écriture.
            Print #1, varTexte
        Close #1
     
        NoLigne = 3
        Open Chemin & NomFich For Input As #1
        While Not EOF(1)
            Line Input #1, Ligne
            Tableau = Split(Ligne, ",")
            NoLigne = NoLigne + 1
            For NoCol = 0 To UBound(Tableau)
                 Cells(NoLigne, NoCol + 1).Value = Tableau(NoCol)
            Next
        Wend
        Close #1
    End Sub

  15. #15
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 288
    Par défaut
    Le fichier n'est pas accessible en écriture ?

  16. #16
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 288
    Par défaut
    Sinon comme disait PGZ, ouvre-le directement en csv. Là ça n'a pas l'air de le gêner que ce soit du LF.

    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
        With ActiveSheet.QueryTables.Add(Connection:= _
            "TEXT;I:\49801\Public\#AMK#\MAD\transfert_fichiers2.csv", Destination:=Range("A3"))
            .Name = "transfert_fichiers"
            .FieldNames = True
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .RefreshStyle = xlInsertDeleteCells
            .SavePassword = False
            .SaveData = True
            .AdjustColumnWidth = True
            .RefreshPeriod = 0
            .TextFilePromptOnRefresh = False
            .TextFilePlatform = 850
            .TextFileStartRow = 1
            .TextFileParseType = xlDelimited
            .TextFileTextQualifier = xlTextQualifierDoubleQuote
            .TextFileConsecutiveDelimiter = False
            .TextFileTabDelimiter = False
            .TextFileSemicolonDelimiter = False
            .TextFileCommaDelimiter = True
            .TextFileSpaceDelimiter = False
            .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _
            1, 1)
            .TextFileTrailingMinusNumbers = True
            .Refresh BackgroundQuery:=False
        End With
    (copier-coller de l'enregistreur de macro)

  17. #17
    Membre éclairé
    Inscrit en
    Mars 2008
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 257
    Par défaut
    C'est bon, J'ai changé l'accès en ecriture et ca marches maintenant. Merci beaucoup neupont.

    Cependant, il faudrait a chaque fois que je change l'accès en ecriture du fhicer c'est ca hein car je crois que lorsqu'il est généré par Unix, il est automatiquement lecture seulement.

  18. #18
    Membre éclairé
    Inscrit en
    Mars 2008
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 257
    Par défaut
    Humm.. ca marches bien la prmeiere fois mais la deuxieme fois, voila ce qu'il me retourne :
    application-defined or object-defined error

    sur cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(NoLigne, NoCol + 1).Value = Tableau(NoCol)
    Et lorsque j'essaie d'ouvrir le fichier transfert_fichiers.csv en Excel pour voir le contenu, il ne contient qu'un seule ligne et me retourne que :
    File not loaded completely.

  19. #19
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 288
    Par défaut
    Relis tous mes posts, je crois que tu en as sauté quelques-uns postés juste avant les tiens.

  20. #20
    Membre éclairé
    Inscrit en
    Mars 2008
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 257
    Par défaut
    Non j'ai tous relus. Quand tu m'as demandé d'essayé ton autre méthode que tu as dis étant mieux fait, ben celle la marches pas car me retourne l'erreur sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(NoLigne, NoCol + 1).Value = Tableau(NoCol)
    POur ce qui est de l'ouvrir directement en csv, ca marchera pas car comme je l'ai expliqué au debut, le fichier .csv généré contient des caractères Unix qu'Excel ne reconnait pas et me retoune donc une erreur.

    Ta prmeiere methode a finlament marché une fois que j'ai mis le fichier en ecriture mais il ne marches qu'une seule fois.:

    ton aide est grandement apprécié en passant, merci pour le temps que tu consacres à m'aider !

Discussions similaires

  1. Import fichier CSV
    Par oki972 dans le forum SQLite
    Réponses: 5
    Dernier message: 08/10/2007, 21h58
  2. [Pb Importation fichier CSV]
    Par Jeremie_Vi dans le forum Access
    Réponses: 2
    Dernier message: 04/05/2007, 07h54
  3. Importation fichier CSV Excel
    Par @lex(is) dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 22/06/2006, 03h16
  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, 16h08
  5. Réponses: 9
    Dernier message: 31/01/2006, 23h42

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