Partager via

Utilisation de VBA pour une recherche dans une colonne Excel

Anonyme
2021-01-08T22:45:33+00:00

J'ai créé une macro avec VBA pour une recherche d'un mot ou partie de mot dans une colonne VBA

Cela me donne:

******************

Sub Macro2 ()

' Macro2 Macro Recherche

    Sheets("Touttes").Select

    Columns("A:A").Select

    Selection.Find(What:="cake", After:=ActiveCell, LookIn:=xlFormulas2, _

        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _

        MatchCase:=False, SearchFormat:=False).Activate

    Selection.FindNext(After:=ActiveCell).Activate

End Sub

******************

Je désire maintenant exploiter les paramètres pour:

  1. Si TROUVé  :                            Utiliser le lien se trouvant sur cette colonne
  2. Si TROUVé mais pas le bon :   Continuer sur l'occurence suivante
  3. Si pas TROUVé :                       Relancer une nouvelle recherche

Limiter la recherche sur un nombre de ligne ou avec un paramètre (par ex : ZZZ fin de fichier)

Ou trouver les fonctions décrites :

Comme  After: ,  LookIn: , LookIAt: , MatchCase:  ,ainsi que les False, Activate..... etc.

Merci d'avance

Microsoft 365 et Office | Excel | Pour la maison | Windows

Question verrouillée. Cette question a été migrée à partir de la Communauté Support Microsoft. Vous pouvez voter pour indiquer si elle est utile, mais vous ne pouvez pas ajouter de commentaires ou de réponses ni suivre la question.

0 commentaires Aucun commentaire

21 réponses

  1. DanielCo 107.7K Points de réputation
    2021-01-17T08:55:21+00:00

    Bonjour,

    Qu'est-ce que tu entends par "recherche incorrecte" ? Sinon :

    Sub test()

      Dim Ligne As Long, C As Range, ResAdr As String, Recherche As String, Rep As String

      Sheets("Touttes").Select

      Recherche = InputBox("Que cherchez vous ?", "Recherche")

      If Recherche = "" Then

        Sheets("Actions").Select

        [B15] = "Recherche terminée volontairement"

        Exit Sub

      End If

      Set plage = Range("A1", Cells(Rows.Count, 1).End(xlUp))

      Set C = plage.Find(What:=Recherche, LookIn:=xlFormulas, _

          LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _

          MatchCase:=False, SearchFormat:=False)

      If Not C Is Nothing Then

        ResAdr = C.Address

         Do

          C.Select

          Rep = MsgBox("Est-ce que c'est bon ? " & C.Value, vbYesNo)

          If Rep = "6" Then

            ThisWorkbook.FollowHyperlink C.Hyperlinks(1).Address

            Sheets("Actions").Select

            [B15] = "Recherche terminé avec succès " & Recherche

            Exit Sub

          End If

          Set C = plage.FindNext(C)

          If C.Address = ResAdr Then Exit Do

        Loop While Not C Is Nothing

      Else

        Sheets("Actions").Select

        [B15] = "Recherche terminé sans succès " & Recherche

        Exit Sub

      End If

      Sheets("Actions").Select

    End Sub

    Daniel

    Cette réponse a-t-elle été utile ?

    1 personne a trouvé cette réponse utile.
    0 commentaires Aucun commentaire
  2. DanielCo 107.7K Points de réputation
    2021-01-10T08:43:24+00:00

    "ZZZ" n'est utile que dans la mesure où il y a des portions de la colonne A qu'il ne faut pas comprendre dans la recherche (Si on supprime "ZZZ", il faudra modifier la macro).

    Sub test()

        Dim Ligne As Long, C As Range, ResAdr As String, Recherche As String, Rep As String

        Sheets("Touttes").Select

        Recherche = InputBox("Que cherchez vous ?", "Recherche")

        If Recherche = "" Then Exit Sub

        If Not Range("A:A").Find("ZZZ", , , xlByRows, xlPrevious) Is Nothing Then

          Ligne = Range("A:A").Find("ZZZ", , , xlByRows, xlPrevious).Row

          Set C = Range("A1", Cells(Ligne, 1)).Find(What:="cake", LookIn:=xlFormulas, _

              LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _

              MatchCase:=False, SearchFormat:=False)

          If Not C Is Nothing Then

            ResAdr = C.Address

            Do

              Rep = MsgBox("Est-ce que c'est bon ? " & C.Value, vbYesNo)

              If Rep = "6" Then

                ThisWorkbook.FollowHyperlink C.Offset(, 1).Hyperlinks(1).Address

                Exit Sub

              End If

              Set C = Range("A1", Cells(Ligne, 1)).FindNext(C)

              If C.Address = ResAdr Then Exit Do

            Loop While Not C Is Nothing

          End If

        End If

    End Sub

    Daniel

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  3. Anonyme
    2021-01-09T23:00:58+00:00

    Oups, il manque une ligne :

    Sub test()

    ' Macro2 Macro Recherche

        Dim Ligne As Long, C As Range, ResAdr As String

        Sheets("Touttes").Select

        If Not Range("A:A").Find("ZZZ", , , xlByRows, xlPrevious) Is Nothing Then

          Ligne = Range("A:A").Find("ZZZ", , , xlByRows, xlPrevious).Row

          Set C = Range("A1", Cells(Ligne, 1)).Find(What:="cake", LookIn:=xlFormulas, _

              LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _

              MatchCase:=False, SearchFormat:=False)

          If Not C Is Nothing Then

            ResAdr = C.Address

            Do

    '          ThisWorkbook.FollowHyperlink C.Value

              Set C = Range("A1", Cells(Ligne, 1)).FindNext(C)

              If C.Address = ResAdr Then Exit Do

            Loop While Not C Is Nothing

          Else

            'Nouvelle recherche

          End If

        End If

    End Sub

    Daniel

    OK j'ai essayé cela fonctionne semble-t-il avec des bémols (normal)

    En effet je vais détailler ce qui manque

    On commence par question "Que cherchez vous" et on lit la réponse dans "variable xxx"

    Le mot cherché peut paraitre plusieurs fois:

    ligne xx cake au citron

    ligne xx +yy (plus loin Petit cake au jambon etc 

    il peut y avoir plusieurs ligne avec le mot

    Mais naturellement si on recherche avec le nom complet on trouve 1 seul cas

    C'est le but, avec une recherche courte on obtient successivement  chaque occurrence

    car on ne connait pas (en généra)l le terme exact.

    Donc il faut afficher Chaque occurrence >le fichier avec la ligne  sélectée

    et avec la question est-ce le bon

    Si NON on scan plus loin

    Si OUI alors cette ligne CONTIENT LE LIEN qui se trouve être aussi affiché sur la col B

    en continuant le programme l'affichage via clic sur cette cellule)

    Arrivé en fin de parcours la dernière ligne contient ZZZ ou on peut la définir ferme par ex A301

    Dans ce cas il faut relancer en disant PAS TROUVé, et en demandant une nouvelle recherche

    Merci de votre aide

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  4. DanielCo 107.7K Points de réputation
    2021-01-09T08:31:50+00:00

    Oups, il manque une ligne :

    Sub test()

    ' Macro2 Macro Recherche

        Dim Ligne As Long, C As Range, ResAdr As String

        Sheets("Touttes").Select

        If Not Range("A:A").Find("ZZZ", , , xlByRows, xlPrevious) Is Nothing Then

          Ligne = Range("A:A").Find("ZZZ", , , xlByRows, xlPrevious).Row

          Set C = Range("A1", Cells(Ligne, 1)).Find(What:="cake", LookIn:=xlFormulas, _

              LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _

              MatchCase:=False, SearchFormat:=False)

          If Not C Is Nothing Then

            ResAdr = C.Address

            Do

    '          ThisWorkbook.FollowHyperlink C.Value

              Set C = Range("A1", Cells(Ligne, 1)).FindNext(C)

              If C.Address = ResAdr Then Exit Do

            Loop While Not C Is Nothing

          Else

            'Nouvelle recherche

          End If

        End If

    End Sub

    Daniel

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  5. DanielCo 107.7K Points de réputation
    2021-01-09T07:50:39+00:00

    Bonjour,

    Essaie :

    Sub test()

    ' Macro2 Macro Recherche

        Dim Ligne As Long, C As Range, ResAdr As String

        Sheets("Touttes").Select

        If Not Range("A:A").Find("ZZZ", , , xlByRows, xlPrevious) Is Nothing Then

          Ligne = Range("A:A").Find("ZZZ", , , xlByRows, xlPrevious).Row

          Set C = Range("A1", Cells(Ligne, 1)).Find(What:="cake", LookIn:=xlFormulas, _

              LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _

              MatchCase:=False, SearchFormat:=False)

          If Not C Is Nothing Then

            ResAdr = C.Address

            Do

    '          ThisWorkbook.FollowHyperlink C.Value

              Set C = Range("A1", Cells(Ligne, 1)).FindNext(C)

            Loop While Not C Is Nothing

          Else

            'Nouvelle recherche

          End If

        End If

    End Sub

    Je n'ai pas su comment traiter le résultat de la recherche. Quel lien faut-il exécuter ? "Cake" ?

    Sinon, qu'est-ce que tu veux dire par "trouvé mais pas le bon" ?

    Si "pas trouvé", j'ai seulement mis un commentaire avec "nouvelle recherche".

    Pour utiliser l'aide en ligne, clique sur le mot voulu, par exemple "Find" et appuie sur la touche F1. Une page web s'ouvre dans ton navigateur.

    Daniel

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire