Macro Excel recherche multiple

Résolu
Tortue3 Messages postés 8 Statut Membre -  
Tortue3 Messages postés 8 Statut Membre -
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

  1. Papou93 Messages postés 146 Date d'inscription   Statut Membre Dernière intervention   59
     
    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
  2. Tortue3 Messages postés 8 Statut Membre
     
    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
    0
  3. Tortue3 Messages postés 8 Statut Membre
     
    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
    0
  4. Tortue3 Messages postés 8 Statut Membre
     
    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
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Papou93 Messages postés 146 Date d'inscription   Statut Membre Dernière intervention   59
     
    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.
    0
  7. Tortue3 Messages postés 8 Statut Membre
     
    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
    0