Bonjour Axel, Ddetp, bonjour le forum,
Une autre proposition où seules apparaissent dans la base de données les lignes contenant le mot (en entier ou en partie) édité en B1.
À la sortie de l'onglet BD les lignes sont à nouveau toutes visibles.
Le code de l'onglet Recherche :
Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet
Dim B As Worksheet 'déclare la variable b (Base)
Dim TC As Variant 'déclare la variable TC (Tableau de Cellules)
Dim NL As Integer 'déclare la variable NL (Nombre de Lignes)
Dim NC As Byte 'déclare la variable NC (Nombre de colonnes)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Byte 'déclare la variable J (incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)
'si le changement a lieu ailleurs q'en B1 ou si B1 est effacée, sort de la procédure
If Target.Address <> "$B$1" Or Range("B1").Value = "" Then Exit Sub
Application.ScreenUpdating = True 'masque les rafraîchissement d'écran
Set B = Sheets("BD") 'définit l'onglet base B
B.Rows.Hidden = False 'affiche toutes les lignes de l'onglet B
TC = B.Range("A1").CurrentRegion 'définit le tableau de cellules TC
NL = UBound(TC, 1) 'définit le nombre de lignes NL du tableau de cellules TC
NC = UBound(TC, 2) 'définit le nombre de colonnes NC du tableau de cellules TC
For I = 2 To NL 'boucle 1 : sur toutes les lignes I du tableau de cellules TC (en partant de la seconde)
For J = 1 To NC 'boucle 2 : sur toutes les colonnes J du tableau de cellules TC
'condition : si la valeur de la cellule B1 est contenue dans la valeur ligne I colonne J de TC
If InStr(1, TC(I, J), Range("B1"), vbTextCompare) <> 0 Then
ReDim Preserve TL(K) 'redimensionne le tableau de lignes TL
TL(K) = I 'récupère le numéro de ligne I contenant la valeur en A1
K = K + 1 'incrémente K
Exit For 'sort de la boujcle 2
End If 'fin de la condition
Next J 'prochaine colonne de la boucle 2
Next I 'prochaine ligne de la boucle 1
B.Rows.Hidden = True 'masque toutes les lignes de l'onglet B
B.Rows(1).Hidden = False 'affiche la ligne 1 de l'onglet B
If K > 0 Then 'condition : si au moins une occurrence a été trouvée
For I = LBound(TL) To UBound(TL) 'boucle sur tous les éléments du tableau de lignes TL
B.Rows(TL(I)).Hidden = False 'affiche la ligne TL(I) de l'onglet B
Next I 'prochaine élément de la boucle
Application.ScreenUpdating = True 'affiche les rafraîchissement d'écran
Else 'sinon
MsgBox "Aucunne occurrence trouvée !" 'message
End If 'fin de la condition
B.Select 'sélectionnela base B
ActiveCell.Range("A1").Select 'sélectionne la cellule A1 de la base B
End Sub
Le code de l'onglet BD :
Private Sub Worksheet_Deactivate()
Rows.Hidden = False
End Sub