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

Excel Discussion :

Copier le contenu de plusieurs fichiers texte sur une feuille excel [XL-2010]


Sujet :

Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 12
    Points : 6
    Points
    6
    Par défaut Copier le contenu de plusieurs fichiers texte sur une feuille excel
    Bonjour,

    Je souhaite copier plusieurs fichiers texte qui sont dans un répertoire: prendre tous les fichiers test1_... (test1_08/01/2016, test1_09/01/2016, ...) et les coller dans l'onglet test1. Dans mon répertoire il y a aussi d'autres fichiers avec des noms différents.
    J'ai ce code :

    Sub Macrotest1()
    '
    ' Charge test1
    '

    Dim Fichier As String, Chemin As String
    Dim i As Long

    Sheets("test1").Activate
    Chemin = "...\test "

    Fichier = Dir(Chemin & "\test1*.txt")

    'Boucle sur les fichiers
    Do While Fichier <> ""


    i = Range("A65536").End(xlUp).Row + 1
    ImportText Chemin & "\" & Fichier, Cells(i, 1)

    Fichier = Dir
    DoEvents
    Loop
    End Sub

    Sub ImportText(NomFichier As Variant, Cible As Range)
    Dim QT As QueryTable

    Set QT = ActiveSheet.QueryTables.Add(Connection:="TEXT;" & _
    NomFichier, Destination:=Cible)

    With QT
    'Définit les séparateur de colonnes dans le fichier txt
    .TextFileOtherDelimiter = ";"
    .TextFileSemicolonDelimiter = True
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    .Refresh
    End With
    End Sub


    Il fonctionne et me charge bien tous les fichiers test1 mais lorsque je fais pareil avec d'autres noms de fichiers : (test2) j'ai un message d'erreur 7 : mémoire insuffisante.

    Est ce quelqu'un a déjà rencontré ce type de problème? Je vous remercie de m'aider à trouver une solution.
    Si vous avez aussi une autre solution je prends

  2. #2
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Tu peux essayer de traiter tes fichier comme un import de texte (je n'ai pas testé, il se pourrait donc qu'il y ait du débugage à faire) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub ImportText(NomFichier As String, Cible As Range)
        Dim WBS As Workbook
     
        Set WBS = Workbooks.OpenText Filename:=NomFichier, _
            StartRow:=1, _
            DataType:=xlDelimited, _
            Semicolon:=True, _
            FieldInfo:=Array(1, 1), _
            TrailingMinusNumbers:=True
     
        WBS.Worksheets(1).UsedRange.Copy destination:=Cible
        WBS.Close
    End Sub
    Quelques petits détails qui ne corrige pas ton problème mais qui peuvent t'intéresser.

    Plutôt que d'écrire Range("A65536"), tu devrais plutôt écrire Cells(Rows.Count,1).
    C'est plus portable pour différentes version d'Excel.

    Plutôt que d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim i As Long
    i = Range("A65536").End(xlUp).Row + 1
    ImportText Chemin & "\" & Fichier, Cells(i, 1)
    Il serait plus simple d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim i As Range
    i = Cells(Rows.Count,1).End(xlUp).Offset(1,0)
    ImportText Chemin & "\" & Fichier, i
    Mais ça, c'est juste une question de façon de coder.

  3. #3
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Merci Menhir de t'intéresser à mon problème.
    Le problème avec l'import texte c'est qu'il ne me prend pas tous les fichiers commençant par test1.
    J'ai essayé quand même pour voir ce que ça donne mais j'ai une erreur de variable sur le WBS.

    Pour la méthode de traiter i as Range. Cela me bloque le code et je n'ai plus rien.

  4. #4
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par man12345 Voir le message
    Le problème avec l'import texte c'est qu'il ne me prend pas tous les fichiers commençant par test1.
    Il suffit de les enchainer en mettant le résultat à la suite de la même façon que tu le fais avec tes requêtes de base de données.
    C'est pour ça que je l'ai mis dans ton sous programme sans changer le programme principal.

    J'ai essayé quand même pour voir ce que ça donne mais j'ai une erreur de variable sur le WBS.
    Je t'avais prévenu que ce serait à débugger.
    Visiblement, OpenText n'apprécie pas qu'on essaye de récupérer la référence du fichier qu'il ouvre.
    Il faut donc supprimer le "Set WBS = " de cette ligne et mettre à la suite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set WBS = ActiveWorkbook

  5. #5
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Il suffit de les enchainer en mettant le résultat à la suite de la même façon que tu le fais avec tes requêtes de base de données.
    C'est pour ça que je l'ai mis dans ton sous programme sans changer le programme principal.


    Je t'avais prévenu que ce serait à débugger.
    Visiblement, OpenText n'apprécie pas qu'on essaye de récupérer la référence du fichier qu'il ouvre.
    Il faut donc supprimer le "Set WBS = " de cette ligne et mettre à la suite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set WBS = ActiveWorkbook
    Si je fais ça

    Sub ImportText(NomFichier As String, Cible As Range)
    Dim WBS As Workbook

    Set WBS = ActiveWorkbook Filename:=NomFichier, _
    StartRow:=1, _
    DataType:=xlDelimited, _
    Semicolon:=True, _
    FieldInfo:=Array(1, 1), _
    TrailingMinusNumbers:=True

    WBS.Worksheets(1).UsedRange.Copy destination:=Cible
    WBS.Close
    End Sub

    J'ai une erreur de compil

  6. #6
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Désolé mais je ne vais pas jouer au "pingpong débugage".
    Surtout avec quelqu'un qui ne prend pas la peine de donner les messages d'erreur et la ligne sur laquelle se produit l'erreur.
    En plus, visiblement, tu n'as même pas mis en pratique mon précédent message.

    Je t'ai indiquer un principe pour résoudre ton problème, à toi de faire quelques efforts pour terminer les 10% restant.

  7. #7
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Menhir,

    Si j'ai bien compris ton dernier message, tu me suggère de remplacer

    Set WBS = Workbooks.OpenText

    en

    Set WBS = ActiveWorkbook

    Dis mois si j'ai bien saisi parce que si je fais ça

    J'ai l'erreur ci-dessous
    Nom : Capture.PNG
Affichages : 203
Taille : 6,3 Ko

    Je suis désolé , je suis débutant en vba.

  8. #8
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Non.
    J'ai bien précisé :
    Il faut donc supprimer le "Set WBS = " de cette ligne.
    Ce qui signifie que cette ligne doit commencer par : Workbooks.OpenText ....

    Puis
    et mettre à la suite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set WBS = ActiveWorkbook
    Ce qui signifie que cette ligne doit venir à la suite de la commande OpenText.

    Comme on ne peut pas renseigner la variable WBS directement depuis OpenText comme on le ferait avec un Open, la seconde ligne permet de la renseigner.

  9. #9
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Menhir,

    ça marche! Un des fichiers qui m'indiquait une erreur 7 à l'exécution s'est bien collé dans mon onglet excel. Je vais faire des tests sur le reste et je reviens vers toi.
    Merci beaucoup c'est une belle avancée dans la résolution de mon problème.

  10. #10
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    ça marche merci bcpppp!!!

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/07/2016, 20h34
  2. Réponses: 0
    Dernier message: 14/06/2013, 08h33
  3. Réponses: 20
    Dernier message: 30/08/2012, 14h15
  4. Réponses: 3
    Dernier message: 26/01/2009, 20h31
  5. Réponses: 1
    Dernier message: 18/04/2007, 18h13

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