Méthode FileSearch

G

gabriel

Guest
Bonsoir à tout le Forum,

N'étant pas encore féru de VBA, je rencontre un problème avec 'FileSearch'.

Je désire trouver tous les fichiers .doc d'un répertoire contenant un certain mot et j'obtiens une fenêtre fort désagréable me disant que ce programme à effectué une opération non conforme etc...
Le détail est que Excel a causé une défaillance dans le module kernel32 etc..

Voici le code utilisé:

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub ChercheFichiersXl()

Dim FS As Office.FileSearch
Dim strChemin As String
Dim varNomFichier As Variant
Dim strMessage As String
Dim Compteur As Long

Set FS = Application.FileSearch
strChemin = 'D:\\Mes Documents Ma BOITE\\Factures\\factures 2005'

With FS
.NewSearch
.LookIn = strChemin
.SearchSubFolders = True
.FileType = msoFileTypeWordDocuments
.TextOrProperty = 'Récupération'
.MatchTextExactly = True
.LastModified = msoLastModifiedAnyTime
Compteur = .Execute

strMessage = Format(iCompteur, '0 ''Fichier(s) trouvé(s)''')

For Each varNomFichier In .FoundFiles
strMessage = strMessage & vbCr & varNomFichier
Next varNomFichier
MsgBox strMessage
End With

End Sub
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Si je commente les lignes '.TextOrProperty = 'Récupération' et '.MatchTextExactly = True alors cela fonctionne mais ça me renvoie évidemment tous les fichiers!

Est ce que je m'y prend mal?
Si vous pouviez m'éclairer ce serait épatant!
En vous remerciant par avance.

Gabriel
 

dg62

XLDnaute Barbatruc
Bonjour Gabriel

Vous dites :

'Si je commente les lignes '.TextOrProperty = 'Récupération' et '.MatchTextExactly = True alors cela fonctionne mais ça me renvoie évidemment tous les fichiers! '

je ne comprends pas bien votre problème !
Vous souhaitez trouver tous les .doc dans le chemin spécifié qui contiennent 'Récupération' ?

dans ce cas vous êtes obligé de spécifié récupération dans TextorProperty.

Mais pourquoi dites-vous 'ça me renvoie évidemment tous les fichiers! '

je viens de faire un essai et j'ai obtenu le résultat escompté.
une premiere recherche avec class* retour 3 fichiers
une deuxieme recherche avec classeur retour 1 fichier
La procédure fonctionne correctement et renvoie les bons résultats.

Cordialement
 
G

gabriel

Guest
Bonsoir à nouveau à tous et merci de vous être penchés sur mon problème.

Effectivement si je commente les 2 lignes en question la recherche me trouve tous les .doc du répertoire, mais mon problème est que si je met un filtre avec '.TextOrProperty' pour trouver ceux qui contiennent seulement le mot 'Récupération' Excel me cause une opération non conforme (dans un module Kernel) et demande à être fermé.
La procédure n'aboutit donc pas et je suis bien ennuyé!

Malgré ma prose VBA de débutant je n'ai jamais eu d'erreur de ce genre. La fenêtre débogage OK ça m'arrive trop souvent, mais Kernel ça je n'y comprend rien!

D'après vous le code serait bon. J'en déduis que j'aurais alors un problème avec Excel, mais comment faire dans cette éventualité?

En vous remerciant de m'avoir répondu.

Gabriel
 

MichelXld

XLDnaute Barbatruc
bonsoir Gabriel , bonsoir Didier

ce lien concernant les bugs de la propriété 'FileSearch' pourra peut etre t'aider

Lien supprimé


sinon ci dessous une autre methode que tu pourras adapter pour boucler sur les fichiers d'un reperetoire et filtrer les documents à récuperer



Code:
Sub listerFichiersRepertoire()
Dim Dossier As String

Dossier = 'C:\\Documents and Settings\\michel\\dossier\\general\\excel'

ListFilesInFolder Dossier, True

End Sub


Sub ListFilesInFolder(SourceFolderName As String, IncludeSubfolders As Boolean)
' adapté de Ole P Erlandsen
'necessite d'aviter la reference Microsoft Scripting RunTime :
'dans l'editeur de macros
'Menu Outils
'References
'coches la ligne 'Microsoft Scripting RunTime'
'cliques sur OK pour valider
'
Dim Fso As Scripting.FileSystemObject
Dim SourceFolder As Scripting.Folder
Dim SubFolder As Scripting.Folder
Dim XFile As Scripting.File

Set Fso = CreateObject('Scripting.FileSystemObject')
Set SourceFolder = Fso.GetFolder(SourceFolderName)

For Each XFile In SourceFolder.Files
If XFile.Name Like 'Récupération' And _
XFile.Type = 'Document Microsoft Word' Then _
MsgBox XFile.Name
Next XFile

If IncludeSubfolders Then
For Each SubFolder In SourceFolder.SubFolders
ListFilesInFolder SubFolder.Path, True
Next SubFolder
End If

End Sub



bonne soiree
MichelXld

Message édité par: MichelXld, à: 11/07/2005 22:39
 
G

gabriel

Guest
Bonsoir Michel,

merci de t'occuper de mes ennuis si tard. Je regarderai tes explications en détail et essaierai de les mettre en application (ma formation n'a rien à voir avec le monde de l'informatique) à une heure moins tardive car je suis frigoriste et demain je serai sur les chantiers (je te laisse imaginer le rush en été!).

Ca me rassure de ne pas être le seul ennuyé avec cette méthode, mais sache que si je lance la recherche sur le même répertoire avec le dossier voisin ('Factures 2004') la procédure fonctionne parfaitement avec le filtre et me retourne tous les fichiers ad hoc. Intrigant non?

Les fichiers .doc contenus dans ('Factures 2004') ont été créés par macro Excel 2000, tandis que ceux de ('Factures 2005') l'ont été pour partie par macro Excel XP avec le même code. Est-ce une piste?

De toutes façons c'est sympa que tu soit là pour me filer un coup de main et t'en remercie encore.Bonne nuit.

Cordialement.

Gabriel
 
G

gabriel

Guest
Bonsoir à tout le Forum et à Michel

J'ai testé ton code mais ne possèdant pas la référence MicrosoftScritingRuntime (Office 9.0), la procédure échoue logiquement.

Je l'essaierai sur un poste muni d'un Office supérieur à 9.0

Bien le merci quand même pour cette méthode que je ne connais pas.

@+

Gabriel