Recopier en boucle les infos dans *.txt sur excel

Fermé
fred8080 Messages postés 6 Date d'inscription samedi 25 juillet 2015 Statut Membre Dernière intervention 30 juillet 2015 - 25 juil. 2015 à 17:43
fred8080 Messages postés 6 Date d'inscription samedi 25 juillet 2015 Statut Membre Dernière intervention 30 juillet 2015 - 30 juil. 2015 à 17:05
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.





A voir également:

11 réponses

eriiic Messages postés 24597 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 22 septembre 2024 7 236
25 juil. 2015 à 19:45
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
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 338
25 juil. 2015 à 19:19
Bonsoir
Essayez ceci
https://www.cjoint.com/c/EGzrtFSgS5w
Cdlt
0
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 338
25 juil. 2015 à 23:07
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
fred8080 Messages postés 6 Date d'inscription samedi 25 juillet 2015 Statut Membre Dernière intervention 30 juillet 2015
26 juil. 2015 à 08:15
Bonjour,

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

cordialement,
0
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 338
26 juil. 2015 à 08:28
Bonjour
Quand vous êtes sur Cjoint,
-Clic droit sur le lien proposé
-sélectionnez: Enregistrer la cible du lien sous..

cdlt
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
fred8080 Messages postés 6 Date d'inscription samedi 25 juillet 2015 Statut Membre Dernière intervention 30 juillet 2015
27 juil. 2015 à 01:13
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
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 338
27 juil. 2015 à 04:11
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
fred8080 Messages postés 6 Date d'inscription samedi 25 juillet 2015 Statut Membre Dernière intervention 30 juillet 2015
28 juil. 2015 à 01:23
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
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 338
Modifié par Frenchie83 le 28/07/2015 à 06:13
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
fred8080 Messages postés 6 Date d'inscription samedi 25 juillet 2015 Statut Membre Dernière intervention 30 juillet 2015
29 juil. 2015 à 18:20
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
fred8080 Messages postés 6 Date d'inscription samedi 25 juillet 2015 Statut Membre Dernière intervention 30 juillet 2015
30 juil. 2015 à 17:05
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