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
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
A voir également:
- Macro Excel recherche multiple
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Liste déroulante excel - Guide
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Si et excel - Guide
- Word et excel gratuit - Guide
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
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.
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.
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
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
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
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
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
Set rech = .Find(ActiveCell.Offset(0, 13).Value, LookIn:=xlValues) et ça marche...
Merci infiniment
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
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
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
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
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.
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.
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
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
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