Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Traitement de fichier

Djilow

XLDnaute Junior
Bonjour
Étant novice dans les macro je viens vous demander de l'aide
J'ai un fichier 2000_1.ri contenant des infos de ce style
J'aimerais créer une macro me permettant de traiter ce fichier et de le mettre au format .csv sous la forme suivante
Code:
/r01sr1/board#01;S:SAVINESSV5_001;;ESC;3AL86661AC;AA02;YP1002085E5;Fri Jul  2 11:09:11 2010
/r01sr1/board#03;S:SAVINESSV5_001;;OMDX8100_M_L1_XS_NOSPV;3AL86615AA;AF01;YP1008071D9;Fri Jul  2 11:09:11 2010
Quelqu'un aurait il une idée à me proposer sachant que mon fichier comporte x ligne
Merci d'avance
 

camarchepas

XLDnaute Barbatruc
Re : Traitement de fichier

Bonjour,

Voici un premier fichier pour voir si l'extraction fonctionne correctement,

Si ton retour me confirme la chose , alors l'on regardera pour la mise en forme des infos en Csv
 

Pièces jointes

  • ExtraitTest1.xls
    35.5 KB · Affichages: 75

Djilow

XLDnaute Junior
Re : Traitement de fichier

Bonjour camarchepas
Tout d'abord merci de prendre le temps de regarder mon problème
Ensuite ton fichier me permet bien d'extraire les données dans une cellule
Donc je te confirme que l'extraction fonctionne correctement ^^
Peut-on s'attaquer à la mise en forme ???
 

Cousinhub

XLDnaute Barbatruc
Re : Traitement de fichier

Bonjour,

regarde le code ci-dessous.
rentre le chemin et le nom du fichier (en gras rouge), et essaie...

Code:
Sub lireFichierTexte()
Dim Ligne As String
Dim Tblo(0 To 7)
Application.ScreenUpdating = False
[COLOR="Red"][B]Open "C:\Users\TonNom\Documents\Excel\import fich.txt"[/B][/COLOR] For Input As #1
Do While Not EOF(1)
    Line Input #1, Ligne
    If i = 0 Then
        Tblo(7) = Trim(Ligne)
    ElseIf i = 2 Then
        Tblo(1) = Trim(Left(Ligne, InStr(1, Ligne, ":ne") - 1))
    ElseIf Left(Ligne, 10) = "Board User" Then
        Tblo(0) = "/" & Trim(Right(Ligne, Len(Ligne) - InStr(1, Ligne, ":")))
    ElseIf Left(Ligne, 14) = "Board Location" Then
        Tblo(2) = Trim(Right(Ligne, Len(Ligne) - InStr(1, Ligne, ":")))
    ElseIf Left(Ligne, 10) = "Board Type" Then
        Tblo(3) = Trim(Right(Ligne, Len(Ligne) - InStr(1, Ligne, ":")))
    ElseIf Left(Ligne, 9) = "Unit Part" Then
        Tblo(4) = Left(Trim(Right(Ligne, Len(Ligne) - InStr(1, Ligne, ":"))), 10)
        Tblo(5) = Trim(Right(Ligne, 4))
    ElseIf Left(Ligne, 6) = "Serial" Then
        Tblo(6) = Trim(Right(Ligne, Len(Ligne) - InStr(1, Ligne, ":")))
        [A65000].End(xlUp)(2) = Join(Tblo, ";")
    End If
i = i + 1
Loop
Close #1
Columns("A").AutoFit
End Sub

Peut-être.....
 
Dernière édition:

camarchepas

XLDnaute Barbatruc
Re : Traitement de fichier

Bonjour Djilow et bhbh,

J'avais pas vu ta réponse Bhbh,

Voici donc la suite du traitement selon ma vision,
Vérifies si le Csv te conviens.
si ok , il faudra peut être voir pour traiter en masse car je pense que tu as plus d'un fichier à traiter ...
 

Pièces jointes

  • 2000_1.zip
    477 bytes · Affichages: 47
  • ExtraitTest2.xls
    44.5 KB · Affichages: 76
Dernière édition:

Djilow

XLDnaute Junior
Re : Traitement de fichier

Bonjour camarchepas
Dans ton fichier ExtraitTest2.xls il semble y avoir un petit soucis
Lorsque je l'exécute il trouve une erreur à cette ligne
Code:
Windows("ExtraitTest1.xls").Activate
J'ai remplacé par
Code:
Windows("ExtraitTest1.xls").Activate
Sa semble fonctionner. En revanche il me rajoute des espaces dans certaines cellule, saurais-tu pourquoi ?
Et puis comme tu l'a bien déduit il faudrait que le traitement puisse se faire en masse. En gros dans un dossier j'ai x fichiers .ri avec x nombre de ligne
En tout cas merci pour les réponses apportés et désolé pour le retard de mon coté
 

Cousinhub

XLDnaute Barbatruc
Re : Traitement de fichier

Bonjour,

Je te propose de mettre ton fichier "2000_1.ri" dans le même répertoire que ton fichier Excel comportant la macro.

et tu modifies la ligne d'Open comme ceci :

Code:
Open ThisWorkbook.Path & "\2000_1.ri" For Input As #1

Pour voir...
 

Cousinhub

XLDnaute Barbatruc
Re : Traitement de fichier

Re-,

Non, mon code n'enregistre rien....

Il ouvre en "virtuel" le fichier "2000_1.ri", lis les données, les traite, et copie selon tes souhaits les informations dans les cellules les unes en dessous des autres...

Est-ce que ton fichier comportant mon code est vide?

Je te propose de faire ceci :

Créé un nouveau classeur
Alt + F11 (tu es sous VBE), Insertion/Module, et colle mon code dans ce module

Déroule le code, et normalement, dans la Feuille 1 tu auras tes données...
 

Djilow

XLDnaute Junior
Re : Traitement de fichier

Je viens de faire comme tu me l'a conseillé et ton code renvoi bien mes données traitées et séparées par des ;
En rajoutant cette ligne j'enregistre ton traitement dans un fichier directement au format .csv
Code:
ActiveWorkbook.SaveAs Filename:="C:\test.csv", FileFormat:=xlCSV, CreateBackup:=False
Par contre serait-il possible que la macro fasse le traitement sur une multitude de fichiers ?
 

Cousinhub

XLDnaute Barbatruc
Re : Traitement de fichier

Re-,

De la précision de la demande dépend la précision de la réponse....

Dans ta question initiale, tu commences ton fichier ainsi :


et ton fichier réel donne ceci :


Euh, on fait quoi?

Mon code était développé pour ta question initiale....
 

Djilow

XLDnaute Junior
Re : Traitement de fichier

Alors je suis désolé pour l'erreur que j'ai du faire lors du copier/coller initial
Tout mes fichiers .ri sont semblables à celui que je viens de mettre en pièce jointe dans le message précédent.
Par contre chaque fichier est plus ou moins long, ils ne sont pas tous identiques (ils ne répertorient pas tous le même nombre de données, certains équipements possèdent beaucoup de cartes tandis que d'autres en ont peu)
Désolé pour la perte de temps...
 

Cousinhub

XLDnaute Barbatruc
Re : Traitement de fichier

Re-,

Ben, va falloir attendre un peu, maintenant....

Quand tu dis :

ls ne répertorient pas tous le même nombre de données

Tu parles des chapitres?

Mais ils ont tous ce même type de chapitre? (même nombre de lignes, mêmes début de lignes...)

 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…