Extraire données de fichiers .txt
Bonjour,
Voilà mon soucis et malgré maintes recherches et multiples bidouillages, mon niveau de VBA ne me permets pas de trouver une solution à ma question.
Toutes les semaines, je dois analyser environ 300 fichiers .txt et en extraire certaines données pour les traiter ensuite. Je souhaite au final une feuille excel qui me résume les données extraites de tous les fichiers .txt
Chaque fichier .txt correspond un un compteur (le nom du fichier est d'ailleur le n° du compteur que l'on retrouve dans la feuille excel). chaque ligne du fichier reprend les données dans l'ordre date, heure, puis 6 valeurs (qui corresondent à une valeur toutes les 10 minutes). Il arrive que le compteur incrémente une valeur ABS ou une valeur INV (qui correspond à Absent ou Invalide) et je dois exploiter ces valeurs par la suite .
Je vous joints un type de fichier .txt et une feuille excel avec le résultat souhaité (pour rappel 300 fichiers .txt à résumer sur une seule feuille excel).
Merci par avance pour vos réponsent car pour le moment, j'ouvre chaque fichier .txt 1 par 1 et je recherche ces valeurs (ce qui me prends beaucoup trop de temps).
bon alors par ou commencer
je t'ai fais une macro qui va rechercher les ABS et INV qui les copie sur la feuil1, filtre, et copie les donner sur la feuil2
plusieurs recommandation
quand tu ouvrira la classeur 4
va dans vba et change le chemin d’accès du fichier je les ai remplacer par
C:/XXXXX/XXXXXX/XXXX/nom du fichier .txt
ensuite exécute la macro depuis la feuil 1 sinon SURPRISE!!!!!!
et je n'ai pas trop de solution pour ouvrir tout les fichier automatiquement surtout vu les nom qu'il ont
tu peux éventuellement les copier et les renommer avec 1 2 3 4 5 6 7 8 9 10 ce sera plus facile a programmer avec une variable et la ce doit être faisable de faire une boucle et tout faire d'un coup
voila qu'en pense tu
merci pour la réactivité, Cela semble fonctionner sur un fichier. les résultats apparaissent sur la feuille 2 (je les cherchaient sur la feuille 1)
Le soucis c'est de récupérer le nom du fichier .txt pour l'intégrer dans le fichier excel car dans l'objectif d'analyser beaucoup de fichiers .txt, je dois savoir de quel compteur il s'agit.
Merci en tout cas c'est déjà un grand pas en avant. Je dois m'absenter je répondrai mardi à vos nouveaux messages.
bonjour,
NB:voila c'est ma solution, mais je suis loin d'etre le plus fort du forum et qq un a peux etre une meilleur solution
en faite si tes fichiers avais comme nom 1.txt 2.txt .......etc
il est possible de mettre un compteur dans la macro avec une boucle qui a chaque boucle le compteur s'incrémente de 1
donc première boucle il appel le fichier 1 fait le traitement et ferme le fichier
puis appel a la 2 eme boucle le fichier 2 ...........ect
voila mais ça t'oblige a renommer tout tes fichier un peux compliquer
a moins que le nom de tes fichier soit logique c'est a dire
0000181834_14350083_1.txt
0000181834_14350083-2.txt ...........etc ou une autre logique mais quelque chose qu'on peux calculer avec une incrémentation
voila a mardi
Bonjour,
Spyderpaint ayant déjà proposé un début de solution je ne vais pas tout reprendre du début, par contre si cela peut t'aider Spyderpaint, si jamais tous ses fichiers .txt sont dans le même répertoire, on pourrait les lister dans un onglet à coté grâce à une procédure vba déclenchée par un bouton par exemple avec une boucle du genre :
Private Sub btn_lister_Click()
Dim ext As String, myRep As String
Dim i As Integer
i = 1
myRep = "\\chemin\du\dossier\"
ext = Dir(myRep & "*.txt")
Do While ext <> ""
Range("A" & i).Value = ext
ext = Dir
i = i + 1
Loop
End SubEnsuite il ne te reste qu'a adapter le bout de code que tu as déjà fourni et qui est fonctionnel, pour le faire boucler sur le listing des noms de fichiers de cet onglet, et afficher les résultats des recherches dans l'onglet voulu.
Cordialement.
Edit : tu pourrais même adapter ta procédure directement sur le même bouton, comme cela il lance son fichier, il click, cela lui liste tous ses fichiers, les parcours et lui liste ses données voulues.
Après c'est sur que l'on pourrait se servir de ma procédure qu'une fois pour avoir le listing sur lequel bouclé la recherche, mais en la relancant à chaque fois, cela permet d'avoir automatiquement une liste à jour en cas d'ajout/supression de fichier .txt.
Bonjour à tous,
Tout ceci semble fonctionner à merveille. Merci beaucoup pour votre aide. je vais tester le fichier et je reviendrai vers vous si quelque chose cloche (ce qui ne semble pas être le cas en essayant avec 3 fichiers).
Encore merci, vous me faites gagner beaucoup de temps.
Très cordialement.
-- 14 Juin 2011, 09:30 --
Je reviens vers vous pour vous informer que tout semble fonctionner à merveille à part 2 petits détails :
-1- le format d'affichage de la date est "international" il affiche 05/09/2011 au lieu de 09/05/2011 (je suppose qu'il y a moyen d'automatiser la mise en forme).
-2- En regardant votre macro de plus prêt (car même si je ne suis pas capable de le faire, j'aime comprendre et apprendre), j'ai cru appercevoir une fonction permettant d'effacer les fichiers qui ne contiennent pas les données recherchées. Si tel et bien le cas, cela ne fonctionne pas car tous les noms de fichiers (qu'ils soient vièrge ou contenant des points ABS ou INV) sont listés. Pour 500 fichiers, j'ai donc 500 lignes minimum dans la synthèse.
Par contre, si c'ette fonction n'existe pas dans cette macro, j'ose abuser en vous demandant s'il est possible de ne pas afficher les fichiers qui ne contiennent aucune donnée recherchée (donc de n'afficher dans la synthèse que les fichiers qui contiennent des points ABS et INV).
De toute façon le reste fonctionne très bien et testé avec 500 fichiers environ.
Merci.
Cordialement.
Bonjour,
J'ai une macro à faire un peu dans le même genre:
J'ai un fichier patient (ici: https://www.cjoint.com/c/CFAmP0dJ4hc) dans lequel sont disponibles des données générales (lignes 1 à 14) puis des données numériques: plusieurs volumes sont disponibles (PTV et rectum). Pour chaque volume, il y a deux colonnes: il faut diviser la première colonne par 20, et la deuxième par son maximum. Normalement, le graphique que l'on doit obtenir est disponible ici:
Ce n'était que la partie préalable du problème!
Voilà le plus dur à faire:
- détecter tous les volumes présents (ils peuvent être différents suivant les patients)
- si on détecte PTV: noter la valeur de l'ordonnée à l'abcisse 62.7
- si on détecte rectum: noter la valeur de l'ordonnée à l'abcisse 50 et 60.
En fait, je voudrais qu'en ouvrant la macro, je puisse cliquer sur un bouton qui va chercher le fichier texte à analyser, et qui affiche le diagramme et les différentes valeurs des ordonnées à telles abcisses.
Voilà voilà! C'est peut être un jeu d'enfant pour vous , mais pour moi c'est la cata!
Merci d'avance!!!!
Marguerite
au fait, le nom du patient est évidemment faux!
Bonjour
Juste un avis
Tu aurais du ouvrir un autre sujet (en faisant référence à celui-ci si tu voulais)
Pas beaucoup de personnes s'intéressent à un sujet très vieux (2 ans)
Moi je ne t'aiderai pas (ce n'est pas parce que je ne veux pas mais parce que je ne sais pas ( les graphiques -
Merci pour le conseil!^^
Et si tu oubliais le graphique.....
En fait j'ai repris un code qu'on m'a donné, ici :
que j'applique à ce fichier texte: https://www.cjoint.com/c/CFAmP0dJ4hc
Mais je n'ai que Trial et Imagerie
Or je voudrais les lignes suivantes!!!!!!
Alors j'essaie de faire Ar(2), mais ça ne marche pas. Je ne comprends pas pourquoi on ne peut faire que Ar(0) et Ar(1).
Merci
avec le lien du code, c'est mieux:
Bonjour
Si tu faisais un exemple de ce que tu veux , peut-être pour la personne qui te répondra cela sera plus facile
Dans le fichier j'ai vu ça
Roi: PTV
Trial: +IMAGERIE
Roi: PTV-RECTUM
Trial: +IMAGERIE
Roi: rectum
Trial: +IMAGERIE
Roi: tfd
Trial: +IMAGERIE
Roi: tfg
Trial: +IMAGERIE
Roi: vessie
Trial: +IMAGERIE
Mais comme je ne sais pas quoi en faire