Public Sub ChercheMaValeur()
Dim Fichiers As Object, Classeur As Object, N As Integer, R As Integer
Dim ListeClasseurs As New Collection
Dim ListeRetenus() As Variant
Dim C As Range
Dim MaValeur As Variant
Dim Chemin As String
'Définir de la valeur à rechercher
MaValeur = ThisWorkbook.Sheets('Feuil1').Range('B24').Value
If MaValeur = '' Then
MsgBox 'Saisissez une valeur à rechercher !'
Exit Sub
End If
'Lister les Classeurs du dossier
Application.AskToUpdateLinks = False
Application.ScreenUpdating = False
Chemin = ThisWorkbook.Path
ThisWorkbook.Sheets('Résultats').Rows('2:65536').Delete
Set Fichiers = CreateObject('Scripting.FileSystemObject').getfolder(Chemin).Files
For Each Classeur In Fichiers
If Right(Classeur.Name, 3) = 'xls' Then
If Classeur.Name <> ThisWorkbook.Name Then
ListeClasseurs.Add Classeur.Name
End If
End If
Next
'Rechercher la valeur dans chaque classeur
For N = 1 To ListeClasseurs.Count
Application.EnableEvents = False
Workbooks.Open Chemin & '\' & ListeClasseurs(N)
Application.EnableEvents = True
With ActiveWorkbook
Set C = .Sheets(1).Columns(2).Find(MaValeur, LookIn:=xlValues)
If Not C Is Nothing Then
R = R + 1
ReDim Preserve ListeRetenus(1 To 2, 1 To R)
ListeRetenus(1, R) = ListeClasseurs(N)
ListeRetenus(2, R) = C.Offset(0, -1).Value
End If
.Close False
End With
Next N
'MAJ de la liste des classeurs retenus
ListeRetenus = Application.Transpose(ListeRetenus)
With ThisWorkbook.Sheets('Résultats')
.Activate
.Range(.Cells(2, 1), .Cells(UBound(ListeRetenus, 1) + 1, _
UBound(ListeRetenus, 2))).Value = ListeRetenus
.Columns('A:B').AutoFit
End With
Application.ScreenUpdating = True
Application.AskToUpdateLinks = True
MsgBox UBound(ListeRetenus, 1) & ' Classeurs contenant ''' & MaValeur & _
''' en colonne B.'
End Sub