Vb recherche par box avec 2 conditions
Résolu
julsof
Messages postés
13
Statut
Membre
-
julsof Messages postés 13 Statut Membre -
julsof Messages postés 13 Statut Membre -
Bonjour,
je suis débutant en vb (vraiment) et j'essaie de trouver une solution pour faire une recherche sur une feuille excel, en inscrivant 2 conditions.
Je m'explique :
j'ai créer une macro qui ouvre une box me demandant un critère de recherche, ensuite je fais apparaitre la réponse dans plusieurs cellules. Pas de problème avec ça.
Par contre j'aimerai avoir une macro qui ouvre une première box me demandant le premier critere de recherche (par ex : le prenom) puis une deuxième box enchainée qui me demanderai un deuxième critère de recherche (par ex : le nom).
En fait je voudrais solutionné ce problème :
si 2 personnes de ma base ont le même nom, lorsque j'effectue ma macro de recherche, la réponse renvoyée est la première personne de la liste avec le nom recherché, alors j'amerais pouvoir faire une recherche plus approfondie, ou alors que je puisse choisir parmi les résultas de même nom.
J'espère me faire comprendre, sinon dites le moi.
voici un bout de mon (pauvre code).
Sub recherche_client()
Dim recherche_client As String
recherche_client = InputBox("Entrez une information client: ", "recherche client")
Sheets("Clients").Select
Cells.Find(What:=recherche_client, After:=ActiveCell, LookIn:=x1Values, LookAt:= _
x1Part, SearchOrder:=x1ByRows, SearchDirection:=x1Next, MatchCase:=False _
, SearchFormat:=False).Activate
End Sub
je suis débutant en vb (vraiment) et j'essaie de trouver une solution pour faire une recherche sur une feuille excel, en inscrivant 2 conditions.
Je m'explique :
j'ai créer une macro qui ouvre une box me demandant un critère de recherche, ensuite je fais apparaitre la réponse dans plusieurs cellules. Pas de problème avec ça.
Par contre j'aimerai avoir une macro qui ouvre une première box me demandant le premier critere de recherche (par ex : le prenom) puis une deuxième box enchainée qui me demanderai un deuxième critère de recherche (par ex : le nom).
En fait je voudrais solutionné ce problème :
si 2 personnes de ma base ont le même nom, lorsque j'effectue ma macro de recherche, la réponse renvoyée est la première personne de la liste avec le nom recherché, alors j'amerais pouvoir faire une recherche plus approfondie, ou alors que je puisse choisir parmi les résultas de même nom.
J'espère me faire comprendre, sinon dites le moi.
voici un bout de mon (pauvre code).
Sub recherche_client()
Dim recherche_client As String
recherche_client = InputBox("Entrez une information client: ", "recherche client")
Sheets("Clients").Select
Cells.Find(What:=recherche_client, After:=ActiveCell, LookIn:=x1Values, LookAt:= _
x1Part, SearchOrder:=x1ByRows, SearchDirection:=x1Next, MatchCase:=False _
, SearchFormat:=False).Activate
End Sub
Configuration: Windows XP Internet Explorer 7.0 excel 2003
3 réponses
-
Bonjour julsof,
le plus simple serait sans doute de créer un formulaire avec 2 listes déroulantes, la seconde se mettant à jour en fonction de la première.
Mais puisque tu as commencé avec une InputBox et une méthode Find, continuons dans ce sens.
Repartant de ton code, j'ai simplement ajouté quelques sécurités (dans le cas où on annule l'InputBox ou si la recherche ne donne rien) ; puis, si la recherche du nom renvoie plusieurs lignes, une deuxième boîte demande de préciser le prénom, en rappelant dans l'intitulé la liste des prénoms trouvés.
Attention : le code ci-dessous marche si tes noms sont en colonne A et les prénoms en colonne B. Sinon, il faut apporter des petites modifications à la macro. De plus, ce n'est pas très adapté si tu as des dizaines de noms identiques.
Sub recherche_client() Dim recherche_client As String Dim Cellule As Range, ListeCellules As Range Dim ListeNoms As String, Adresse1 As String Sheets("Clients").Select SAISIE_NOM: recherche_client = InputBox("Entrez le nom du client: ", "recherche client") If recherche_client = Empty Then Exit Sub Set Cellule = Columns("A").Find _ (What:=recherche_client, LookIn:=xlValues, LookAt:=xlPart) If Cellule Is Nothing Then MsgBox "Aucune réponse pour " & recherche_client GoTo SAISIE_NOM End If Adresse1 = Cellule.Address Set ListeCellules = Cellule.Offset(0, 1) Do ListeNoms = ListeNoms & Chr(10) & _ Cellule.Value & ", " & Cellule.Offset(0, 1).Value Set Cellule = Columns("A").FindNext(Cellule) Set ListeCellules = Union(ListeCellules, Cellule.Offset(0, 1)) Loop Until Cellule Is Nothing Or Cellule.Address = Adresse1 SAISIE_PRENOM: If ListeCellules.Count > 1 Then recherche_client = InputBox("Précisez le prénom : " & Chr(10) & ListeNoms) If recherche_client = Empty Then Exit Sub Set Cellule = ListeCellules.Find _ (What:=recherche_client, LookIn:=xlValues, LookAt:=xlPart) If Cellule Is Nothing Then MsgBox "Aucune réponse pour " & recherche_client GoTo SAISIE_PRENOM End If End If Cellule.EntireRow.Select End Sub
N'hésite pas à consulter l'aide VBA ; c'est là que j'ai trouvé tout ce qu'il fallait pour ta macro.
I. -
Merci beaucoup de ta réponse.
Je vais me pencher sur le sujet dès maintenant.
Désolé pour la question qui va suivre mais ou se trouve l'aide VBA (comme je le disais je suis vraiment novice dans le VBA et dans les forums, en fait c'est ma première inscription.
En tous cas merci beaucoup pour ton aide. -
Re bonjour Ivan-hoe,
j'ai essayé d'intégrer le code et tout est exactement comme je le souhaitais.
Je te remercie encore pour ton aide précieuse