Fonction recherche sous excel évoluée

[Résolu]
Signaler
Messages postés
5
Date d'inscription
mardi 29 juillet 2003
Statut
Membre
Dernière intervention
30 novembre 2005
-
Messages postés
5
Date d'inscription
mardi 29 juillet 2003
Statut
Membre
Dernière intervention
30 novembre 2005
-
Salut tout le monde,

J'ai développé un petit programme de base de données d'adresses de
sites internet avec excel(vous trouverez le code source dans les
sources de ce site à BDDNET)

Pour compléter mon programme j'aimerai y ajouter la fonction recherche,
or je suis un peu perdu et je n'ai pas trouver mon bonheur ni dans le
forum ni dans les sources, le truc c'est que j'aimerai que la fonction
recherche puisse trouver les mots sans pour autant les avoir rentrés
exactement, par exemple si je cherche des sites avec une description
contenant le mot "électronique", je souhaite pouvoir lancer la
recherche avec juste le mot "elec".

Merci d'avance et si vous n'avais pas compris n'hésitez pas à me le dire.

4 réponses

Messages postés
96
Date d'inscription
jeudi 10 juin 2004
Statut
Membre
Dernière intervention
22 mai 2007

Tu disposes pour cela de FindNext

Il existe cependant deux particularités à la recherche dans Excel

1. Excel, en vba, boucle indéfiniment
2. Lorsque l'on effectue un FindNext, Excel reste sur la même cellule...

Dès lors, le code à développer est un peu plus long.

Il faut mémoriser la première cellule correspondant à la recherche, de manière à comparer les adresses des cellules suivantes trouvées et de sortir de la boucle lorsque Excel revient sur la première cellule.

Il faut également, lors du FindNext, spécifier à Excel de chercher après la cellule trouvée...

Voici le code complet, à adapter selon tes besoins. Dans le cas présent, Excel colorie les cellules trouvées en rouge. Tu peux bien sûr adapter en renvoyant les adresses dans un tableau ou une collection, puis itérer sur le tableau ou la collection des adresses trouvées.

Sub Recherche()
Dim Premiere_Cellule_Trouvee As Range ' Sert à éviter une boucle sans fin
Dim Cellule_Suivante As Range ' Correspond à la cellule suivante trouvée
Set Premiere_Cellule_Trouvee = _
Range("a1:a10").Find(What:="elec", LookIn:=xlValues, LookAt:=xlPart)

' Si aucune correspondance, on sort de la procédure
If Premiere_Cellule_Trouvee Is Nothing Then Exit Sub

Set Cellule_Suivante = Premiere_Cellule_Trouvee
Do
Cellule_Suivante.Interior.Color = vbRed
Set Cellule_Suivante = Range("a1:a10").FindNext(after:=Cellule_Suivante)
' Si correspondance entre les cellules, on a bouclé et on sort
If Cellule_Suivante Is Nothing Then Exit Sub
If Cellule_Suivante.Address = Premiere_Cellule_Trouvee.Address Then Exit Sub
Loop
End Sub

Ok?

Pierre Fauconnier
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 112 internautes nous ont dit merci ce mois-ci

Messages postés
96
Date d'inscription
jeudi 10 juin 2004
Statut
Membre
Dernière intervention
22 mai 2007

Bonjour

La méthode Find d'un objet Range renvoie un objet Cell que l'on peut sélectionner ou affecter à une variable objet Range.

Pour sélectionner la cellule contenant "elec" en colonne A, tu peux utiliser ceci:

Range("a:a").Find(what:="elec", LookIn:=xlValues, lookat:=xlPart).Select

Ok?

Bon travail

Pierre Fauconnier
Messages postés
5
Date d'inscription
mardi 29 juillet 2003
Statut
Membre
Dernière intervention
30 novembre 2005

Bonjour,

tout d'abord merci, mais j'aurai une petite question en plus, puis-je
imbriquer cette commande dans une boucle pour tout trouver et détecter
lorsqu'il n'y a plus rien à trouver, lorsque l'on est sous excel un
message apparait pour nous le dire, ce doit être possible alors
de détecter ça ou alors est-ce qu'il faut que je teste chaque
cellule et que je détecte la fin de fichier?

encore merci.
Messages postés
5
Date d'inscription
mardi 29 juillet 2003
Statut
Membre
Dernière intervention
30 novembre 2005

Re bonjour, c'est génial, ça me fait une base sûre pour ma fonction de
recherche merci beaucoup de ton aide, avec ça j'ai déjà les idées plus
claires sur mon code.

merci encore, et bonne continuation.



ps: en espéant pouvoir te renvoyer la balle un de ces jours.