Chercher et sélectionner un mot dans Excel grace à une macro VBA [Résolu]

Messages postés
11
Date d'inscription
samedi 29 janvier 2005
Dernière intervention
18 février 2005
- - Dernière réponse : cs_nico39
Messages postés
56
Date d'inscription
vendredi 4 mars 2005
Dernière intervention
4 octobre 2006
- 20 mai 2005 à 17:23
Salut!
Je cherche à créer une macro permettant de trouver un mot dans une feuille active Excel.
Une fois le mot trouvé (et ses doublons possibles), j'aimerais que celui-ci soit sélectionner.
Voici ce que j'ai fait pour le moment. J'ai mis en bleu la ligne qui semble bancale,
mais je n'ai pas compris pourquoi.
Merci d'avance si vous pouvez me donner un coup de main :-)
Biscottte

Sub Chercher()
ActiveSheet.UsedRange.Select
' Déclaration des variables.
Dim Search
Dim Where As String
' On Obtient le mot à rechercher de l'utilisateur.
Search = InputBox("quel mot cherchez-vous?")
' Recherche le mot dans la feuille active.
Where = InStr(1, ActiveSheet, Search)
' Si l'utilisateur trouve le mot,
If Where Then
' Le mot est sélectionné
' on définit le début de la sélection
Text1.SelStart = Where - 1
' et on définit sa longueur.
Text1.SelLength = Len(Search)
Else
' Informe l'utilisateur.
MsgBox "mot introuvable."


End If


End Sub
Afficher la suite 

9 réponses

Meilleure réponse
Messages postés
96
Date d'inscription
jeudi 10 juin 2004
Dernière intervention
22 mai 2007
3
Merci
Bonjour

InStr recherche dans une chaîne de caractères, or tu lui envoies Activesheet comme paramètres.

Utilises plutôt ceci
If Not activesheet.Cells.Find(what:=Search, LookIn:=xlValues, lookat:=xlPart) Is Nothing Then ...

Note toutefois que activesheet peut être une feuille graphique et que tu auras dans ce cas une erreur d'exécution...

L'instruction Find renvoie une cellule, et Nothing s'il n'y a pas de correspondance...

lookat:=xlpart cherche le mot dans la cellule. Si tu recherches toute la cellule, utilise
lookat:=xlwhole

L'enregistreur de macros d'excel peut t'aider à te mettre sur la piste du code que tu souhaites créer.

Cela te convient-il?

Bon travail

Pierre Fauconnier

Dire « Merci » 3

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

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

Messages postés
11
Date d'inscription
samedi 29 janvier 2005
Dernière intervention
18 février 2005
0
Merci
C'est ce que je suis en train de faire . Bon, je n'arrive qu'à sélectionner qu'une cellule à la fois et pas les doublons avec, mais j'ai une lueur d'espoir maintenant.
Pour les doublons j'essaie avec For Each... Next, mais il n'a pas l'air d'aimer.

Sub Q4essai()
Dim Cell As Variant


ActiveSheet.UsedRange.Select
Search = InputBox("quel mot cherchez-vous?")
Where = InStr(1, Search, UsedRange)


For Each Cell In Cells.Find(What:=Search, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False).Activate


Next


End Sub
Messages postés
11
Date d'inscription
samedi 29 janvier 2005
Dernière intervention
18 février 2005
0
Merci
Mille mercis au fait !
Messages postés
96
Date d'inscription
jeudi 10 juin 2004
Dernière intervention
22 mai 2007
0
Merci
Utilise la procédure suivante

Sub Cherche()
Dim Flag_Trouve As Boolean ' Flag pour signaler que l'on a trouvé une cellule
Dim Cellule As Range
Dim Adresse_Premiere_Cellule As String

Set Cellule = ActiveSheet.Cells.Find(what:=Search, LookIn:=xlValues, lookat:=xlPart)
Do While Not Cellule Is Nothing
If Flag_Trouve = False Then
' Si flag_trouve = false, alors c'est la première cellule
Flag_Trouve = True
' on mémorise l'adresse de la première cellule qui correspond au critère
Adresse_Premiere_Cellule = Cellule.Address
End If
Cellule.Interior.Color = vbRed
Set Cellule = ActiveSheet.Cells.FindNext(after:=Cellule)
' On teste pour voir si on a bouclé sur toutes les cellule.
' Si oui, Excel recommence à la première et boucle indéfiniment.
' Donc, si on revient à la première, tout a été scanné et on sort de la boucle
If Cellule.Address = Adresse_Premiere_Cellule Then Exit Do
Loop
End Sub

Ok?

Pierre Fauconnier
Messages postés
11
Date d'inscription
samedi 29 janvier 2005
Dernière intervention
18 février 2005
0
Merci
Ca a fait planter Excel .
Visiblement il ne comprend pas quand sortir de la boucle. Je suis sur la même piste que celle que tu m'as donné, avec for each... next ou loop until. Le truc c'est qu'il faut que je trouve la bonne barrière pour éviter que le programme tourne en rond. J'ai pensé aussi à Union (range1, range2 etc.).
Merci d'avoir pris le temps de réfléchir à mon problème, en tout cas :-)
Messages postés
96
Date d'inscription
jeudi 10 juin 2004
Dernière intervention
22 mai 2007
0
Merci
A mon avis, le problème du plantage vient du fait que tu utilises Search comme nom de variable alors que c'est un nom réservé de procédure.

Modifie Search en Valeur_Cherchee, par exemple.

Chez moi, la macro fonctionne sans problème et s'arrête une fois toutes les cellules scannées

Pierre Fauconnier
Messages postés
11
Date d'inscription
samedi 29 janvier 2005
Dernière intervention
18 février 2005
0
Merci
Youpiiiiii j'ai trouvé! J'ai fait complètement autre chose, quand çà bloque, çà bloque!!!

Sub SelectCellulesValeurDeterminee()
LaValeur = Range("D2").Value
For Each Cell In ActiveCell.CurrentRegion If Cell.Value LaValeur Then Plg Plg & Cell.Address() & ","
Next Cell
If Len(Plg) > 0 Then Range(Left(Plg, Len(Plg) - 1)).Select
End Sub
Messages postés
96
Date d'inscription
jeudi 10 juin 2004
Dernière intervention
22 mai 2007
0
Merci
C'est vrai que ta technique est correcte également, lorsque l'on recherche une valeur représentant une cellule entière.

Cela étant, sur de grandes plages de cellules, la méthode Find est plus rapide car elle utilise du code interne à Excel, compilé et donc plus rapide.

Le principal, c'est que tu aies ta solution.

Bon travail

Pierre Fauconnier
Messages postés
56
Date d'inscription
vendredi 4 mars 2005
Dernière intervention
4 octobre 2006
0
Merci
Bonjour Pierre,

je me permets de reprendre le fil de cette question, car la mienne est quasi similaire: je recherche moi une valeur particulière dans toute une colonne.
Set Cellule = Worksheets(1).Range("I:I").Find("20")
J'ai essayé de manipuler la fonction .Find mais elle plante.
En effet, la valeur à trouver est le résultat d'une fonction et lorsque j'utilise ma fonction .Find sur la colonne de résultats, elle me renvoie Nothing, alors que je suis sûr que la valeur est présente.
De plus, en précisant l'argument What de la fonction avec la valeur à trouver, il me renvoie une cellule, mais dont les coordonnées correspondent au nombre cherché (Ex: dans la colonne I, je cherche 20: la fonction me renvoie la cellule I20 !!!!!)!!!

Je ne comprends pas d'où peut venir le problème.

J'espère que tu as compris ma situation et que tu as quelconque idée.

Merci d'avance.


Amateurement vôtre...

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.