Macro Excel recherche multiple

Résolu/Fermé
Tortue3 Messages postés 8 Date d'inscription vendredi 21 septembre 2007 Statut Membre Dernière intervention 26 septembre 2007 - 21 sept. 2007 à 15:36
Tortue3 Messages postés 8 Date d'inscription vendredi 21 septembre 2007 Statut Membre Dernière intervention 26 septembre 2007 - 26 sept. 2007 à 12:34
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
A voir également:

6 réponses

Papou93 Messages postés 146 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 5 juin 2012 59
21 sept. 2007 à 19:06
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
Tortue3 Messages postés 8 Date d'inscription vendredi 21 septembre 2007 Statut Membre Dernière intervention 26 septembre 2007
24 sept. 2007 à 09:48
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
Tortue3 Messages postés 8 Date d'inscription vendredi 21 septembre 2007 Statut Membre Dernière intervention 26 septembre 2007
24 sept. 2007 à 10:02
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
Tortue3 Messages postés 8 Date d'inscription vendredi 21 septembre 2007 Statut Membre Dernière intervention 26 septembre 2007
24 sept. 2007 à 10:31
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Papou93 Messages postés 146 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 5 juin 2012 59
25 sept. 2007 à 09:19
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
Tortue3 Messages postés 8 Date d'inscription vendredi 21 septembre 2007 Statut Membre Dernière intervention 26 septembre 2007
26 sept. 2007 à 12:34
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