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 SubA 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 SubBonjour h2so4, merci pour le coup de main !!
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 SubCela fonctionne très bien merci beaucoup !