Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

traitement fichiers texte avec vba

9 réponses
Avatar
Noisette
bonjour
je voudrais savoir si, à partir d'une macro vba excel, je peux analyser les
dernières lignes d'un fichier texte, dans mon cas ce serait les 5 dernières.
J'ai trouvé des exemples dans le groupe mais qui balaient tout le fichier,
si celui ci est grand ça risque d'etre long.
merci
Noisette

9 réponses

Avatar
JB
Bonjour,

-La lecture d'un fichier séquentiel (séparateur chr(10)+Chr(13) )se
fait à partir du début.
-On peut cependant l'ouvrir comme un fichier à accès direct:
En faisant l'hypothèse que les lignes ont une longueur de 40
caractères, on peut lire directement les 5 dernières lignes.

Type Record
ligne As String * 200
End Type

Sub essai()
nf = ThisWorkbook.Path & "EssaiFS.txt"
taille = FileLen(nf)
Dim enreg As Record
Open nf For Random As #1 Len = Len(enreg)
no = Int(taille / 200) + 1
Get #1, no, enreg
MsgBox enreg.ligne
Close #1
End Sub

JB

On 28 fév, 06:30, "Noisette" wrote:
    bonjour
je voudrais savoir si, à partir d'une macro vba excel, je peux analyser les
dernières lignes d'un fichier texte, dans mon cas ce serait les 5 derni ères.
J'ai trouvé des exemples dans le groupe mais qui balaient tout le fichie r,
si celui ci est grand ça risque d'etre long.
merci
Noisette


Avatar
Mishell
Bonjour.

f = "c:test.txt"
Dim FileNumber As Integer
FileNumber = FreeFile

Open f For Input As 1
a = Input(FileLen(f), FileNumber)
Close

Dim Occurence As Long

If Right(a, 2) = vbCrLf Then
a = Mid(a, 1, Len(a) - 2)
End If
If Left(a, 2) <> vbCrLf Then
a = vbCrLf & a
End If

NombreDeLignes = 5

ReDim strLigne(NombreDeLignes) As String
Occurence = -1
strT = vbCrLf
precedent = FileLen(f) + 2
For i = NombreDeLignes To 1 Step -1
Occurence = InStrRev(a, strT, Occurence)
If Occurence = 0 Then Exit For
strLigne(i) = Mid(a, Occurence + 2, precedent - Occurence - 2)
precedent = Occurence
Next

"Noisette" wrote in message
news:%
bonjour
je voudrais savoir si, à partir d'une macro vba excel, je peux analyser
les dernières lignes d'un fichier texte, dans mon cas ce serait les 5
dernières. J'ai trouvé des exemples dans le groupe mais qui balaient tout
le fichier, si celui ci est grand ça risque d'etre long.
merci
Noisette



Avatar
JB
Bonsoir,

Tout le fichier est lu et transféré en mémoire. J'ai des doutes sur
les performances si le fichier a une taille importante.

JB

On 28 fév, 20:22, "Mishell" wrote:
Bonjour.

f = "c:test.txt"
Dim FileNumber As Integer
FileNumber = FreeFile

Open f For Input As 1
 a = Input(FileLen(f), FileNumber)
Close

Dim Occurence As Long

If Right(a, 2) = vbCrLf Then
 a = Mid(a, 1, Len(a) - 2)
End If
If Left(a, 2) <> vbCrLf Then
 a = vbCrLf & a
End If

NombreDeLignes = 5

ReDim strLigne(NombreDeLignes) As String
Occurence = -1
strT = vbCrLf
precedent = FileLen(f) + 2
For i = NombreDeLignes To 1 Step -1
 Occurence = InStrRev(a, strT, Occurence)
 If Occurence = 0 Then Exit For
  strLigne(i) = Mid(a, Occurence + 2, precedent - Occurence - 2)
  precedent = Occurence
 Next

"Noisette" wrote in message

news:%



   bonjour
je voudrais savoir si, à partir d'une macro vba excel, je peux analyse r
les dernières lignes d'un fichier texte, dans mon cas ce serait les 5
dernières. J'ai trouvé des exemples dans le groupe mais qui balaient tout
le fichier, si celui ci est grand ça risque d'etre long.
merci
Noisette- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -



Avatar
Mishell
Génial ta façon d'aller se positionner directement un peu avant la fin du
fichier.
Une question me tracasse cependant. N'est-ce pas dangereux d'aller chercher
un enregistrement de 200 caractères à la fin d'un fichier sans se
positionner exactement 200 caractères avant la fin du fichier?



"JB" wrote in message
news:
Bonsoir,

Tout le fichier est lu et transféré en mémoire. J'ai des doutes sur
les performances si le fichier a une taille importante.

JB

On 28 fév, 20:22, "Mishell" wrote:
Bonjour.

f = "c:test.txt"
Dim FileNumber As Integer
FileNumber = FreeFile

Open f For Input As 1
a = Input(FileLen(f), FileNumber)
Close

Dim Occurence As Long

If Right(a, 2) = vbCrLf Then
a = Mid(a, 1, Len(a) - 2)
End If
If Left(a, 2) <> vbCrLf Then
a = vbCrLf & a
End If

NombreDeLignes = 5

ReDim strLigne(NombreDeLignes) As String
Occurence = -1
strT = vbCrLf
precedent = FileLen(f) + 2
For i = NombreDeLignes To 1 Step -1
Occurence = InStrRev(a, strT, Occurence)
If Occurence = 0 Then Exit For
strLigne(i) = Mid(a, Occurence + 2, precedent - Occurence - 2)
precedent = Occurence
Next

"Noisette" wrote in message

news:%



bonjour
je voudrais savoir si, à partir d'une macro vba excel, je peux analyser
les dernières lignes d'un fichier texte, dans mon cas ce serait les 5
dernières. J'ai trouvé des exemples dans le groupe mais qui balaient
tout
le fichier, si celui ci est grand ça risque d'etre long.
merci
Noisette- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -



Avatar
Mishell
Pour obtenir exactement les 1000 derniers caractères, on pourrait ouvrir le
fichier en Binaire et procéder ainsi:

Sub testBinary()
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 = "c:test.txt"
file_length = FileLen(file_name)
f2 = 1000
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

' Afficher résultats
For i = 1 To f2
txt = txt & Chr(Format$(bytes(i)))
Next i
Debug.Print txt

End Sub

"Mishell" wrote in message
news:
Génial ta façon d'aller se positionner directement un peu avant la fin du
fichier.
Une question me tracasse cependant. N'est-ce pas dangereux d'aller
chercher un enregistrement de 200 caractères à la fin d'un fichier sans se
positionner exactement 200 caractères avant la fin du fichier?



"JB" wrote in message
news:
Bonsoir,

Tout le fichier est lu et transféré en mémoire. J'ai des doutes sur
les performances si le fichier a une taille importante.

JB

On 28 fév, 20:22, "Mishell" wrote:
Bonjour.

f = "c:test.txt"
Dim FileNumber As Integer
FileNumber = FreeFile

Open f For Input As 1
a = Input(FileLen(f), FileNumber)
Close

Dim Occurence As Long

If Right(a, 2) = vbCrLf Then
a = Mid(a, 1, Len(a) - 2)
End If
If Left(a, 2) <> vbCrLf Then
a = vbCrLf & a
End If

NombreDeLignes = 5

ReDim strLigne(NombreDeLignes) As String
Occurence = -1
strT = vbCrLf
precedent = FileLen(f) + 2
For i = NombreDeLignes To 1 Step -1
Occurence = InStrRev(a, strT, Occurence)
If Occurence = 0 Then Exit For
strLigne(i) = Mid(a, Occurence + 2, precedent - Occurence - 2)
precedent = Occurence
Next

"Noisette" wrote in message

news:%



bonjour
je voudrais savoir si, à partir d'une macro vba excel, je peux analyser
les dernières lignes d'un fichier texte, dans mon cas ce serait les 5
dernières. J'ai trouvé des exemples dans le groupe mais qui balaient
tout
le fichier, si celui ci est grand ça risque d'etre long.
merci
Noisette- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -







Avatar
Noisette
bonjour,
je me permets de vous remercier tous les deux bien que j'en sois encore à
essayer de faire fonctionner vos propositions d'analyse de fichiers
textes.Quelques unes des notions utilisées me sont étrangères et je dois
d'abord les assimiler et comme ça peut durer je ne voudrais pas passer pour
un "malpolitus".
Je vous tiens informer de mes résultats
Noisette



"Mishell" a écrit dans le message de news:
eU6Ar%
Pour obtenir exactement les 1000 derniers caractères, on pourrait ouvrir
le fichier en Binaire et procéder ainsi:
Dim file_name As String

Sub testBinary()
.................
End Sub

"Mishell" wrote in message
news:
Génial ta façon d'aller se positionner directement un peu avant la fin du
fichier.
Une question me tracasse cependant. N'est-ce pas dangereux d'aller
chercher un enregistrement de 200 caractères à la fin d'un fichier sans
se positionner exactement 200 caractères avant la fin du fichier?



"JB" wrote in message
news:
Bonsoir,

Tout le fichier est lu et transféré en mémoire. J'ai des doutes sur
les performances si le fichier a une taille importante.

JB

On 28 fév, 20:22, "Mishell" wrote:
Bonjour.
......................
(i) = Mid(a, Occurence + 2, precedent - Occurence - 2)



precedent = Occurence
Next

"Noisette" wrote in message

news:%



bonjour
je voudrais savoir si, à partir d'une macro vba excel, je peux
analyser
les dernières lignes d'un fichier texte, dans mon cas ce serait les 5
dernières. J'ai trouvé des exemples dans le groupe mais qui balaient
tout
le fichier, si celui ci est grand ça risque d'etre long.
merci
Noisette- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -











Avatar
JB
Bonjour,

La lecture en binaire de Mishell est + appropiée.

JB
On 29 fév, 06:44, "Noisette" wrote:
bonjour,
je me permets de vous remercier tous les deux bien que j'en sois encore à
essayer  de faire fonctionner vos propositions d'analyse de fichiers
textes.Quelques unes  des notions utilisées me sont étrangères et je dois
d'abord les assimiler et comme ça  peut durer je ne voudrais pas passe r pour
un "malpolitus".
Je vous tiens informer de mes résultats
Noisette

"Mishell" a écrit dans le message de news:
eU6Ar%



Pour obtenir exactement les 1000 derniers caractères, on pourrait ouvr ir
le fichier en Binaire et procéder ainsi:
Dim file_name As String

Sub testBinary()
   .................
End Sub

"Mishell" wrote in message
news:
Génial ta façon d'aller se positionner directement un peu avant la fin du
fichier.
Une question me tracasse cependant. N'est-ce pas dangereux d'aller
chercher un enregistrement de 200 caractères à la fin d'un fichier sans
se positionner exactement 200 caractères avant la fin du fichier?

"JB" wrote in message
news: .
Bonsoir,

Tout le fichier est lu et transféré en mémoire. J'ai des doutes s ur
les performances si le fichier a une taille importante.

JB

On 28 fév, 20:22, "Mishell" wrote:
Bonjour.
......................




(i) = Mid(a, Occurence + 2, precedent - Occurence - 2)



precedent = Occurence
Next

"Noisette" wrote in message

news:%

bonjour
je voudrais savoir si, à partir d'une macro vba excel, je peux
analyser
les dernières lignes d'un fichier texte, dans mon cas ce serait le s 5
dernières. J'ai trouvé des exemples dans le groupe mais qui bala ient
tout
le fichier, si celui ci est grand ça risque d'etre long.
merci
Noisette- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -- Masquer le texte de s messages précédents -




- Afficher le texte des messages précédents -- Masquer le texte des me ssages précédents -

- Afficher le texte des messages précédents -






Avatar
JB
Sub testBinary()
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 & "EssaiFS.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)
Next i
End Sub

JB
On 29 fév, 07:37, JB wrote:
Bonjour,

La lecture en binaire de Mishell est + appropiée.

JB
On 29 fév, 06:44, "Noisette" wrote:



bonjour,
je me permets de vous remercier tous les deux bien que j'en sois encore à
essayer  de faire fonctionner vos propositions d'analyse de fichiers
textes.Quelques unes  des notions utilisées me sont étrangères e t je dois
d'abord les assimiler et comme ça  peut durer je ne voudrais pas pas ser pour
un "malpolitus".
Je vous tiens informer de mes résultats
Noisette

"Mishell" a écrit dans le message de news:
eU6Ar%

Pour obtenir exactement les 1000 derniers caractères, on pourrait ou vrir
le fichier en Binaire et procéder ainsi:
Dim file_name As String

Sub testBinary()
   .................
End Sub

"Mishell" wrote in message
news:
Génial ta façon d'aller se positionner directement un peu avant l a fin du
fichier.
Une question me tracasse cependant. N'est-ce pas dangereux d'aller
chercher un enregistrement de 200 caractères à la fin d'un fichie r sans
se positionner exactement 200 caractères avant la fin du fichier?

"JB" wrote in message
news: ...
Bonsoir,

Tout le fichier est lu et transféré en mémoire. J'ai des doutes sur
les performances si le fichier a une taille importante.

JB

On 28 fév, 20:22, "Mishell" wrote:
Bonjour.
......................




(i) = Mid(a, Occurence + 2, precedent - Occurence - 2)

precedent = Occurence
Next

"Noisette" wrote in message

news:%

bonjour
je voudrais savoir si, à partir d'une macro vba excel, je peux
analyser
les dernières lignes d'un fichier texte, dans mon cas ce serait les 5
dernières. J'ai trouvé des exemples dans le groupe mais qui ba laient
tout
le fichier, si celui ci est grand ça risque d'etre long.
merci
Noisette- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -- Masquer le texte des messages précédents -




- Afficher le texte des messages précédents -- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -







Avatar
Noisette
c'est ok, je vais potasser les deux propositions de macro. Je pense que vous
m'avez donné les outils pour arriver
à me débrouiller merci
Noisette


"JB" a écrit dans le message de news:

Sub testBinary()
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 & "EssaiFS.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)
Next i
End Sub

JB
On 29 fév, 07:37, JB wrote:
Bonjour,

La lecture en binaire de Mishell est + appropiée.

JB