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

biscottte 11 Messages postés samedi 29 janvier 2005Date d'inscription 18 février 2005 Dernière intervention - 18 févr. 2005 à 11:47 - Dernière réponse : cs_nico39 56 Messages postés vendredi 4 mars 2005Date d'inscription 4 octobre 2006 Dernière intervention
- 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
Pierre_faucon 96 Messages postés jeudi 10 juin 2004Date d'inscription 22 mai 2007 Dernière intervention - 18 févr. 2005 à 13:04
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

Merci Pierre_faucon 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

biscottte 11 Messages postés samedi 29 janvier 2005Date d'inscription 18 février 2005 Dernière intervention - 18 févr. 2005 à 13:17
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
biscottte 11 Messages postés samedi 29 janvier 2005Date d'inscription 18 février 2005 Dernière intervention - 18 févr. 2005 à 13:18
0
Merci
Mille mercis au fait !
Pierre_faucon 96 Messages postés jeudi 10 juin 2004Date d'inscription 22 mai 2007 Dernière intervention - 18 févr. 2005 à 14:13
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
biscottte 11 Messages postés samedi 29 janvier 2005Date d'inscription 18 février 2005 Dernière intervention - 18 févr. 2005 à 14:37
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 :-)
Pierre_faucon 96 Messages postés jeudi 10 juin 2004Date d'inscription 22 mai 2007 Dernière intervention - 18 févr. 2005 à 14:42
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
biscottte 11 Messages postés samedi 29 janvier 2005Date d'inscription 18 février 2005 Dernière intervention - 18 févr. 2005 à 14:43
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
Pierre_faucon 96 Messages postés jeudi 10 juin 2004Date d'inscription 22 mai 2007 Dernière intervention - 18 févr. 2005 à 14:54
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
cs_nico39 56 Messages postés vendredi 4 mars 2005Date d'inscription 4 octobre 2006 Dernière intervention - 20 mai 2005 à 17:23
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.