Sub Recherche(feuille As String, ajout As Boolean)
' ceci est une macro de recherche parametrée avec deux criteres
' critere 1 ---> Nom de la feuille
' critere 2 ---> Ajout si vrai, ajoute à la liste
' La feuille Travail est concernée, en colonne A, nous trouvons les n° de colonne à filtrer
' en colonne b, les valeurs à trouver
' en colonne c, le resultat de la recherche
Dim cellule As Range, i As Long ' Definition d'un objet range
If ajout <> True Then ' je remets à blanc la colonne trouve
Sheets("Travail").Range("C:C").ClearContents
Sheets("Travail").Range("C1") = "trouve"
End If
With Sheets(feuille) ' selon le nom de la feuille passée en parametre
For Each cellule In sheets("Travail").Range("A2:A" & sheets("Travail").range("A65535").end(xlup).row) ' je passe en revue tous les criteres definis en feuille travail
.Range("A1").AutoFilter Field:=cellule, Criteria1:=cellule.Offset(0, 1) ' Je lance le filtre
Next cellule
If .Range("A65535").End(xlUp).Row = 1 Then Sheets("Travail").Range("C2").Value = -1: GoTo fin ' Pas de valeur trouvées, je sors
' je passe en revue toute les lignes restantes (Colonne A, Toutes les base contiennent un code en colonne A)
For Each cellule In .Range("A1:A" & .Range("A65535").End(xlUp).Row).SpecialCells(xlCellTypeVisible)
' Je mets dans la colonne C de la feuille Travail toutes les lignes trouvées
If cellule.Row > 1 Then Sheets("Travail").Range("C" & Sheets("Travail").Range("C65535").End(xlUp).Row + 1) = cellule.Row
Next cellule
fin:
On Error Resume Next ' Showalldata peut provoquer une erreur si toutes les lignes sont visibles
.ShowAllData ' Réafficher toutes les valeurs
On Error GoTo 0
End With
End Sub