Utilisation de données d'un gros fichier texte

lulu

XLDnaute Nouveau
Bonjour,
Je cherche à exploité des données d'un fichier texte. Cependant je travail et ne peux travailler qu'avec excel 2003et le fichier doit faire au moins 200 000 lignes, donc imposible de l'ouvrir en entier. Est-il alors possible d'exploiter les données de ce fichier texte ? (via une macro)

Merci d'avance
 

lulu

XLDnaute Nouveau
Re : Utilisation de données d'un gros fichier texte

Merci pour ta réponse pierrejean mais je pensais que le fait de savoir comment était implicite.
Avez-vous un exemple ? Mon fichier texte se trouve sur mon bureau, je pars de rien. Je souhaite donc en effet savoir comment je dois m'y prendre pour traiter les données de ce fichier texte via une macro, comment y accéder ? Je ne souhaite pas écrire dans ce fichier, juste parcourir les données afin de pouvoir remplir une nouvelle feuille excel.
 

lulu

XLDnaute Nouveau
Re : Utilisation de données d'un gros fichier texte

Voici ci joint, un court extrait de mon fichier en question.
Si besoin d'en savoir plus, je suis disposé à vous informer.
 

Pièces jointes

  • exemple.zip
    9.5 KB · Affichages: 63
  • exemple.zip
    9.5 KB · Affichages: 35
  • exemple.zip
    9.5 KB · Affichages: 49

pierrejean

XLDnaute Barbatruc
Re : Utilisation de données d'un gros fichier texte

Re

Teste cette macro

Code:
Sub test()
    Const ForReading = 1, ForWriting = 2, ForAppending = 3
    Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
    Dim fs, f, ts
    colonne = 1
    ligne = 1
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFile("F:\texcel3\exemple\exemple.txt")
    Set ts = f.OpenAsTextStream(ForReading, TristateUseDefault)
    On Error GoTo fin
    For n = 1 To 200000
     Cells(ligne, colonne) = ts.ReadLine
     ligne = ligne + 1
     If ligne > 65536 Then
       ligne = 1
       colonne = colonne + 1
     End If
    Next n
fin:
    Set fs = Nothing
    On Error GoTo 0
End Sub

cette ligne:
Set f = fs.GetFile("F:\texcel3\exemple\exemple.txt")
est a adapter pour ce qui est en rouge = chemin complet du fichier texte
200000 peut etre augmenté si necessaire (doit etre superieur au nombre de lignes du fichier texte)
 

lulu

XLDnaute Nouveau
Re : Utilisation de données d'un gros fichier texte

Merci beaucoup pour votre réponse, je comprend déjà un peu mieux comment ça marche. Mais comment dois-je faire pour accéder à une cellule donné ? Ou par exemple si je veux afficher le nombre de fois qu'il y a marqué SEMENCES.Accueil$ dans mon fichier texte ? Comment je sais quel ligne et quel colonne est en train d'être parcouru ?

Je suis nouveau en vba désolé de mon incompréhension,
Merci de votre intérêt.
 
Dernière édition:

marida

XLDnaute Nouveau
Re : Utilisation de données d'un gros fichier texte

bonjour ,
une manière de procéder par exemple est celle ci:

for i = 1 to 500
if cells(i,j).value = " SEMENCES.Acceuil$" then
compteur = compteur +1
end if
next

compteur t'affiche le nombre de fois qu'il a rencontré SEMENCES.Acceuil$

Tu peux adapter ce bout de programme à ton code.
 

lulu

XLDnaute Nouveau
Re : Utilisation de données d'un gros fichier texte

Bonjour marida,
j'ai finalement essayé de rechercher toutes les fois où il y avait la chaîne de caractère AGRICOLE dans le fichier comme ceci :
Code:
   Const ForReading = 1, ForWriting = 2, ForAppending = 3
    Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
    Dim fs, f, ts, agricole
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFile("\\wpa00030\d$\WebSphere\PortalServer\log\_LogActivite\euralis_log_activite_2012_4.log")
    Set ts = f.OpenAsTextStream(ForReading, TristateUseDefault)
    On Error GoTo fin
    For n = 1 To 20
    if ts.ReadLine Like ("*AGRICOLE*") Then
        agricole = agricole + 1
      End If
    Next n
fin:
    Set fs = Nothing
    On Error GoTo 0

Mais celà ne me retourne pas le bon nombre, ça me trouve 5, alors que le mot AGRICOLE est marqué 12 fois entre la ligne 1 et la ligne 20, ts.ReadLine correspondant à une ligne entière.
Comment celà ce fait -il ?
Ai-je mal utilisé la fonction like ?
Faut-il procéder autrement ?
 

pierrejean

XLDnaute Barbatruc
Re : Utilisation de données d'un gros fichier texte

Re

Teste celle-ci

Code:
Sub test1()
    Const ForReading = 1, ForWriting = 2, ForAppending = 3
    Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
    Dim fs, f, ts
    colonne = 1
    ligne = 1
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFile("F:\texcel3\exemple\exemple.txt")
    Set ts = f.OpenAsTextStream(ForReading, TristateUseDefault)
    On Error GoTo fin
    For n = 1 To 20
     If InStr(UCase(ts.ReadLine), "AGRICOLE") Then agricole = agricole + 1
    Next n
fin:
    Set fs = Nothing
    MsgBox (agricole)
    On Error GoTo 0
End Sub
 

lulu

XLDnaute Nouveau
Re : Utilisation de données d'un gros fichier texte

Bonjour,
Merci pour ta solution pierreJean, mais celà ne marche que si je recherche une seule chaîne de caractère. Par exemple, en plus de comptabiliser le nombre de fois que la chaîne de caractère "AGRICOLE" apparaît, je souhaiterais en plus compter aussi le nombre de fois qu'apparaît la chaîne de caractère "SEMENCE". En reprenant ton code, ci dessous celà me donne de mauvais résultat (9 pour agricole et 1 pour semence, alors que ça devrait être 12 et 2). Si jamais je commente l'une des deux boucles if, alors celà me retourne le bon nombre pour l'autre.
Savez-vous pourquoi ?




Code:
  Const ForReading = 1, ForWriting = 2, ForAppending = 3
    Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
    Dim fs, f, ts
    colonne = 1
    ligne = 1
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFile("\\wpa00030\d$\WebSphere\PortalServer\log\_LogActivite\euralis_log_activite_2012_4.log")
    Set ts = f.OpenAsTextStream(ForReading, TristateUseDefault)
    On Error GoTo fin
    For n = 1 To 20
     If InStr(UCase(ts.ReadLine), "AGRICOLE") Then
        agricole = agricole + 1
     End If
     If InStr(UCase(ts.ReadLine), "SEMENCES") Then
        semence = semence + 1
     End If
    Next n
fin:
    Set fs = Nothing
    MsgBox (agricole)
    MsgBox (semence)
    On Error GoTo 0
 

lulu

XLDnaute Nouveau
Re : Utilisation de données d'un gros fichier texte

Re,
Pour mieux comprendre j'ai décidé d'afficher la ligne en cours en rajoutant "msgbox ts.ReadLine" juste après le début de la boucle, et j'ai constaté que si je ne met rien dans ma boucle for, alors ça m'affiche les lignes de mon fichier texte une par une dans l'ordre dans lequel elles sont. Après avoir rajouté mes deux boucles if, ça ne m'affiche plus les lignes une par une ! Certaines sont sautés, je ne comprend plus rien. Pourquoi ça me fait ça ? Avez-vous une idée du problème en question ?
Code:
Const ForReading = 1, ForWriting = 2, ForAppending = 3
    Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
    Dim fs, f, ts
    colonne = 1
    ligne = 1
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFile("\\wpa00030\d$\WebSphere\PortalServer\log\_LogActivite\euralis_log_activite_2012_4.log")
    Set ts = f.OpenAsTextStream(ForReading, TristateUseDefault)
    On Error GoTo fin
    I = 1
    For n = 1 To 20
        MsgBox ts.ReadLine   'Dans le cas où les lignes suivantes sont commentés m'affiche les ligne de mon fichier une par une jusqu'à la ligne 20, sinon, des lignes sont sautés.
'        If InStr(UCase(ts.readline), "AGRICOLE") <> 0 Then
'            'MsgBox ts.readline
'            agricole = agricole + 1
'        End If
'        If InStr(UCase(ts.readline), "SEMENCES") Then
'            semence = semence + 1
'        End If
    Next n


Merci d'avance
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : Utilisation de données d'un gros fichier texte

Re

C'est parfaitement normal:
Lorsque Excel evalue ts.readline il passe à la ligne suivante

Teste comme ceci:

Code:
Sub test1()
    Const ForReading = 1, ForWriting = 2, ForAppending = 3
    Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
    Dim fs, f, ts
    colonne = 1
    ligne = 1
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFile("F:\texcel3\exemple\exemple.txt")
    Set ts = f.OpenAsTextStream(ForReading, TristateUseDefault)
    On Error GoTo fin
    For n = 1 To 20
     x = UCase(ts.ReadLine)
     If InStr(x, "AGRICOLE") Then agricole = agricole + 1
     If InStr(x, "SEMENCES") Then semences = semences + 1
    Next n
fin:
    Set fs = Nothing
    MsgBox ("Agricoles= " & agricole & "   " & "Semences= " & semences)
    On Error GoTo 0
End Sub
 

Discussions similaires

Réponses
22
Affichages
1 K

Statistiques des forums

Discussions
312 490
Messages
2 088 875
Membres
103 980
dernier inscrit
grandmasterflash38