Find dans tout les *.TXT

ThomasR

XLDnaute Occasionnel
Bonsoir le forum,

J'ai une question (lol), j'ai un USF (cela fait + d'un mois que je suis dessus mais il tourne bien grace à vous tous B) ) qui utilisre plusieurs base de donné en *.txt

pour manipuler ces donné je les import puis exporte (chaque fichier TXT = une feuille de mon dossier),

je cherche un moyen de faire des recherches par mots clef comme le font les divers demo de ce site.

la particularité de ma demande est que comme mes bases de donnés sont importante et donc longue à importer dans toutes les feuilles. J'aimerais savoir si il est possible de faire la recherche directement dans les fichier 'TXT' avec comme retour de la recherche le Nom du fichier texte (sans l'extention) ainsi que le numéro de la ligne.

D'avance merci pour votre aide
 

MichelXld

XLDnaute Barbatruc
bonjour Thomas

pour rechercher 'motTest' dans toutes les lignes d'un fichier texte , tu peux essayer


Code:
Sub lireFichierTexte()
Dim infosLigne As String
Dim i As Integer

Open 'C:\\Documents and Settings\\michel\\dossier\\monFichier.txt' For Input As #1
Do While Not EOF(1)
i = i + 1
Line Input #1, infosLigne
If infosLigne Like '*motTest*' Then MsgBox 'ligne : ' & i + 1
Loop
Close #1
End Sub


j'espere que ça pourra t'aider

bonne journée
MichelXld
 

ThomasR

XLDnaute Occasionnel
Bonjour MichelXld, le forum,

Merci MichelXld pour ta reponse :) .

quelqu'un sait en quoi je dois déclarer ma variable pour boucler sur tout les fichiers TXT

exemple :

Code:
Sub lireFichierTexte()
Dim infosLigne As String
Dim i As Integer
Dim données as ??

for each données in ??
Open 'C:\\Documents and Settings\\michel\\dossier\\' & données & '.txt' For Input As #1
Do While Not EOF(1)
i = i + 1
Line Input #1, infosLigne
If infosLigne Like '*motTest*' Then MsgBox 'ligne : ' & i + 1
Loop
Close #1
End Sub

Autre question ( :evil: ) si je place a l'endroit du MsgBox :
Code:
additem listbox1 données (en 1ere colonne)  puis i+1 (en 2eme colonne).

D'avance merci
 

ChTi160

XLDnaute Barbatruc
Salut Thomas®,MichelXld

peut être comme ceux ci

If infosLigne Like '*motTest*' Then
With Me.ListBox1
.ColumnCount = 2
.ColumnWidths = '80;80'

.AddItem données (en 1ere colonne)
.List (.ListCount - 1, 1) = i+1 ‘en 2eme colonne
End With
End if

bonne journée
 

ThomasR

XLDnaute Occasionnel
re, MichelXLD le forum

Bonjour ChTi160,

Merci ChTi160 pour cette info

mais si j'arrive à boucler je peux faire un compteur du genre compteur +1

.List (.ListCount - 1, 1) = i+1 ‘en 2eme colonne

Oupss :eek: j'avais pas vu le listCount - 1 donc là je peux boucler sans problème j'allimente ma liste.


Merci

PS : si quelqu'un sai comment boucler sur tout les TXT

D'avance merci
Thomas®
 

MichelXld

XLDnaute Barbatruc
rebonjour Thomas , bonjour Jean-Marie

tu peux tester


Code:
Sub lireFichierTexte()
Dim infosLigne As String
Dim i As Integer
Dim Fichier As String, Direction As String

Direction = 'C:\\Documents and Settings\\michel\\excel'
Fichier = Dir(Direction & '\\*.txt')

Do While Fichier <> ''

Open Direction & '\\' & Fichier For Input As #1
Do While Not EOF(1)
i = i + 1
Line Input #1, infosLigne
If infosLigne Like '*motTest*' Then MsgBox Fichier & vbLf & 'ligne : ' & i + 1
Loop
Close #1

Fichier = Dir
Loop
End Sub


bonne journée
MichelXld
 

Hervé

XLDnaute Barbatruc
Bonjour tout le monde

J'arrive après la bataille, pas grave, je met quand meme ma soluce pour boucler sur des txt :

Dim Dossier As Object, Fichier As Object
Dim Chemin As String
Dim i As Integer, x As Integer

Chemin = ThisWorkbook.Path & '\\'

Set Dossier = CreateObject('Scripting.FileSystemObject').GetFolder(Chemin)

For Each Fichier In Dossier.Files
If Right(Fichier.Name, 3) = 'txt' Then
i = 0
Open Fichier For Input As #1
Do While Not EOF(1)
Line
Input #1, infosLigne
i = i + 1
If infosLigne Like '*motTest*' Then
ListBox1.AddItem Fichier
ListBox1.List(x, 1) = i: x = x + 1:
End If
Loop
Close #1

End If
Next Fichier

Salut

PS : merci mdf pour le getfolder ;)

edition : oups , vraiment à la bourre l'Hervé, salut Michel :)

Message édité par: Hervé, à: 01/07/2005 10:40
 

ThomasR

XLDnaute Occasionnel
Re bonjour à tous,

Merci pour toutes ces infos si rapide

c'est vraiment simpa.

grace à vous ca mache impec

j'ai fait un mix des 2 macros

Code:
Dim infosLigne As String
Dim i As Integer
Dim Fichier As String, Direction As String

Direction = 'C:\\Documents and Settings\\michel\\excel'
Fichier = Dir(Direction & '\\*.txt')

Do While Fichier <> ''

Open Direction & '\\' & Fichier For Input As #1
Do While Not EOF(1)
i = i + 1
Line Input #1, infosLigne
If infosLigne Like '*motTest*' Then 'MsgBox Fichier & vbLf & 'ligne : ' & i + 1

With Me.ListBox1
.ColumnCount = 2
.ColumnWidths = '80;80'
.AddItem Fichier '(en 1ere colonne)
.List(.ListCount - 1, 1) = i + 1 'en 2eme colonne
End With
End If
Loop
Close #1

Fichier = Dir
Loop
End Sub

Là je sais que j'abuse mais j'ai une derniere question :eek: :eek: :eek:

comment puis je sup le .TXT de Fichier pour alimenter le listbox1

j'avais penser à un nom = Left (Fichier, (le nombre de caractere de FICHIER - 4))
en fait peut ton faire un Ficher.caractère.count ??? (un truck qui voudrai dire ca lol)

Merci d'avance
 

ThomasR

XLDnaute Occasionnel
re,

:huh: sa va po :eek: .

j'ai bien une recherche dans les fichiers avec un n° qui resort mais c'est pas le numéro de ligne ??

j'ai un fichier text avec 2 ligne et il me dit 117 :pinch: .

est ce du au ;;;; ??

je vous joint le fichier (mais vous connaissé le code)

je suis désolé mais je ne peux pas joindre d'exemple de fichier text

mais ils sont constitué de text;text;........


j'ai constaté que le numéro de ligne est croissant comme ci il s'aditionné ( exemple reponse ligne 2 fichier1 puis ligne 4 fichier 1

puis au lieu de dire ligne 3 fichier 2 on dirait qu'il fait 3 + 4 donc ligne 7 fichier 2

d'avance merci
Thomas®
 

ThomasR

XLDnaute Occasionnel
encore un essai pour joindre la macro [file name=recherche_texte.zip size=11791]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/recherche_texte.zip[/file]
 

Pièces jointes

  • recherche_texte.zip
    11.5 KB · Affichages: 21

ThomasR

XLDnaute Occasionnel
re,

J'ai trouvé

Code:
Open Direction & '\\' & Fichier For Input As #1
Do While Not EOF(1)
i = i + 1
Line Input #1, infosLigne
If infosLigne Like '*' & TextBox1 & '*' Then 'MsgBox Fichier & vbLf & 'ligne : ' & i + 1

With Me.ListBox1
.ColumnCount = 2
.ColumnWidths = '80;80'
.AddItem Fichier '(en 1ere colonne)
.List(.ListCount - 1, 1) = i  'en 2eme colonne
End With
End If
Loop
Close #1
i = 0
Fichier = Dir
Loop
End Sub

j'ai sup un +1 et ajouté un i = 0

Merci de votre aide

Bonne journée
 

ChTi160

XLDnaute Barbatruc
Re bonjour Salut Hervé
j'ai failli intervenir dans un de tes post, lorsques tu as proposé une macro où tu récupéres les Numéros de ligne dans une colonne(cachée) de la listBox et ou tu nous disais une fois encore que tu n'aime pas Le RowSource Lol
car c'est depuis que j'ai lu un de tes post que j'utilise cette façon de faire bien pratique
encore Merci à toi


OupSSSS Salut MichelXld

Message édité par: Chti160, à: 01/07/2005 12:50
 

ThomasR

XLDnaute Occasionnel
Bonsoir le forum,
bonsoir ChTi160, MichelXld,

je n'ai plus de besoin car grace à vous tout fonctionne impec j'ai adapté ce code pour mon fichier (Encore merci).

La je reviens pour ma culture perso.

je ne comprend pas pourquoi i = le nombre de ligne ??

je vois bien

Do While Not EOF(1)
i = i + 1

lorsque ce n'est pas la fin du fichier alors i = i + 1 donc a chaque visualisation d'une ligne i = 1 puis 2

je ne vois pas de commande pour lui dire à chaque ligne ?

il pourait boucler sur chaque mots ou même paragraphe.

en fait je pense que la boucle ligne se fait avec infosLigne mais pas d'aide sur ce mots (comme si ce n'etait pas du vba excel).

si je cherche à boucler sur des paragraphe comment faire car pas d'info dans les livres ni dans l'aide excel.

comment vous faites pour trouver des trucks comme ca :pinch: je suis impréssionné je vous dit chapeau bas.

Un grand merci
Thomas®
 

Discussions similaires

Statistiques des forums

Discussions
314 647
Messages
2 111 533
Membres
111 192
dernier inscrit
F.Venne