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
A voir également:
- Vb recherche par box avec 2 conditions
- Supercopier 2 - Télécharger - Gestion de fichiers
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Recherche par image - Guide
- Whatsapp avec 2 sim - Guide
- Adresse ip box - Guide
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.
N'hésite pas à consulter l'aide VBA ; c'est là que j'ai trouvé tout ce qu'il fallait pour ta macro.
I.
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.
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.