Modifications sur une macro [Excel]

Résolu
Bonjour,

Je souhaiterais effectuer quelques modifications sur la macro suivante, mais je ne sais pas trop comment m'y prendre (je débute en VBA). C'est une macro qui fonctionne un peu comme la fonction Ctrl+F pour rechercher un mot, sauf que c'est pour un glossaire et que j'aimerais que la recherche s'effectue sur toute la colonne A seulement.
Une fois que la recherche est terminée, si je clique sur suivant la sélection se porte sur la cellule suivante qui n'a plus rien à voir avec le mot recherché, or, j'aimerais qu'une fois la recherche terminée la fenêtre se ferme.

mot = InputBox("Entrez le mot à rechercher")
For Feuille = 1 To Sheets.Count
On Error Resume Next
Sheets(Feuille).Select
On Error GoTo 0
Set trouvé1 = Cells.Find(what:=mot)
If Not trouvé1 Is Nothing Then
trouvé1.Activate
étiq:
If MsgBox("Suivant ?", 4) = vbNo Then Exit Sub
Set trouvé2 = Cells.FindNext(After:=ActiveCell)
If trouvé2.Column <> trouvé1.Column Or trouvé2.Row <> trouvé1.Row Then
trouvé2.Activate
GoTo étiq
End If
End If
Next Feuille
End Sub

Merci pour votre aide.
Configuration: Windows XP Internet Explorer 7.0

17 réponses

  1. bonjour,
    ajouter la ligne en gras, cela conviendra peut être

    mot = InputBox("Entrez le mot à rechercher")
    For Feuille = 1 To Sheets.Count
    On Error Resume Next
    Sheets(Feuille).Select
    Columns("A:A").Select
    1. Merci de ta réponse giheller, mais ça ne fonctionne pas, toute la feuille est sélectionnée et la recherche s'effectue toujours dans toutes les colonnes...
      1. Salut giheller,

        Je ne peux pas enlever Sheets(Feuille).Select car j'en ai besoin pour que la recherche s'effectue dans tous les onglets de mon classeur. Je pense que ça ne fonctionne pas avec
        Sheets(Feuille).Select
        Columns("A:A").Select
        car la sélection se fait de la colonne A pour le premier onglet à la colonne A pour le dernier onglet donc la recherche ne s'effectue pas dans la seule colonne A mais pour toutes les colonnes du classeur.
        1. Contributeur
          mot = InputBox("Entrez le mot à rechercher")
          For Feuille = 1 To Sheets.Count
          Worksheets(Feuille).Activate
          With Worksheets(Feuille).Range("a1:a500")
          Set trouvé1 = .Find(mot, LookIn:=xlValues)
          étiq:
          If Not trouvé1 Is Nothing Then
          NumRow = trouvé1.Row
          trouvé1.Activate
          If MsgBox("Suivant ?", 4) = vbNo Then Exit Sub
          Set trouvé1 = .FindNext(trouvé1)
          If NumRow < trouvé1.Row Then GoTo étiq

          End If
          End With
          Next Feuille
          1. merci jjsteing, mais après avoir testé plusieurs fois ton code, je me suis rendu compte qu'il ne fonctionne pas toujours très bien, la recherche s'effectue souvent dans toutes les colonnes des onglets et pas uniquement dans la colonne A.
            1. Contributeur
              Chez moi il ne recherche que dans A.. ce qui est normal au vu de : With Worksheets(Feuille).Range("a1:a500")

              Si ca ne cherche pas que dans A chez toi c'est que tu as modifier cette ligne
              1. Ah oui pardon j'avais du me tromper en recopiant le code...
                Est-ce que tu pourrais m'aider pour une dernière chose, j'aimerais que lorsque l'ordinateur arrive à la fin de la recherche d'un terme donné, c'est phrase s'affiche : "il n'y a plus d'occurrences pour ce terme, veuillez effectuer une nouvelle recherche".
                1. Mot = InputBox("Entrez le mot à rechercher")
                  For Feuille = 1 To Sheets.Count
                  Worksheets(Feuille).Activate
                  With Worksheets(Feuille).Range("a1:a500")
                  Set trouvé1 = .Find(mot, LookIn:=xlValues)
                  étiq:
                  If Not trouvé1 Is Nothing Then
                  NumRow = trouvé1.Row
                  trouvé1.Activate
                  If MsgBox("Suivant ?", 4) = vbNo Then Exit Sub
                  Set trouvé1 = .FindNext(trouvé1)
                  If NumRow < trouvé1.Row Then GoTo étiq
                  Else
                  msgbox("il n'y a plus d'occurrences pour ce terme, veuillez effectuer une nouvelle recherche")
                  End If
                  End With
                  Next Feuille
                  1. Contributeur
                    petite présition sur le code de Bidouilleur_R: a cette endroit il va t afficher le message pour chaque changement de page.. si tu veux qu il te l affiche à la fin de la recheche, il faut le mettre apres le next feuille
                    1. Tout juste!
                      et le "End if" peut aller à la ligne... plus lisible
                      Faut que j'améliore la mise en forme, moi.
                      A+
                      1. Merci pour vos réponses jjsteing et Bidouilleu_R !
                        Je viens de tester le code, mais un problème subsiste (décidémment je suis vraiment pas douée) :
                        Je tape donc ce code :

                        mot = InputBox("Entrez le mot à rechercher")
                        For Feuille = 1 To Sheets.Count
                        Worksheets(Feuille).Activate
                        With Worksheets(Feuille).Range("a1:a500")
                        Set trouvé1 = .Find(mot, LookIn:=xlValues)
                        étiq:
                        If Not trouvé1 Is Nothing Then
                        NumRow = trouvé1.Row
                        trouvé1.Activate
                        If MsgBox("Suivant ?", 4) = vbNo Then Exit Sub
                        Set trouvé1 = .FindNext(trouvé1)
                        If NumRow < trouvé1.Row Then GoTo étiq
                        Else
                        End With
                        Next Feuille
                        MsgBox ("il n'y a plus d'occurrences pour ce terme, veuillez effectuer une nouvelle recherche")
                        End If

                        End Sub

                        Et il me dit "erreur de compilation : End With sans With" (alors qu'il y a bien un With)...
                        1. Contributeur
                          aie aie aie !!!

                          petite regle très très importante !!! toujours respecter l'ordre d'ouverture et fermeture des boucles (for, while, with, if,...)

                          ton ton exemple tu as:

                          For
                          With
                          if 'n°1
                          if 'N°2
                          if 'N°3
                          else 'else de N°3 d'ailleurs il sert a rien, vu que y a pas de code apres
                          '----------
                          maque ici 3 end if pour N°3, N°2 et N°1
                          '---------
                          End With
                          Next
                          end if ' n'a rien a faire là

                          ==>

                          mot = InputBox("Entrez le mot à rechercher")
                          For Feuille = 1 To Sheets.Count
                          Worksheets(Feuille).Activate
                          With Worksheets(Feuille).Range("a1:a500")
                          Set trouvé1 = .Find(mot, LookIn:=xlValues)
                          étiq:
                          If Not trouvé1 Is Nothing Then
                          NumRow = trouvé1.Row
                          trouvé1.Activate
                          If MsgBox("Suivant ?", 4) = vbNo Then Exit Sub
                          Set trouvé1 = .FindNext(trouvé1)
                          If NumRow < trouvé1.Row Then GoTo étiq 'pas besoin de end if pour celui ci vu qu il n'y a qu'une ligne
                          End if
                          End if
                          End With
                          Next Feuille
                          MsgBox ("il n'y a plus d'occurrences pour ce terme, veuillez effectuer une nouvelle recherche")

                          je t'ai indenter pour que tu vois mieux la logique ;) et je te conseil de faire pareil quand tu code, c'est plus lisible ;)
                          1. Bonjour,
                            Corrigé!
                            un petit oubli : )

                            Sub test()
                            mot = InputBox("Entrez le mot à rechercher")
                            For Feuille = 1 To Sheets.Count
                            Worksheets(Feuille).Activate
                            With Worksheets(Feuille).Range("a1:a500")
                            Set trouvé1 = .Find(mot, LookIn:=xlValues)
                            étiq:
                            If Not trouvé1 Is Nothing Then
                            NumRow = trouvé1.Row
                            trouvé1.Activate
                            If MsgBox("Suivant ?", 4) = vbNo Then Exit Sub
                            Set trouvé1 = .FindNext(trouvé1)
                            If NumRow < trouvé1.Row Then GoTo étiq
                            Else

                            End If

                            End With
                            Next Feuille
                            MsgBox ("il n'y a plus d'occurrences pour ce terme, veuillez effectuer une nouvelle recherche")

                            End Sub
                            1. Contributeur
                              ok, et ca tourne là alors ? si oui, met ton post en résolu :)

                              ps.. l indentation ne s'est pas marqué :s CCM doit supprimer les espaces en debut de ligne :S
                              1. Comme ça c'est plus lisible

                                Sub test()
                                mot = InputBox("Entrez le mot à rechercher")
                                    For Feuille = 1 To Sheets.Count
                                        Worksheets(Feuille).Activate
                                        With Worksheets(Feuille).Range("a1:a500")
                                        Set trouvé1 = .Find(mot, LookIn:=xlValues)
                                étiq:
                                        If Not trouvé1 Is Nothing Then
                                        NumRow = trouvé1.Row
                                        trouvé1.Activate
                                            If MsgBox("Suivant ?", 4) = vbNo Then Exit Sub
                                            Set trouvé1 = .FindNext(trouvé1)
                                                If NumRow < trouvé1.Row Then GoTo étiq
                                            
                                            End If
                                        
                                    End With
                                Next Feuille
                                MsgBox ("il n'y a plus d'occurrences pour ce terme, veuillez effectuer une nouvelle recherche")
                                
                                
                                End Sub
                                1. Waouuu ça marche ! Merci beaucoup à tous les 2 pour votre aide !