Recherche de plusieurs termes qui ne se suivent pas dans Excel

broisseau broisseau
62 contributions
Membre depuis le 03/11/2005
Envoyé le 24/12/2013 à 07:51


Bonjour,

Avec la fonction "recherche" de Excel (Contrôle + F), est-il possible de rechercher plusieurs termes non consécutifs ?
Par exemple dans une colonne contenant des adresses, je recherche les cellules contenant à la fois "Pierre", "République" et "Corrèze".

Merci de votre aide,
Cordialement,
Robert





Claude40 Claude40
1 533 contributions
Membre depuis le 24/03/2010
Envoyé le 24/12/2013 à 12:36


Bonjour,

Il faut coder : Pierre*République*Corrèze, dans l'ordre ou ces infos figurent dans la cellule
Un bon exposé du problème, c'est déjà un grand pas vers la solution. Dans la mesure du possible, mes solutions sont testées, sur mon système actuel (W10 Pro version 1909), mais peuvent ne pas fonctionner sur tous les Pc
Bipbipcoyote Bipbipcoyote
3 484 contributions
Membre depuis le 06/03/2001
Envoyé le 24/12/2013 à 14:12 Modifié par Bipbipcoyote


Bonjour,
puisque les choses se passent dans une même cellule, il faut indiquer à excel de penser comme un humain... petite macro à insérer
comment faire ... dans le classeur faire ALT+F11 l'éditeur vba va s'ouvrir
dans la colonne de gauche faire un double clic sur Feuil1 et coller le code suivant
Cette macro est à personnaliser avec le nom de vos feuilles, bien évidemment, ici j'ai utilisé les noms par défaut
il faut écrire le mot pierre dans la Feuil2 cellule A1
il faut écrire le mot corrèze dans la Feuil2 cellule A2
il faut écrire le mot république dans la Feuil2 cellule A3
noter que l'on peut écrire ce que l'on veut dans ces cellules pour faire une autre recherche par exemple et aussi que la fonction find se moque de la casse (majuscule ou non)

Sub Rechercher()
Dim mot1, mot2, mot3 As String
'ici on peut imaginer une autre manière de créer les critères de recherche, par exemple variables avec inputbox
mot1 = Feuil2.Range("A1")
mot2 = Feuil2.Range("A2")
mot3 = Feuil2.Range("A3")

Dim test, test2, test3 As Range

'on se positionne en début de feuille
Feuil1.Range("A1").Select
On Error GoTo fin 'si le premier n'existe pas
boucle: 'va nous servir à boucler

'ici on cherche le premier mot
Set test = Cells.Find(What:=mot1, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False)

'puisque l'on a trouvé quelque chose on cherche le second mot dans la cellule
With test.Address
Set test2 = Cells.Find(What:=mot2, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False)
End With

'puisque l'on a trouvé le second mot on recherche le troisième
With test2.Address
Set test3 = Cells.Find(What:=mot3, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False)
End With

'puisque les tests sont concluants on se place sur la cellule en question
'cela nous sert aussi de point de départ pour une éventuelle recherche dans les cellules suivantes
test3.Select

'on informe l'utilisateur sur l'adresse de la cellule trouvée, on pourrait la recopier sur une feuille
MsgBox test3.Address

'pour conserver le contrôle des opérations on place un petit contrôle pour interrompre la boucle
reponse = MsgBox("voulez-vous poursuivre la recherche ?", vbYesNo)
'si on clique sur oui
If reponse = 6 Then
'on repart vers la variable boucle déclarée plus haut, pour recommencer le même scénario
GoTo boucle
Else
'si on répond non, on sort de la fonction, sans cela on reviendra sur la première cellule contenant le premier mot
Exit Sub
End If
fin:
MsgBox "Premier mot non trouvé", vbCritical
End Sub

pour la déclencher faire Alt+F8 à partir de la Feuil1

vous pouvez visiter cette page pour info par exemple pour colorer les cellules trouvées, etc...

Visitez mon Site Google est mon ami, il répond mieux que moi, posez lui d'abord vos questions
broisseau broisseau
62 contributions
Membre depuis le 03/11/2005
Envoyé le 18/01/2014 à 11:36


Bonjour,

Merci beaucoup à tous les deux.
Cordialement,
Robert



Discussion trop ancienne

Cette discussion a été automatiquement fermée car elle n'a plus reçue de nouveau message depuis trop longtemps.

Nous vous suggérons de créer un nouveau message

« Retour sur la liste des messages de ce forum