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 :

[VBA-E] Import de fichier txt multiple


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 56
    Points : 28
    Points
    28
    Par défaut [VBA-E] Import de fichier txt multiple
    Bonjour,

    J'ai lu les differents messages du forum traitant du sujet, et j'ai essayer d'ecrire une macro pour importer "n" fichiers textes depuis un repertoire précis, séparateur ",", et un fichier texte par ligne.

    Pour l'index de ligne, j'utilise une cellule qui contient l'index de la ligne vide, valeur que j'augmente de 1 à chaque importation.

    Seulement étant débutant en VBA je n'arrive pas a faire fonctionner le code car je ne comprends pas exactement chaque instructions

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub CommandButton1_Click()
    Dim fic As String
    Dim CelVide As Integer
    CelVide = 1
    fic = Dir("C:\text\*.txt")
    Do Until fic = ""
        CelVide = CelVide + 1
        ImportText fic, Cells(CelVide, 1)
        fic = Dir
    Loop
     
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Sub ImportText(FileName As String, PosImport As Range)
    Dim QT As QueryTable
    Set QT = ActiveSheet.QueryTables.Add(Connection:="TEXT;" & FileName, Destination:=PosImport)
    With QT
        .TextFileSemicolonDelimiter = True
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .Refresh
     
    End With
    End Sub
    Bon, ça ne fonctionne pas ^^ Si quelqu'un pouvais m'aider a debboger ce code? merci!

  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
    Points : 15 543
    Points
    15 543
    Par défaut
    Juste quelques précisions
    Tu n'as qu'une ligne dans tes fichiers texte ?
    Tu veux mettre tout le contenu de chaque fichier texte dans une seule cellule (une cellule par fichier texte) ?
    Tu dis
    A+

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 56
    Points : 28
    Points
    28
    Par défaut
    Oui une seule ligne
    Non, une donnée par cellule. Le code qui delimite les donnees fonctionne correctement.

    1 fichier txt = 1 ligne txt = 1 ligne excel = n colonnes.

  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
    Points : 15 543
    Points
    15 543
    Par défaut
    Je vais te donner une solution qui n'est pas la tienne mais quel est le problème de ton code ? Toute la ligne se retrouve dans une cellule, avec ses ";" ?
    A tout'

    PS - pour la première ligne, tu me diras ce qui se passe

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 56
    Points : 28
    Points
    28
    Par défaut
    Non c'est juste qu'il ne fonctionne pas xD Probleme de logique, de syntaxe, je ne sais pas mais c'est pas correct. J'arrive juste a importer UN fichier txt dont je connais le nom. Le reste je sais pas faire...

  6. #6
    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
    Points : 15 543
    Points
    15 543
    Par défaut
    Comme je t'ai dit, je ne reprends pas ta solution qui me paraît lourde pour des fichier ne comportant qu'une ligne. Si cela ne t'ennuie pas de tester ça, je pourrai t'aider en cas de pb. Je n'ai pas encore compris si ta ligne, dans le fichier texte, avaient plusieurs données séparées par un ";" (semicolon) car dans ton code, tu mets .TextFileSemicolonDelimiter = True et que tu colles la ligne dans une seule cellule.
    Tu me diras
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub CommandButton1_Click()
    Dim fic As String
    Dim CelVide As Integer
        CelVide = 1
        fic = Dir("C:\text\*.txt")
        Do Until fic = ""
            CelVide = CelVide + 1
            Open fic For Input As #1
            Line Input #1, LaLigne
            Cells(CelVide, 1) = LaLigne
            Close
            fic = Dir
        Loop
    End Sub
    A+

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 56
    Points : 28
    Points
    28
    Par défaut
    Non en fait c'etait juste la premiere cellule, celle depuis laquelle la ligne devait etre importée dans des cellules séparées.

    Merci pour ton code. Cependant il me dit qu'il ne trouve pas les fichiers au moment de l'ouverture. (Open fic For Input As #1) :<

  8. #8
    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
    Points : 15 543
    Points
    15 543
    Par défaut
    Oui, j'ai oublié d'ajouter le chemin, ajoute-le.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Do Until fic = ""
            Fic = "C:\text\" & Fic
            CelVide = CelVide + 1
            Open fic For Input As #1
    A+

  9. #9
    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
    Points : 15 543
    Points
    15 543
    Par défaut
    Je viens de relire ta réponse. Tu vas devoir modifier mon code pour tenir compte des séparateurs (j'ai enfin compris). Je reprends toute la sub pour éviter les erreurs
    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
    Private Sub CommandButton1_Click()
    Dim fic As String
    Dim CelVide As Integer
    Dim Tableau
        CelVide = 1
        fic = Dir("C:\text\*.txt")
        Do Until fic = ""
            CelVide = CelVide + 1
            Fic = "C:\text\" & Fic
            Open fic For Input As #1
            Line Input #1, LaLigne
            Close
            Tableau = Spit(LaLigne,";")
            For i = 1 to Ubound(Tableau)
                 Cells(CelVide, i+1) = Tableau(i)
            Next
            fic = Dir
        Loop
    End Sub
    Tu dis
    A+

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 56
    Points : 28
    Points
    28
    Par défaut
    D'accord! Merci beaucoup pour ton aide et pour le temps que tu prends pour me répondre

    J'ai copier/coller ton code, et il me surligne Spit en me disans qu'il y aune Sub ou une Fonction qui n'est pas définie.

    Pitit Up pour ouskel'n'or, j'ai chercher sur le net des infos pouvant me permettre de debugger ton code mais ça n'a rien donné de fructueux.

  11. #11
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    quelle est la version d'excel utilisée...?

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 56
    Points : 28
    Points
    28
    Par défaut
    2003

  13. #13
    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
    Points : 15 543
    Points
    15 543
    Par défaut
    Oui, c'est split. tu as spit ?
    Ben oui, y'a spit dans mon code (!) Tu corriges, c'est split
    A+

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 56
    Points : 28
    Points
    28
    Par défaut
    Merciii c'est parfait!
    Enfin presque! Tout petit détails mais existe il un moyen de ne pas importer les guillemets de mes chaines de caractères?

    Mon fichier texte prend cette forme :

    "blabla","blablabla",0,"blabla"

    J'aimerais Importer

    blabla --- blablabla --- 0 --- blabla

    Bon sinon tout le reste fonctionne, merci encore!

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 553
    Points : 566
    Points
    566
    Par défaut
    tu rempalcece bout de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 1 to Ubound(Tableau)
                 Cells(CelVide, i+1) = Tableau(i)
            Next
    par celui-ci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 1 to Ubound(Tableau)
                 Cells(CelVide, i+1) = Replace(Tableau(i),chr(34),"")
            Next
    Ce code va remplacer les " par rien du tout

  16. #16
    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
    Points : 15 543
    Points
    15 543
    Par défaut
    Pour éviter les guillemets, tes fichiers textes doit être renseignés avec print et non white ... au cas où ce serait toi qui les renseignes
    Ainsi tu n'auras rien à remplacer
    A+

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 56
    Points : 28
    Points
    28
    Par défaut
    Ok merci

    Une derniere question c'est possible? ^o^

    J'ai modifié le code pour récuperer le chemin des fichiers depuis une cellule et l'index de ligne depuis une autre (de façon à pouvoir réimporter une fois suivante à la suite du classeur)

    L'index de ligne fonctionne parfaitement mais pas le chemin de fichier...
    Est ce que je m'y prends mal ou est ce que le chemin doit être d'une certaine forme dans la cellule?


    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
    Private Sub CommandButton1_Click()
    Dim fic As String
    Dim Dirfic As String
    Dim CelVide As Integer
    Dim Tableau
        Dirfic = Cells(1, 5).Value
        CelVide = Cells(1, 2).Value
        fic = Dir(Dirfic & "*.txt")
        Do Until fic = ""
            CelVide = CelVide + 1
            fic = Dirfic & fic
            Open fic For Input As #1
            Line Input #1, LaLigne
            Close
            Tableau = Split(LaLigne, ";")
            For i = 0 To UBound(Tableau)
                 Cells(CelVide, i + 1) = Tableau(i)
            Next
            fic = Dir
        Loop
        Cells(1, 2).Value = CelVide
        MsgBox "Les fichiers ont été importés. Veuillez les supprimer avant une nouvelle importation."
    End Sub

  18. #18
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 56
    Points : 28
    Points
    28
    Par défaut
    De même, au sujet des guillements. En fait comme j'ai déja une centaines de fichiers txt crées à importer, il me faut trouver une façon de les supprimer :/

  19. #19
    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
    Points : 15 543
    Points
    15 543
    Par défaut
    Deux choses
    pour connaître la dernière ligne de ton fichier, ou plutôt la première ligne vide, tu peux te dispenser de l'index
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        PremièreLigneVide = Range("A1").CurrentRegion.End(xlDown).Row + 1
        PremièreLigneVide = Range("A1").End(xlDown).Row + 1
        PremièreLigneVide = Range("A1").SpecialCells(xlCellTypeLastCell).Row + 1
        PremièreLigneVide = Range("A65535").End(xlUp).Row + 1
    avec une préférence pour la ligne en bleu depuis qu'AlainTech l'a proposée

    Pour les guillemets, je te propose d'essayer ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            Tableau = Split(LaLigne, """;""")
    Tu dis
    A+

    PS - Tu risque d'avoir un guillemet sur la première et la dernière donnée de la ligne
    Tu peux utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LaLigne = Replace(LaLigne,chr(34),"")
    avant le split

  20. #20
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 56
    Points : 28
    Points
    28
    Par défaut
    Merci pour tout ouskel'n'or! C'est enfin terminé! ^^

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

Discussions similaires

  1. [AC-2007] importer un fichier .txt vers ma table access en vba ?
    Par Debutant10 dans le forum VBA Access
    Réponses: 13
    Dernier message: 05/11/2011, 17h38
  2. [VBA-excel] import de fichier txt sans délimiteur de texte
    Par VBBBA dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 17/01/2008, 05h49
  3. Import de fichiers txt en VBA avec paramètres automodulabes
    Par guiguisb dans le forum VBA Access
    Réponses: 0
    Dernier message: 10/09/2007, 11h20
  4. probleme d'import de fichier txt avec des tab
    Par lecureuil dans le forum Access
    Réponses: 4
    Dernier message: 23/08/2005, 19h22
  5. .bat pour l'import de fichier txt dans postgres
    Par pseudomh dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 25/03/2005, 00h02

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