Manipulation de fichier txt

Salut,

Question simple : Je dois transposer un fichier txt en Excel par une macro qui lit chaque ligne une par une et j'aimerais afficher une barre de progression. Comment compter le nombre de lignes du fichier pour déterminer combien il en reste à traiter ?

Merci d'avance

Manu

Bonjour,

C'est possible de plusieurs manières mais, pourquoi n'utilisez-vous pas powerQuery ? l'import de fichiers txt/csv est instantané.

Mof fichier Texte est une liste de composants installés sur un avion. Chaque composant constitue une rubrique entre 4 (si aucun composant n'est installé) et 8 lignes (en fonction des potentiels applicables au composant en question).

Chaque ligne contient de 2 à 20 données, différentes sur chacune (du style pour la première ligne 1ère donnée du caractère 1 à 4, 2ème du caractère 5 à 14, 3ème du caractère 15 à 18 et pour la deuxième ligne 1ère donnée de 34e au 47e caractères, 2e du 48 au 53e caractère, ...) avec potentiellement des espaces au début et à la fin de chaque donnée, il n'y a pas de marqueur distinctif qui sépare chaque donnée comme une tabulation, un caractère particulier ou un nombre d'espaces donné).

PowerQuery importe les lignes dans dans un tableau à une seule colonne, qu'il faudrait que je reprenne ligne par ligne pour en extraire chaque donnée et la reporter dans une cellule individuelle, alors autant le faire directement à partir du fichier txt (et accessoirement j'ai eu la flemme de réécrire cette partie, je l'ai récupérée d'un fichier existant).

Le fichier txt est généré par un AS400, autant dire qu'à l'époque où ça a été créé l'idée d'importer ça dans Excel n'a effleuré l'esprit de personne, le besoin n'est venu qu'il y a 3/4 ans. Et comme le système va être remplacé d'ici quelques années il ne faut pas compter sur une mise à jour, à supposer que quelqu'un sache encore faire. Au final ça marche pas trop mal, ça traite les 10 000 et quelques lignes du fichier txt en 4 ou 5 secondes.

Je voudrais juste améliorer un peu l'ergonomie en proposant une Progressbar. C'est du chipotage.

Manu

RE

Mon fichier texte comprend des lignes avec jusqu'à 15 données différentes (du style 1ère donnée du caractère 1 à 4, 2ème du caractère 5 à 14, 3ème du caractère 15 à 18, ... avec potentiellement des espaces au début et à la fin de chaque donnée, il n'y a pas de marqueur distinctif qui sépare chaque donnée comme une tabulation, un caractère particulier ou un nombre d'espaces donné).

PowerQuery importe les lignes dans dans un tableau à une seule colonne, qu'il faudrait que je reprenne ligne par ligne pour en extraire chaque donnée séparément et la reporter dans une cellule individuelle, alors autant le faire directement à partir du fichier txt (et accessoirement j'ai eu la flemme de réécrire cette partie, je l'ai récupérée d'un fichier existant).

Il est très facile dans PowerQuery de découper selon une séquence précise de nombre de caractères

Si tu ne sais pas le faire joins un fichier pour qu'on t'explique

Exemple basique

image

Bonjour,

Bien compris, en effet VBA semble bien plus adapté dans votre cas.

Ci-joint un bout de code que j'ai trouvé sur internet. Fonctionne bien je l'ai testé sur quelques fichiers. Pensez à remplacer l'adresse dans les paramètres de OpenTextFile.

Sub a()
Const ForReading = 1
Dim objFSO, objTextFile
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile("C:\fichier.txt", ForReading)
objTextFile.ReadAll
Debug.Print "Number of lines: " & objTextFile.Line

End Sub

RE

Bien compris, en effet VBA semble bien plus adapté dans votre cas.

Non car PowerQuery fait cela très bien et très simplement...

Ahahah, je dois bien avouer que mes connaissances en PQ sont plus que sommaires ! Je serai sincèrement impressionné si PQ permet de traiter une requête aussi variable, car pour sur c'est bien + efficace que le VBA.

Après je comprends l'auteur qui à déjà, il me semble, sa macro écrite et fonctionne et qui ne cherche qu'à ajouter une barre de chargement, d'où ma proposition.

Mais pour une approche plus durable je pencherai également vers PQ, si bien sûr c'est possible (j'attends de voir l'implémentation ). Bon courage !

Voilà un extract.

Je dois extraire les données Immat, Date, Hours et Cycles de l'entête dans l'entête de mon extraction.

Ensuite pour les 5 premières lignes de chaque bloc situé entre les lignes de tirets je dois extraire toutes les données sur la même ligne Excel, avec les entêtes de colonnes qui vont bien (pour le bloc ACCUMULATED, il doit y avoir les colonnes HOURS NEW, CYCLE NEW, DAYOP NEW, DAYCA NEW, HOURS OHAU, CYCLE OHAU, DAYOP OHAU, DAYCA OHAU, et ainsi de suite, et même chose pour le bloc SPECS VALUES.

Pour la 6ème ligne je dois extraire l'ATA et le MARK NUMBER et pour les 7ème, 8ème et 9ème ligne je dois extraire les données dans une colonne avec les entêtes SOFT TIME HOURS OHAU, SOFT TIME CYCLE OHAU, ....

Et quand il n'y a pas d'équipements installés je dois reporter le RCN, la position, le noun, l'ATA et mettre "Not installed" partout ailleurs.

Et ensuite je dois extraire de cette liste quelques équipements spécifiques selon certains critères (Position, RCN ou Mark number) et les reporter dans un statut séparé.

L'avantage de mon système outre le fait qu'il fonctionne et que je ne vais pas avoir le feu vert pour le refaire, est qu'il fait tout ça en parallèle. Je lis chaque ligne, j'isole et mémorise les données dont j'ai besoin, et quand j'atteins la ligne de tirets je sais que c'est la dernière et je reporte tout ça dans l'extraction et dans le statut quand la pièce est concernée.

Manu

RE

Pour l'instant j'obtiens cela

image

Pas compris comme traiter les lignes en orangé

Voilà ce que je dois obtenir comme Excel

13exemple-sortie.xlsx (32.04 Ko)

Manu

Bonjour

Une solution PowerQuery

La table de paramètres est incomplète car ton unique exemple ne permet pas de repérer tous les champs du résultat attendu

Mais il suffit de compléter ou corriger cette table puis actualiser le tableau de résultats

Le chemin du fichier est aussi à adapter avant d'actualiser

14avions-pq.xlsx (38.18 Ko)
Rechercher des sujets similaires à "manipulation fichier txt"