Fonction recherche avec code VBA

Bonjour,

je suis membre d'une association de près de 500 membres; j'ai conçu un fichier excel qui contient des informations précises de chaque membre, une base de données en quelque sorte. je souhaiterais concevoir une interface pour faciliter la recherche de membres. les données sont dans la feuil2, alors j'ai créé un bouton de commande dans la feuil1 pour que lorsqu'on clique dessus un userform s'affiche, contenant des textbox pour la recherche et une zone pour afficher le résultat.
j'ai avancé jusqu'à ce niveau. le souci est que je ne sais plus comment éditer le code de recherche pour que tout fonctionne. pour illustrer j'ai fais un petit fichier en guise d'exemple (voir images)
merci de m'aider

11 réponses

  1. Contributeur
    Comme je l'ai fait ici:

    https://www.cjoint.com/

    Ensuite poster le lien

    Mettre une copie du classeur en ayant supprimé les données confidentielles. Les remplacer par des données anonymes pour la compréhension.
    0
    1. L'exemple marche bien, mais je ne sais pas comment l'adapter à mon fichier. Je voudrais t'envoyer le fichier pour que tu puisse y jeter un coup d'oeil, mais je sais pas comment joindre les fichiers.
      0
      1. Contributeur
        Voici un exemple:

        http://cjoint.com/data3/3IzpjOEIRkm.htm
        0
        1. Contributeur
          Mettre un UserForm avec un TextBox pour saisir le nom recherché et un Label pour l'afficher.

          Voici le code:

          Private Sub CommandButton1_Click()
          WorkbookFind
          Sheets("Feuil1").Select
          End Sub
          Sub WorkbookFind()
          Dim What, Response As String
          Dim found, FirstAddress
          What = UserForm1.TextBox1.Text
            If What = "" Then Exit Sub
            Feuil2.Activate
              Set found = Feuil2.Cells.Find(What)
              If Not found Is Nothing Then
                FirstAddress = found.Address
                Do
                  found.Activate
                 UserForm1.Label1.Caption = ActiveCell.Value
                ' Response = MsgBox("Continuer ?", vbYesNo + vbQuestion)
                 ' If Response = vbNo Then Exit Sub
                  Set found = Cells.FindNext(After:=ActiveCell)
                  If found.Address = FirstAddress Then Exit Do
                Loop
              End If
           'MsgBox "Recherche terminée !"
          End Sub
          


          IMPORTANT

          Pour travailler sur la feuille avec l'UserForm

          Allez dans les propriétés de l'UserForm

          Mettre la propriété ShowModal à False
          0
          1. Bonjour,
            Je crois que je n'ai pas été assez explicite
            J'ai pensé à concevoir un fichier excel qui se présente comme suis:

            -L'interface à la feuil1
            -Les données des membres à la feuil2
            -Les cotisations à la feuil3

            Voilà mon souhait:
            _Créer sur l'interface à la feuil1 un bouton de commande qui ouvre un userform de recherche des membres de la feuil2 (ok à ce stade)

            _Dans le formulaire des options de recherche par nom et par numéro de membre avec bouton VALIDER (ok)
            _Le résultat de la recherche doit s'afficher directement dans l'userform (blocage)
            _Je précise que la recherche ne doit pas ouvrir la feuil2, mais tirer les infos du membre recherché et les afficher dans l'userform sans quitter l'interface.

            C'est à ce stade que je suis bloqué car je m'y connais pas en code VBA; je ne sais pas quel code éditer pour que tout fonctionne. Merci pour votre aide.
            0
            1. Contributeur
              Tu peux le mettre là:

              Private Sub CommandButton1_Click()
              WorkbookFind
              Sheets("Feuil1").Select 
              End Sub
              


              Ou là:

              Sub WorkbookFind()
              Dim myValue, What, Response As String
              Dim found, FirstAddress
              myValue = InputBox("Entrez le nom à rechercher", "Recherche", "Monnom")
              What = myValue
                If What = "" Then Exit Sub
                Feuil2.Activate
                  Set found = Feuil2.Cells.Find(What)
                  If Not found Is Nothing Then
                    FirstAddress = found.Address
                    Do
                      found.Activate
                     UserForm1.TextBox1.Text = ActiveCell.Value
                     Response = MsgBox("Continuer ?", vbYesNo + vbQuestion)
                      If Response = vbNo Then Exit Sub
                      Set found = Cells.FindNext(After:=ActiveCell)
                      If found.Address = FirstAddress Then Exit Do
                    Loop
                  End If
               MsgBox "Recherche terminée !"
              Sheets("Feuil1").Select 
              End Sub


              Tu peux aussi supprimer les messages si tu veux.
              0
              1. ok merci
                0
            2. Je mets Sheets("Feuil1").Select dans quelle partie du code. je risque de tout mélanger. S'il te plait reédite le code complet pour moi. Merci d'avance
              0
              1. Contributeur
                Pour revenir sur la feuille1:

                Sheets("Feuil1").Select

                Pour travailler sur la feuille avec l'UserForm

                Allez dans les propriétés de l'UserForm

                Mettre la propriété ShowModal à False
                0
                1. Merci pour le code. Je l'ai testé ça marche super bien. mais le souci est que la recherche me ramène sur la feuille2, alors que je voudrais l'afficher dans un formulaire sans quitter la feuil1. Voici ce que donne l'Userform. Merci.
                  0
                  1. Merci, je vais essayé et te faire signe
                    0
                    1. Contributeur
                      Bonjour,

                      Mettre ceci:

                      Option Explicit
                      Private Sub CommandButton1_Click()
                      WorkbookFind
                      End Sub
                      Sub WorkbookFind()
                      Dim myValue, What, Response As String
                      Dim found, FirstAddress
                      myValue = InputBox("Entrez le nom à rechercher", "Recherche", "Monnom")
                      What = myValue
                        If What = "" Then Exit Sub
                        Feuil2.Activate
                          Set found = Feuil2.Cells.Find(What)
                          If Not found Is Nothing Then
                            FirstAddress = found.Address
                            Do
                              found.Activate
                             UserForm1.TextBox1.Text = ActiveCell.Value
                             Response = MsgBox("Continuer ?", vbYesNo + vbQuestion)
                              If Response = vbNo Then Exit Sub
                              Set found = Cells.FindNext(After:=ActiveCell)
                              If found.Address = FirstAddress Then Exit Do
                            Loop
                          End If
                       MsgBox "Recherche terminée !"
                      End Sub
                      


                      A adapter!
                      0