VBA et Windows Desktop Search...

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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...😕

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:
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 😎 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 😀). 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:
Bonjour,
objRecordset.RecordCount est inutile car il retourne toujours la position actuelle du curseur dans le recordset et retour un erreur si eof=bof.

objRecordset.MoveFirst a l'ouverture le recordset ce positionne toujours au premier enregistrement et de plus même punition si eof=bof

Tu n'as besoin que de ça
Code:
Do While Not objRecordset.EOF
        For i = 0 To objRecordset.fields.count -1
            Debug.Print objRecordset(i)
        Next i
        objRecordset.MoveNext
    Loop
 
Bonjour robert je t'invite a passer dans cette discution
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour