Evolution d'une macro de recherche

Bonjour à tous,

Je suis en train de mettre en place une base de données dans laquelle j'ai réussi tant bien que mal à créer une fonction recherche (via InputBox) qui permet en fonction du code rechercher (en colonne A) de se rendre directement sur la ligne en question, j'aimerais maintenant faire évoluer cette recherche en 2 points:

1er point: Faire en sorte que la recherche masque les lignes qui ne nous intéressent pas. Pour une question de lisibilité il est important d'isoler la ligne voulu, en réalité LES lignes car il y a une ligne servant d'en-tête pour chaque code qui doit aussi apparaître, ce qui est le point bloquant pour l'initié en VBA que je suis.

2ème point : Que lorsque l'on recherche un code qui n'est pas référencé la recherche sélectionne la première ligne vide pour créer le code voulu (ce qui est déjà le cas) mais qu'en plus une MsgBox apparaisse pour confirmer que le code n'existe pas, je n'ai pas réussis cela sans éviter que la MsgBox boucle car les lignes qui suivent sont aussi vides.

Voici la recherche sur laquelle j'ai fait mes essais.

Sub recherche()

Message = "Entrer le code article"
Title = "Recherche d'une pièce"
MyValue = InputBox(Message, Title, Default)
Range("A3").Select
For I = 1 To 5000
If ActiveCell.Value = MyValue Then GoTo Fin
If ActiveCell.Value = "" Then GoTo Fin
ActiveCell.Offset(1, 0).Range("A1").Select
Next
Fin:
End Sub

A l'écoute de vos conseils et astuces, n'hésitez pas si je ne suis pas clair sur certain point.

Merci d'avance pour vos réponses. (Excel 2010)

bonjour,

une proposition

ub recherche()
    Cells.AutoFilter 'enlever filtre
    Message = "Entrer le code article"
    Title = "Recherche d'une pièce"
    myvalue = InputBox(Message, Title, Default)
    dl = Cells(Rows.Count, 1).End(xlUp).Row 'dernière ligne non vide
    Set pl = Range("A1:A" & dl) 'plage de recherche
    Set re = pl.Find(myvalue, lookat:=xlWhole) 'on vérifie si myvalue existe
    If re Is Nothing Then 'non trouvé
        MsgBox "pièce " & myvalue & " non trouvée"
        Cells(dl + 1, 1).Select
    Else 'on affiche toutes les lignes contenant myvalue en colonne A
        Cells.AutoFilter Field:=1, Criteria1:=myvalue
    End If
End Sub

Bonjour h2so4, merci pour le coup de main !! Ta proposition fonctionne mais à un détail prêt, j'ai omis un détail qui a sûrement son importance : la cellule à rechercher est une fusion de plusieurs lignes (toujours sur la colonne A).

En faisant la recherche de "1" par exemple, seul la ligne 10 s'affiche pour un affichage souhaité des lignes 10 à 16 ainsi que de l'en-tête en L2. je ne sais pas si l'on peut déjouer cela mais c'est la raison pour la quelle j'ai tenter de faire sans les filtres au départ.

bonjour,

regarde si ceci peut te convenir

Sub recherche()
    Rows.Hidden = False
    Message = "Entrer le code article"
    Title = "Recherche d'une pièce"
    myvalue = InputBox(Message, Title, Default)
    trouve = False
    fini = False
    d = 3
    dl = Cells(Rows.Count, 1).End(xlUp).Row
    dl = dl + Cells(dl, 1).MergeArea.Rows.Count - 1
    Do
        'dernière ligne non vide
        Set pl = Range("A" & d - 1 & ":A" & dl)  'plage de recherche
        Set re = pl.Find(myvalue, lookat:=xlWhole)    'on vérifie si myvalue existe
        If re Is Nothing Then
            fini = True
        Else    'on affiche toutes les lignes contenant myvalue en colonne A
            If re.Row > 3 Then
                Rows(d & ":" & re.Row - 1).Hidden = True
            End If
            d = re.Row + re.MergeArea.Rows.Count
            trouve = True
        End If
    Loop Until fini
    If d <> 3 Then Rows(d & ":" & dl).Hidden = True
    If Not trouve Then
        MsgBox "article " & myvalue & " non trouvé "
        Cells(dl + 1, 1).Select
    End If
End Sub

Cela fonctionne très bien merci beaucoup !

Rechercher des sujets similaires à "evolution macro recherche"