importer une partie d'un fichier txt

panpan16

XLDnaute Nouveau
Bonjour,

Je suis totalement novice en VBA, cependant, je cherche à importer la fin d'un fichier txt à partir d'une expression spécifique et comme le fichier txt est régulièrement mis à jour, il faudrait que l'importation se mette à jour à chaque clic ou à intervalle régulier.

En pratique, mon fichier txt ressemble à :

"22/02/2011

G1
blabla
blabla
G2
blabla
G3
blabla
blabla




23/02/2011
blabla

G1
blabla
blabla
G2
blabla
G3
blabla
blabla
25/02/2011
blabla
blabla

25/02/2011
blabla
blabla

G1
blabla

G2
blabla
G3
blabla

28/02/2011
blabla
blabla"


Je cherche à importer le texte à partir de la dernière occurrence de G3. Au final, dans ma feuille excel, je cherche à n'importer dans ce cas que le 5 dernières lignes, soit

"G3
blabla

28/02/2011
blabla
blabla"

Si quelqun à la solution, je suis preneur. En attendant, en parcourant le forum et quelques autres sites, j'ai trouvé une solution qui pourrait me convenir consistant à importer les X derniers caractères du fichier txt :

Dim file_name As String
Dim file_length As Long
Dim fnum As Integer
Dim bytes() As Byte
Dim txt As String
Dim i As Integer



file_name = ThisWorkbook.Path & "C:\fichier.txt"
file_length = FileLen(file_name)
f2 = 150 'nb de caractères à lire en fin de fichier
f1 = file_length - f2
fnum = FreeFile
Open file_name For Binary As #fnum
ReDim bytes(1 To f2)
Get #fnum, f1 + 1, bytes
Close fnum
' Transfert dans un tableau
For i = 1 To f2
txt = txt & Chr(Format$(bytes(i)))
Next i
a = Split(txt, Chr(10))
For i = 1 To UBound(a)

MsgBox a(i)

Mais je suis incapable d'adapter cet exemple pour afficher les lignes dans ma feuille excel au lieu de la message box. Je pense que cela ne doit pas être trop compliqué mais pour moi c'est mission impossible

Merci, pour votre aide

-panpan
EXCEL 2002 XP
 

panpan16

XLDnaute Nouveau
Re : importer une partie d'un fichier txt

Bonjour,

Me revoilà de bonne heure et de bonne humeur

Je pense à avoir tout fait correctement, mais ca ne fonctionne pas (pour l'instant).

Dim InputData As String, Tableau(), I As Integer, J As Integer, K As Integer
Range("A:A").Clear
Open Worksheets("Feuil2").Range("A1").Value For Input As #1

Do While Not EOF(1)
Line Input #1, InputData
ReDim Preserve Tableau(I)
Tableau(I) = InputData
I = I + 1
Loop
Close #1
For J = UBound(Tableau) To LBound(Tableau) Step -1
If Tableau(J) Like "*G3*" Then Exit For
Next J
If J = -1 Then Exit Sub
For K = J To I - 1


Cells(K - J + 1, 1) = Tableau(K)

Next K
End Sub

Cependant, j'ai une piste. La récupération des fichiers se fait à l'aide de :

Private Sub CommandButton1_Click()
' *** le résultat peut apparaitre dans un message box (voir la syntaxe
' mise en commentaire dans le code) mais je l'ai occulté car, pour cet exemple,
' il y a environ 1 000 fichiers dans c:\. Je me sers donc des cellules Excel

Dim strMessage As String
Dim I As Long
Set fs = Application.FileSearch

With fs
.LookIn = "C:\programme\groupe" ' *** mettre ici le dossier voulu !
.SearchSubFolders = True
.Filename = "*.txt"
If .Execute(SortBy:=msoSortByFileName, _
SortOrder:=msoSortOrderDescending) > 0 Then

For I = 1 To .FoundFiles.Count
Cells(I, 1).Value = .FoundFiles(I)

Next I
'MsgBox strMessage
Else
MsgBox "Il n'y a aucun fichier."
End If
End With

End Sub


En fait, cela fait apparaitre le nom complet des fichiers par "ordre alphabétique inversé". J'ai ajouté la date aux fichiers qui n'en avait pas.

Désormais, j'ai simplement besoin d'importer le dernier fichier (par ordre alphabétique) du dossier qui est toujours le plus récent et dont l'adresse est en A1.

Simplement, je ne sais pas si c'est important mais le nom de certains dossiers comprend des espaces, comme

C:\programme\groupe\RC20110509 J392849493 Apprentissage €.txt
 

JNP

XLDnaute Barbatruc
Re : importer une partie d'un fichier txt

Re :),
Vu que ça fonctionne chez moi, peut-être une subtilité de la version 2002 :rolleyes:.
Teste
Code:
Dim Chemin As String
Chemin = Worksheets("Feuil2").Range("A1").Value
Open Chemin For Input As #1
Par contre, je te déconseilles fortement FileSearch, qui n'est plus reconnu dès 2007 :eek:...
Les espaces ne sont pas un problème, mais par contre, tu parlais d'automatiser, pour cela, il faut que la génération des fichiers TXT soit elle aussi automatisée, ce qui ne semble pas le cas... Et si c'est parmi 1000 fichiers qu'il faut aller chercher le plus récent, ça va être long, et en plus, rien ne t'assurera que le fichier le plus récent n'est pas un nouvel enregistrement d'hier :eek:...
Bref, à creuser :cool:
 

JNP

XLDnaute Barbatruc
Re : importer une partie d'un fichier txt

Re :),
Teste le fichier en PJ après avoir copié quelque fichiers d'aujourd'hui dans ton C:\temp.
Il ne te restera plus qu'à joindre les 2 :p.
Il y a une purge, mais je l'ai désactivé, ça me paraitrait logique de virer les fichier de plus de 3 jours :rolleyes:...
Bon courage :cool:
 

Pièces jointes

  • Liste de fichier.xls
    165 KB · Affichages: 38

Discussions similaires

Réponses
2
Affichages
240

Statistiques des forums

Discussions
312 215
Messages
2 086 338
Membres
103 191
dernier inscrit
camiux