Macro Excel recherche multiple

Résolu
Bonjour,
J'aimerais écrire une macro excel qui me permettrait de vérifier si le contenu de ma cellule appartient à une liste de valeur prédéfinie ou est présente dans une plage d'autres cellules précise. Et si oui de faire telle ou telle action
Par exemple j'ai une longue liste de mots prédéfinie : mairie, conseil général, conseil régional, société, etc... Cette liste peut être soit dans une plage de cellules soit précisée dans la macro.
Je veux savoir si ma cellule contient un de ces mots et si oui faire telle action

Du genre :
If maCellule Is In (mairie, conseil général, conseil régional, société, etc... ) then...

Merci pour votre aide
Configuration: Windows 2000
Internet Explorer 6.0

6 réponses

  • Votes
  • Date
  • Date décroissante
  1. Bonjour Tortue3,

    Une macro de ce style devrait pouvoir te convenir :

    Sub Trouve()
    With Worksheets("Feuil1").Range("a1:a40")
    Set c = .Find(Range("b1").Value, LookIn:=xlValues)
    If Not c Is Nothing Then
    Range("c1") = "Trouvé"
    Else
    Range("c1") = "Non trouvé"
    End If
    End With

    End Sub

    Dans cet exemple, la plage de valeurs est en "a1:a40" et la valeur cherchée est en "b1". Le résultat de la recherche s'affiche en "c1".
    Il te sera facile d'adapter ce code à ton cas particulier.

    Espérant avoir répondu,

    Cordialement.
    1. Bonjour,
      Merci pour cette réponse. Mais j'ai un message d'erreur "Erreur d'exécution '1004' : la méthode 'Range' de l'objet '_Worksheet' a échoué. Voici mon code : rech correspond à ma recherche sur la 13ème cellule à droite de la cellule active et AM1:AP1 sont les cellules qui contiennent ma liste de mots recherchés. Si je trouve un des mots et que la 22ème cellule à droite de la cellule active cotient '12' je mets ces deux cellules (13ème et 22ème) en Vert Pale et j'affiche une infobulle.

      With Feuil1.Range("AM1:AP1")
      Set rech = .Find(Range(ActiveCell.Offset(0, 13)).Value, LookIn:=xlValues)
      If Not rech Is Nothing And (ActiveCell.Offset(0, 22) Like "12") Then
      ActiveCell.Offset(0, 22).Select
      Application.Run "ThisWorkbook.VertPale"

      'Dévalide les messages d'erreur
      Selection.Validation.Delete

      'Affiche le message d'erreur
      Erreur = "Nature juridique incompatible avec le nom"
      With Selection.Validation
      .Add Type:=xlValidateInputOnly, AlertStyle:=xlValidAlertStop, Operator:=xlBetween
      .IgnoreBlank = True
      .InCellDropdown = True
      .InputMessage = Erreur
      .ShowInput = True
      .ShowError = True
      End With

      ActiveCell.Offset(0, -9).Select
      Application.Run "ThisWorkbook.VertPale"

      'Dévalide les messages d'erreur
      Selection.Validation.Delete

      'Affiche le message d'erreur
      Erreur = "Cf. nature juridique = " & ActiveCell.Offset(0, 9).Value
      With Selection.Validation
      .Add Type:=xlValidateInputOnly, AlertStyle:=xlValidAlertStop, Operator:=xlBetween
      .IgnoreBlank = True
      .InCellDropdown = True
      .InputMessage = Erreur
      .ShowInput = True
      .ShowError = True
      End With
      'Taille de la colonne à 35
      Selection.ColumnWidth = 35

      ActiveCell.Offset(0, -13).Select
      Application.Run "ThisWorkbook.Violet"
      End If
      End With
      1. Autant pour moi... J'ai remplacé Set rech = .Find(Range(ActiveCell.Offset(0, 13)).Value, LookIn:=xlValues) par
        Set rech = .Find(ActiveCell.Offset(0, 13).Value, LookIn:=xlValues) et ça marche...

        Merci infiniment
        1. Ca marche, mais à condition que ma cellule cible de recherche contienne exactement un des mots de la plage prédéfinie. Si ma cellule cible contient "MAIRIE DE NICE" et que ma plage de mots recherchés ne contient que "MAIRIE", "CONSEIL", "SOCIETE", la macro ne trouve rien.
          Est-ce qu'il y a moyen de faire que la recherche se fasse sur une partie seulement de la chaîne de caractères.
          Par exemple si ma cellule cible contient "MAIRIE DE NICE" ou "CONSEIL GENERAL DES ALPES MARITIMES" et je veux que "rech" ne porte que sur "MAIRIE" et "CONSEIL" (comme LIKE "*MAIRIE*" et LIKE "*CONSEIL*).

          Merci de votre aide
          1. Bonjour Tortue3,

            Oui, c'est possible.

            Dans l'exemple suivant, les critères de recherche sont dans les cellules "B1" et "C1", et la plage de recherche est "A1:A40". Si les chaines recherchées sont trouvées, le texte est passé en rouge.

            Il ne te reste plus qu'à adapter ce code à ton cas personnel.

            Sub Trouve1()
            For Each cel In Sheets(1).Range("a1:a40")
            If InStr(cel.Value, Range("b1").Value) Or InStr(cel.Value, Range("c1").Value) Then
            cel.Font.ColorIndex = 3
            Else
            cel.Font.ColorIndex = xlAutomatic
            End If
            Next

            End Sub


            Cordialement.
            1. Merci beaucoup. C'est exactement ce qu'il me fallait !!

              Pour info voilà le résultat :

              For Each Cellule In Range("AM8:AM10") ==> pour chaque Cellule de la plage qui contient mes mots à rechercher
              If InStr(ActiveCell.Offset(0, 13).Value, Cellule) _ ==> recherche dans la 13ème cellule à droite la valeur de Cellule
              And (ActiveCell.Offset(0, 22) Like "12") Then
              ActiveCell.Offset(0, 22).Select
              Application.Run "ThisWorkbook.VertPale"

              'Dévalide les messages d'erreur
              Selection.Validation.Delete

              'Affiche le message d'erreur
              Erreur = "Nature juridique incompatible avec le nom"
              With Selection.Validation
              .Add Type:=xlValidateInputOnly, AlertStyle:=xlValidAlertStop, Operator:=xlBetween
              .IgnoreBlank = True
              .InCellDropdown = True
              .InputMessage = Erreur
              .ShowInput = True
              .ShowError = True
              End With

              ActiveCell.Offset(0, -9).Select
              Application.Run "ThisWorkbook.VertPale"

              'Dévalide les messages d'erreur
              Selection.Validation.Delete

              'Affiche le message d'erreur
              Erreur = "Cf. nature juridique = " & ActiveCell.Offset(0, 9).Value
              With Selection.Validation
              .Add Type:=xlValidateInputOnly, AlertStyle:=xlValidAlertStop, Operator:=xlBetween
              .IgnoreBlank = True
              .InCellDropdown = True
              .InputMessage = Erreur
              .ShowInput = True
              .ShowError = True
              End With
              'Taille de la colonne à 35
              Selection.ColumnWidth = 35

              ActiveCell.Offset(0, -13).Select
              Application.Run "ThisWorkbook.Violet"
              End If
              Next