Sub toto()
Dim i&, j&, k&, l&
Dim oDat, sDat(), oTxt$
oDat = Feuil1.[A1].CurrentRegion.Value 'charge les données de la feuille Feuil1 (onglet DATA) dans le tableau oDat
With Feuil2 'référence à la feuille Feuil2 (onglet SELECTION)
oTxt = .[B1].Value 'charge le texte recherché dans la variable oTxt
l = 1
ReDim sDat(1 To UBound(oDat, 2), 1 To l) 'définit sDat comme tableau à autant de lignes que oDat comporte de colonnes, et à une ligne
If oTxt <> "" Then 'vérifie que le texte cherché n'est pas la chaîne vide
For j = 1 To UBound(oDat, 2) 'charge la premiére colonne de sDat avec la première ligne de oDat
sDat(j, 1) = oDat(1, j)
Next j
For i = 2 To UBound(oDat, 1) 'parcourt chaque ligne de oDat, à partir de la deuxième
For j = 1 To UBound(oDat, 2) 'pour chaque ligne de oDat, parcourt chaque colonne de oDat
If oDat(i, j) Like "*" & oTxt & "*" Then 'vérifie que l'item oDat(i,j) contient le texte cherché
l = l + 1
ReDim Preserve sDat(1 To UBound(sDat, 1), 1 To l) 'ajoute une colonne à sDat (cette colonne est la l-ième)
For k = 1 To UBound(oDat, 2) 'charge la l-ième colonne de sDat avec la l-iéme ligne de oDat
sDat(k, l) = oDat(i, k)
Next k
Exit For 'passe directement à la ligne suivante de oDat
End If
Next j
Next i
End If
.[A1].CurrentRegion.Offset(1, 0).ClearContents 'efface le résultat de la précédente recherche
.[A2].Resize(l, UBound(sDat, 1)).Value = WorksheetFunction.Transpose(sDat) 'affiche le résultat de la recherche
End With
End Sub