Amit a un dossier qui contient des centaines de classeurs Excel. Il doit rechercher dans tous les classeurs un texte spécifique et se demande s’il existe un moyen de rechercher dans tous les classeurs et de déterminer les noms des classeurs contenant le texte souhaité, ainsi que les cellules des classeurs qui contiennent ce texte.

Trouver les classeurs contenant le texte souhaité est relativement simple. Tout ce que vous avez à faire est d’utiliser les capacités de recherche de Windows pour rechercher des fichiers, dans le dossier unique, qui contiennent le texte souhaité. Bien qu’il ne vous indique pas les emplacements des cellules, il affichera la liste des fichiers.

Bien sûr, vous pouvez utiliser une macro pour effectuer votre recherche à votre place. (C’est toujours une bonne idée d’utiliser une macro pour effectuer le travail long et fastidieux qui serait autrement fait manuellement.) Ce qui suit va parcourir tous les classeurs d’un dossier et rechercher ce que vous voulez localiser. Il ouvrira tout fichier se terminant par xls * (l’astérisque de fin signifie qu’il recherchera les fichiers xls, xlsx et xlsm).

Sub SearchFolders()

Dim fso As Object     Dim fld As Object     Dim strSearch As String     Dim strPath As String     Dim strFile As String     Dim wOut As Worksheet     Dim wbk As Workbook     Dim wks As Worksheet     Dim lRow As Long     Dim rFound As Range     Dim strFirstAddress As String

On Error GoTo ErrHandler     Application.ScreenUpdating = False

'Change as desired     strPath = "c:\MyFolder"

strSearch = "Specific text"



Set wOut = Worksheets.Add     lRow = 1     With wOut         .Cells(lRow, 1) = "Workbook"

.Cells(lRow, 2) = "Worksheet"

.Cells(lRow, 3) = "Cell"

.Cells(lRow, 4) = "Text in Cell"

Set fso = CreateObject("Scripting.FileSystemObject")

Set fld = fso.GetFolder(strPath)



strFile = Dir(strPath & "\.xls")

Do While strFile <> ""

Set wbk = Workbooks.Open _               (Filename:=strPath & "\" & strFile, _               UpdateLinks:=0, _               ReadOnly:=True, _               AddToMRU:=False)



For Each wks In wbk.Worksheets                 Set rFound = wks.UsedRange.Find(strSearch)

If Not rFound Is Nothing Then                     strFirstAddress = rFound.Address                 End If                 Do                     If rFound Is Nothing Then                         Exit Do                     Else                         lRow = lRow + 1                         .Cells(lRow, 1) = wbk.Name                         .Cells(lRow, 2) = wks.Name                         .Cells(lRow, 3) = rFound.Address                         .Cells(lRow, 4) = rFound.Value                     End If                     Set rFound = wks.Cells.FindNext(After:=rFound)

Loop While strFirstAddress <> rFound.Address             Next

wbk.Close (False)

strFile = Dir         Loop         .Columns("A:D").EntireColumn.AutoFit     End With     MsgBox "Done"



ExitHandler:

Set wOut = Nothing     Set wks = Nothing     Set wbk = Nothing     Set fld = Nothing     Set fso = Nothing     Application.ScreenUpdating = True     Exit Sub

ErrHandler:

MsgBox Err.Description, vbExclamation     Resume ExitHandler End Sub

Pour personnaliser la routine selon vos besoins, modifiez la variable strPath pour refléter le chemin d’accès au dossier que vous souhaitez traiter et modifiez strSearch pour refléter le texte que vous recherchez. La macro crée une nouvelle feuille de calcul et place des « hits » dans chaque ligne. La colonne A contient le nom du classeur, la colonne B le nom de la feuille de calcul, la colonne C l’adresse de la cellule et la colonne D le contenu de cette cellule.

De toute évidence, toute macro comme celle-ci prend un peu de temps à s’exécuter. Vous pouvez raccourcir quelque peu le temps en réduisant le nombre de fichiers nécessaires à la recherche. La meilleure façon de procéder consiste à utiliser l’approche Windows Search (décrite au début de cette astuce) pour identifier les classeurs dans lesquels se trouve le texte souhaité. Déplacez ces classeurs vers leur propre dossier, puis effectuez la recherche de macro sur ce dossier.

_Note: _

Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites ExcelTips), j’ai préparé une page spéciale qui comprend des informations utiles.

lien: / excelribbon-ExcelTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur].

ExcelTips est votre source pour une formation Microsoft Excel rentable.

Cette astuce (5598) s’applique à Microsoft Excel 97, 2000, 2002 et 2003.