Recopier en boucle les infos dans *.txt sur excel

fred8080 Messages postés 6 Statut Membre -  
fred8080 Messages postés 6 Statut Membre -
Bonjour à tous,

Je suis débutant en macro sur excel, pourriez-vous m'aider à compléter ceci svp:
J'ai besoin de récupérer des informations qui sont sur plusieurs fichiers *.txt
Ces fichiers *.txt sont tous dans un même répertoire (des centaines...)
et sont tous de formes identiques (les positions des données à extraire sont identiques)
J'aimerais récupérer 9 informations dans chacun de ces fichiers *.txt (non pas l'intégralité du fichier)

Les différentes étapes que je fais pour l'instant "à la main":
Depuis le fichier excel "exemple.xls" dont je veux recopier les infos:
1- Ouvrir un fichier *.txt, avec les options de préformatage (dont le séparateur = espace)
2- Recopier les infos de chacune des 9 cellules (A-B-C-D-E-F-G-H-I) du fichier "monfichier.txt"
dans mon fichier excel "exemple.xls" sur une même ligne (voir image)"
3- Fermer le fichier *.txt une fois la copie terminée puis ouvrir le suivant

Chaque fichier *.txt est recopié sur une seule ligne, le fichier *.txt suivant sur la ligne n+1
et ainsi de suite jusqu'au dernier fichier du répertoire.

Merci beaucoup à tous.



11 réponses

  1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    et si ça convient merci de le signaler sur les autres forums.
    En général poster sur plusieurs forum sans attendre 24-48h sans réponse est mal vu...
    Ca ne fait pas plaisir quand on passe 1/2h sur un fichier et qu'on s'aperçoit que c'est pour rien car déjà résolu ailleurs.
    eric
    1
  2. Frenchie83 Messages postés 2254 Statut Membre 339
     
    Bonsoir
    Après réflexion, voici une autre version plus pratique que la précédente (dans la première version, il fallait remplir manuellement la liste des fichiers à traiter dans la colonne C de la feuille "Liste") Inconvénient, si la liste est très longue, ce sera vite fastidieux, dans cette nouvelle version, le programme va chercher directement tous les fichiers du répertoire sélectionné (colonne B de la feuille "Liste"). Avantage, plus simple d'utilisation, à condition toutefois que dans le répertoire en question, il n'y ait que les fichiers à traiter et rien d'autre, sinon utilisez la première version.
    https://www.cjoint.com/c/EGzvasRcXxw
    Cdlt
    0
  3. fred8080 Messages postés 6 Statut Membre
     
    Bonjour,

    merci beaucoup de vos réponses,
    mais je n'arrive pas à ouvrir les fichier .xlsm

    cordialement,
    0
    1. Frenchie83 Messages postés 2254 Statut Membre 339
       
      Bonjour
      Quand vous êtes sur Cjoint,
      -Clic droit sur le lien proposé
      -sélectionnez: Enregistrer la cible du lien sous..

      cdlt
      0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. Maurice
     
    Boujour

    deja voila une macro pour lister les fichiers Txt
    Sub ChoixDossierS()
       With Application.FileDialog(msoFileDialogFolderPicker)
          .InitialFileName = ActiveWorkbook.Path & "\"
          .Show
             If .SelectedItems.Count > 0 Then
                ChoixDossier = .SelectedItems(1)
                BoucleFichiers ChoixDossier & "\"
             Else
                ChoixDossier = ""
             End If
       End With
    End Sub
    
    Sub BoucleFichiers(Chemin)
    Range("A2:A" & Rows.Count).ClearContents
    'Boucle sur tous les fichiers txt du répertoire.
    Fichier = Dir(Chemin & "*.txt")
       L = 2
          Do While Len(Fichier) > 0
              Range("A" & L).Value = Chemin & Fichier
              L = L + 1
              Fichier = Dir()
          Loop
    End Sub
    

    A+
    Maurice
    0
  6. fred8080 Messages postés 6 Statut Membre
     
    Bonjour à tous,

    Voici un code proposé par ""gmb"" que je le remercie grandement.
    Ce code répond bien à ma demande.
    Je vous le partage ici pour avoir vos avis.

    "Option Explicit

    Dim chemin, nomFichier, f, classeur, i, lgn, adrOr, flag

    Sub Importer()

    Application.ScreenUpdating = False
    If flag = 1 Then
    Range(""A1"").CurrentRegion.Offset(1, 0).ClearContents
    End If
    chemin = ThisWorkbook.Path & ""\""
    nomFichier = Dir(chemin & ""*.*"")
    Do While nomFichier <> """"
    Set f = ActiveSheet
    lgn = f.Range(""A1"").CurrentRegion.Rows.Count + 1
    If nomFichier <> ThisWorkbook.Name Then
    Set classeur = Workbooks.Open(chemin & nomFichier)
    For i = 1 To 9
    adrOr = Choose(i, ""$B$1"", ""$C$1"", ""$B$5"", ""$E$5"", ""$B$9"", ""$E$9"", ""$C$13"", ""$D$13"", ""$E$13"")
    f.Cells(lgn, i).Value = Range(adrOr)
    Next i
    classeur.Close False
    End If
    nomFichier = Dir
    Loop
    ActiveSheet.Range(""$A$1"").CurrentRegion.RemoveDuplicates Columns:=Array(2, 3), Header:=xlYes
    End Sub"

    ___________________
    mes données sur txt:

    "112322 A B blabla bla
    blabla bla

    blabla bla
    FRA C ey 1234 D

    blabla blablabla blablabla blablabla blablabla bla
    12 E 22 33 F

    blabla bla

    020 12345678 G H I

    blabla bla

    blabla blablabla bla
    "
    0
  7. Frenchie83 Messages postés 2254 Statut Membre 339
     
    Bonjour
    Pourquoi demander notre avis puisque ça vous convient?
    Juste une petite remarque, dans la proposition que j'avais faite(post 3), je prenais les fichiers texte à l'état brut et faisait la mise en forme dans la foulée avant traitement. Dans la réponse de gmb, le prélèvement des données se fait directement dans des fichiers déjà convertis,
    Question: A quel moment et par QUI les fichiers texte sont convertis au format Excel?.
    Dans la proposition de gmb, le fichier de récupération des données et les fichiers texte se trouvent dans le même répertoire, alors que dans ma proposition, le fichier de récupération des données pouvait être dans un répertoire différent de celui des fichiers texte, il suffisait de mettre le chemin des fichiers texte dans la feuille "Liste" en B2 et le programme allait chercher les fichiers et les traitait un à un (il ajoutait le noms des fichiers texte en colonne C de la "Liste").
    Relisez le Post 2 d'Eriic avant de mettre en RESOLU
    Bonne journée
    Cdlt
    0
  8. fred8080 Messages postés 6 Statut Membre
     
    Bonjour,

    Je disais que ce code me convenais pour l'exemple de txt ci dessus.

    Je suis encore en cours de test pour l'appliquer en
    situation réelle.
    Pour répondre à vos questions:

    1- Le fichier source est un pdf (c'est un programme interne de l'entreprise qui extrait ce fichier: composé d'image et de text, son formatage est toujours identique)
    2- Je l'enregistre sous forme .txt pour ne travailler que sur du text (y- a t'il un batch qui peut faire automatiquement cela sur tout un répertoire ?)
    => ou tout simplement peut-on travailler directement
    sur le pdf ??

    Pour ce qui est la technique de traitement de l'info,
    je n'y connais pas grand chose.
    Les fichiers sont dans un même répertoire, donc le code statique de GMB convient.

    Pour info: je n'ai pas encore testé vos 2 tests car je suis sous excel 2002 qui ne prend pas en charge .xlsm
    Je vais installer une nouvelle version d'excel pour tester vos codes.

    Cependant en changeant le contenu du text, il ne se passe rien (aucun chiffre n'est copié):

    "1 2 3 4 5 6 7 8 9
    11 12 13 14 15 16 17 18 19
    21 22 23 24 25 26 27 28 29
    31 32 33 34 35 36 37 38 39
    41 42 43 44 45 46 47 48 49
    51 52 53 54 55 56 57 58 59
    61 62 63 64 65 66 67 68 69
    71 72 73 74 75 76 77 78 79
    81 82 83 84 85 86 87 88 89
    91 92 93 94 95 96 97 98 99
    1 2 3 4 5 6 7 8 9
    11 12 13 14 15 16 17 18 19
    21 22 23 24 25 26 27 28 29
    31 32 33 34 35 36 37 38 39
    41 42 43 44 45 46 47 48 49
    51 52 53 54 55 56 57 58 59
    61 62 63 64 65 66 67 68 69
    71 72 73 74 75 76 77 78 79
    81 82 83 84 85 86 87 88 89
    91 92 93 94 95 96 97 98 99"

    Faut-il changer certains paramètres ?

    Merci à tous.
    Cordialement
    0
  9. Frenchie83 Messages postés 2254 Statut Membre 339
     
    Bonjour
    je n'ai pas encore testé vos 2 tests car je suis sous excel 2002 il fallait le dire, je vous l'aurai envoyé au bon format, Revoici le fichier enregistré en .xls
    https://www.cjoint.com/c/EGCc23dxyw1

    Je vais installer une nouvelle version d'excel pour tester vos codes. .Sur les 2 fichiers envoyés précédemment, ne prenez que le dernier (vous n'avez qu'à mettre dans la feuille "Liste" le chemin ou se trouve les fichiers.txt , le nom du lecteur en cellule A2 et le nom du répertoire dans la cellule B2 , le programme ira chercher chaque fichier.txt, même fonctionnement que gmb), ei il remplira la colonne C avec tous les noms des fichiers qu'il aura traité.

    Cependant en changeant le contenu du text, il ne se passe rien (aucun chiffre n'est copié) ,Comment avez-vous fait puisque vous n'aviez pas la bonne version d'excel?
    Pour ma part, j'ai refait les essais avec votre tableau , et ça fonctionne parfaitement. Avez-vous mis le chemin complet dans la feuille "Liste"?
    l'avez-vous bien enregistrer au format.txt.
    Je vous repose la question: Dans la réponse de gmb, le prélèvement des données se fait directement dans des fichiers déjà convertis,
    Question: A quel moment et par QUI les fichiers texte sont convertis au format Excel?.



    Les fichiers sont dans un même répertoire et Pour ce qui est la technique de traitement de l'info,
    je n'y connais pas grand chose.

    Si j'ai pris soin de mettre le fichier programme dans un répertoire autre que que celui des fichiers à traiter, c'est que, comme on dit "on mélange pas les torchons et les serviettes", le répertoire contenant les fichiers.txt à traiter, ne doit contenir que ça et rien d'autre. Quand vous recevez vos nouveaux fichiers, n'effacez-vous pas tous les anciens? si le programme est dans le même répertoire, il y a de fortes chances qu'il passe à la trappe lui aussi (Ce sont des situations que j'ai vu maintes fois). Ce n'est qu'une question de logique et d'organisation. Maintenant, libre à vous de suivre mes conseils, ils sont gratuits mais non dénués de bon sens.
    Je vous souhaite une bonne journée.
    Cdlt
    0
  10. fred8080 Messages postés 6 Statut Membre
     
    Bonjour à tous

    Votre code fonctionne à merveille !
    Merci beaucoup Frenchie83

    Les tests ci-dessus me permettent de comprendre un peu mieux comment fonctionnent les macros.

    Maintenant, je vais passer aux données réelles.
    J'ai ajouté une 3ème feuille dans votre fichier excel
    où je détail toute ma réflexion.

    https://www.cjoint.com/c/EGDqnJQDwD4

    Bonne journée à tous.
    Cordialement
    0
  11. fred8080 Messages postés 6 Statut Membre
     
    Bonjour à tous,

    J'ai ajouté le fichier source dans le 4ème onglet du fichier de Frenchie83, si vous voulez faire des vrais tests.

    En ouvrant le fichier source qui est au format pdf,
    je sélectionne tout et je copie tout sur une feuille excel.
    (je fais toutes ces opérations "à la main")

    Les positionnements des données sont identiques sur tous les fichiers testés.

    Maintenant, je n'utilise plus les fichiers en txt car le copier coller depuis un pdf n'est pas identique.

    https://www.cjoint.com/c/EGEo1UmzBx4

    Je vous remercie beaucoup
    Et bonne journée.
    0