Vb recherche par box avec 2 conditions

Résolu/Fermé
julsof Messages postés 13 Date d'inscription jeudi 7 août 2008 Statut Membre Dernière intervention 23 septembre 2008 - 7 août 2008 à 12:32
julsof Messages postés 13 Date d'inscription jeudi 7 août 2008 Statut Membre Dernière intervention 23 septembre 2008 - 7 août 2008 à 17:28
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
A voir également:

3 réponses

Ivan-hoe Messages postés 433 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 17 octobre 2008 309
7 août 2008 à 15:28
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.
1
julsof Messages postés 13 Date d'inscription jeudi 7 août 2008 Statut Membre Dernière intervention 23 septembre 2008 1
7 août 2008 à 17:19
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.
0
julsof Messages postés 13 Date d'inscription jeudi 7 août 2008 Statut Membre Dernière intervention 23 septembre 2008 1
7 août 2008 à 17:28
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
0