Parcourir un fichier texte et compter le nombre d'occurence d'un mot

hamada63

XLDnaute Nouveau
Bonjour,

Je débute en vba et je souhaite faire l'opération suivante: lire 500 fichiers texte et compter le nombre de fois où certaines chaînes de caractère apparaîssent dans ces fichiers.
J'ai écris ce qui suit:

For j = 3 To 466 (compteur de fichiers)

Set fso = CreateObject("Scripting.FileSystemObject")
Set fFile = fso_OpenTextFile(Range("B" & j).Value) 'adresses des fichiers

For i = 1 To 20 (compteur de lignes)

ligne(i) = fFile.ReadLine
If i > 10 Then
b = b + Count(ligne(i), ", Alarme ," & Range("E" & 1).Value) 'exemple compter les" , Alarme , machine X" la fonction count est définie pour des chaînes de caractères et je ne peux pas l'appliquer directement à fFile.

End If





Next
Range("U" & 1).Value = b

fFile.Close



Next


Le problème de parcourir ligne par ligne est que je ne peux le faire que pour une vingtaine de ligne après ce n'est pas possible. Mes informations sont de plus de la ligne 30 à la ligne 80 du fichier.

Avez vous une autre solution à ce problème? Je vous remercie d'avance
 

hamada63

XLDnaute Nouveau
Re : Parcourir un fichier texte et compter le nombre d'occurence d'un mot

{\rtf1\ansi\ansicpg1252\deff0{\fonttbl{\f0\fmodern\fprq1\fcharset0 Courier New;}}
{\colortbl ;\red0\green0\blue0;}
\viewkind4\uc1\pard\cf1\lang1040\b\f0\fs56\tab\tab\tab\tab\tab\tab\tab\tab\tab\tab T-Shirt-XC44E\par
\par
\fs32 Rapport de Production du lot : 004E12\cf0\lang1036\fs24\par
\cf1\lang1040\fs32 Code produit : F6 Op\'e9rateur : JMS\cf0\lang1036\fs24\par
\cf1\lang1040\par
Debut de la production : 9/ 3/2010 - 22:36:12.\par
Fin de la production : 9/ 3/2010 - 23:44:58.\par
Longueur totale du touret (m) : 5788\par
Longueur au debut de validation du touret (m) : 25\par
Longueur de prelevement (m) : 30\par
Longueur Totale restante (m) : 5758\par
\par
Historique :\par
\par
Nombre de Pre-Alarmes : 0\par
Message Start Date Start Time End Date End Time \par
\par
Nombre d'alarmes : 0\par
Message Start Date Start Time End Date End Time \par
\par
\par
\par
\par
\par

DEBUT TABLE DEFAUT: \par
0,0, \par
FIN TABLE DEFAUT. \par
Longueur totale des pertes (longueur validation + cumul des défauts) : 25 + 0 = 25. \par
}
 

pierrejean

XLDnaute Barbatruc
Re : Parcourir un fichier texte et compter le nombre d'occurence d'un mot

Re

A partir de l'exemple fourni (passé par le bloc-note et enregistré sous essai.001) j'ai ecrit cette macro qui fonctionne

Vois si tu peux t'en inspirer

Code:
Sub test()
Set fso = CreateObject("Scripting.FileSystemObject")
Set fFile = fso.OpenTextFile("E:\texcel2\essai.001") 'adresses des fichiers
For i = 1 To 100 '(compteur de lignes)
On Error Resume Next
ligne = fFile.ReadLine
If Err.Number = 62 Then GoTo fin
On Error GoTo 0
If InStr(ligne, "alarme") <> 0 Or InStr(ligne, "Alarme") <> 0 Then
 nb = nb + 1
 MsgBox (ligne)
End If
Next i
fin:
MsgBox (nb)
End Sub
 

hamada63

XLDnaute Nouveau
Re : Parcourir un fichier texte et compter le nombre d'occurence d'un mot

Re,

Je vous remercie de votre aide, mon programme tourne très bien.

J'ai juste une autre question en tant que débutant. Comment est-ce qu'on dit à une procédure qu'elle ne doit s'appliquer qu'à une feuille bien determinée?
Y a-t-il un moyen de le dire au début de la procédure sans avoir à le répéter à chaque fois qu'on parle d'une cellule?
 

hamada63

XLDnaute Nouveau
Re : Parcourir un fichier texte et compter le nombre d'occurence d'un mot

For k = 4 To 32

nb = 0

For j = 3 To Range("A1").Value

Set fso = CreateObject("Scripting.FileSystemObject")

Set fFile = fso_OpenTextFile(Range("B" & j).Value) 'adresses des fichiers

For i = 1 To 100 '(compteur de lignes)

On Error Resume Next

ligne = fFile.ReadLine

If Err.Number = 62 Then GoTo fin

On Error GoTo 0

If InStr(ligne, ", Alarme , " & Range("D" & k).Value) <> 0 Then

nb = nb + 1

End If
Next i
fin:
Next j
Range("E" & k).Value = nb

Next k




End Sub




En fait, j'aimerais bien faire en sorte que lors de l'execution, la procédure n'agisse que sur une feuille donnée.

En fait j'ai 4 machines avec pour chaque machine une feuille. A chaque machine est associée une procédure.
Je souhaite éviter qu'une procédure soit appliquée à une machine autre que celle pour laquelle elle est faite.
 

pierrejean

XLDnaute Barbatruc
Re : Parcourir un fichier texte et compter le nombre d'occurence d'un mot

Re

Voila coment je procederai
1ere procedure modifiée
chaque feuille aura une procedure essai1

Code:
Sub essai(nom_feuille)
With Sheets(nom_feuille)
For k = 4 To 32
 nb = 0
 For j = 3 To .Range("A1").Value
  Set fso = CreateObject("Scripting.FileSystemObject")
  Set fFile = fso.OpenTextFile(.Range("B" & j).Value) 'adresses des fichiers
   For i = 1 To 100 '(compteur de lignes)
     On Error Resume Next
     ligne = fFile.ReadLine
     If Err.Number = 62 Then GoTo fin
     On Error GoTo 0
     If InStr(ligne, ", Alarme , " & .Range("D" & k).Value) <> 0 Then
       nb = nb + 1
     End If
   Next i
fin:
 Next j
.Range("E" & k).Value = nb
Next k
End With
End Sub

Sub essai1()
 Call essai("Feuil1")
End Sub
 

Discussions similaires

Réponses
0
Affichages
153
Réponses
7
Affichages
351

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 229
Messages
2 086 426
Membres
103 206
dernier inscrit
diambote