VBA et Windows Desktop Search...

pedrag31

XLDnaute Occasionnel
[Résolu] - VBA et Windows Desktop Search...

Bonjour le forum XLD,

Je recherche des fichiers sur mon réseau professionnel avec la commande Application.FileSearch dans un répertoire contenant une arborescence de près de 12000 dossiers... La recherche d'un fichier prend souvent entre 1 et 2 minutes...:(

J'ai parcouru plusieurs sites a la recherche d'une solution afin d'accélérer cette recherche. Il semble que l'outil d'indexage de fichiers "Windows Desktop Search" soit une solution efficace... Article sur WDS - Documentation
Mais je ne connais pas du tout, malheureusement...:confused:

Est-ce que certains d'entre vous connaissent cet outil?
Savez-vous comment intègre-t-on "WDS" dans du code "classique" en VB?
Sauriez-vous ou je peux trouver qques exemple simples de code en VB intégrant l'utilisation de WDS (pour une recherche de fichier ou dossier par exemple)?

Merci d'avance pour vos conseils.

Bonne journée, :)
 
Dernière édition:

pedrag31

XLDnaute Occasionnel
Re : VBA et Windows Desktop Search...

Bonjour le forum,

Bon, après une longue série de recherches sur Google, j'ai fini par trouver mon bonheur :cool: et reconstituer le code permettant d'utiliser l'indexation de Windows (Windows Desktop Search) depuis VBA/Excel. Ça fonctionne sur la base de requêtes SQL.

Le grand plus de cette méthode de recherche via l'index est qu'elle renvoie tous les fichiers présents dans les dossiers indexés en des temps records (entre 1 et 2s :D). Aucune comparaison avec les méthodes FSO et DIR que j'utilisais jusqu'à présent. Idéal pour traiter des recherches vastes ou dans des arborescences importantes.

Ce code exemple recherche les fichiers de type "*.xls*" qui sont sur le bureau de l'utilisateur et liste les résultats (Nom de fichier + Chemin) dans la fenêtre d’exécution de VBA.

VB:
Sub RequeteWindowsDesktopSearch()

'Dans VBA Menu "Tools/References..."
'Cocher "Microsoft ActiveX Data Object 2.8 Library"

Set objConnection = CreateObject("ADODB.Connection")
Set objRecordset = CreateObject("ADODB.Recordset")
 
objConnection.Open "Provider=Search.CollatorDSO;Extended Properties='Application=Windows';"
 
'requette : ensemble des fichiers Excel du bureau
objRecordset.Open "SELECT System.FileName,System.ItemFolderPathDisplay FROM SYSTEMINDEX WHERE System.ItemFolderPathDisplay = 'C:\Utilisateurs\UserName\Desktop' AND System.ItemNameDisplay LIKE '%.xls%'", objConnection
 
If objRecordset.RecordCount <> 0 Then
objRecordset.MoveFirst
    Do While Not objRecordset.EOF
        For i = 0 To 1
            Debug.Print objRecordset(i)
        Next i
        objRecordset.MoveNext
    Loop
End If

objConnection.Close

End Sub

Testé avec Excel 2010 et Windows 7.

Bonne journée :)
 
Dernière édition:

Statistiques des forums

Discussions
312 220
Messages
2 086 381
Membres
103 199
dernier inscrit
ATS1