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, MemoAdresse As String
'Définir de la valeur à rechercher
MaValeur = ThisWorkbook.Sheets('XLD').Range('B32').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.Sheets(1).Columns(2)
Set C = .Find(MaValeur, LookIn:=xlValues)
If Not C Is Nothing Then
'Mémorise l'adresse de la 1ère cellule cible rencontrée
MemoAdresse = C.Address
Do
R = R + 1
ReDim Preserve ListeRetenus(1 To 3, 1 To R)
ListeRetenus(1, R) = ListeClasseurs(N)
ListeRetenus(2, R) = C.Offset(0, -1).Value
ListeRetenus(3, R) = C.Offset(0, 7).Value
Set C = .FindNext(C)
Loop While Not C Is Nothing And C.Address <> MemoAdresse
End If
End With
ActiveWorkbook.Close False
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 'La valeur ''' & MaValeur & ''' a été trouvée ' & UBound(ListeRetenus, 1) & ' fois en colonne B.'
End Sub