VBA Récupérer coordonnées d'une cellule [Résolu/Fermé]

Signaler
Messages postés
18
Date d'inscription
mardi 12 juillet 2011
Statut
Membre
Dernière intervention
21 juillet 2011
-
 Christian -
Bonjour à tous,

Savez-vous comment récupérer les coordonnées d'une cellule lorsqu'on connait son contenu ?

D'après l'aide, la méthode find renvoie bien un objet range.
Mais après quelques essais simples, il semble que find renvoie l'entrée de la recherche (la valeur que l'on donne en argument, "what"), et non les coordonnées de la cellule dans laquelle le contenu recherché se trouve.

Je n'arrive donc pas à stocker les coordonnées de la cellule que je recherche à l'aide de la méthode find.

Pourriez-vous m'aider ? Connaissez-vous une autre méthode par exemple ?

Merci d'avance,

Code Jack



10 réponses

Messages postés
16195
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
31 août 2020
3 019
bonsoir

essaies
localise = Cells.Find("bonjour", , xlValues).Address
MsgBox localise
Michel
11
Merci

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

CCM 61369 internautes nous ont dit merci ce mois-ci

Messages postés
18
Date d'inscription
mardi 12 juillet 2011
Statut
Membre
Dernière intervention
21 juillet 2011
5
Exemple à l'appui :

myCell = Cells.Find(What:="bonjour", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:= xlNext, MatchCase:=False, SearchFormat:=False)

MsgBox (myCell)


Je peux lire dans la MsgBox : "bonjour"...
Messages postés
15469
Date d'inscription
mercredi 5 novembre 2008
Statut
Membre
Dernière intervention
12 novembre 2014
2 437
Sub cherche()
'
' Macro1 Macro
' Macro enregistrée le 20/07/2011 par 10 - MICHEL
'
nomCherche = InputBox("Nom cherché? ")
Set result = Range("A2:A14").Find(What:=nomCherche, LookIn:=xlValues)
If result Is Nothing Then
___MsgBox "Non trouvé"
Else
___Range(result, result).Select
___MsgBox ActiveCell.Address
End If

End Sub
Messages postés
16195
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
31 août 2020
3 019
Bonjour
Je ne comprend pas pourquoi ce range(result, result) alors qu'avec cette syntaxe
Cells.Find("bonjour", , xlValues).Address
, on a l'adresse cherchée directement et sans se limiter à une colonne...D'autre part, cette syntaxe appelle un type "string", beaucoup moins encombrant en mémoire qu'un "range"!
Maintenant, je ne voudrais surtot pas dérangé...
Je te remercie Bidouilleu_R !!! ça fonctionne parfaitement :-)
Bonne journée à toi
Messages postés
16195
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
31 août 2020
3 019
Excusez moi d'avoir dérangé
nivellons par le bas, c'est CCM
>
Messages postés
16195
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
31 août 2020

oh yeah
Merci mec tu gère
Messages postés
15469
Date d'inscription
mercredi 5 novembre 2008
Statut
Membre
Dernière intervention
12 novembre 2014
2 437
Find, méthode


Cette méthode recherche des informations spécifiques dans une feuille de calcul.

expression.Find(Arg1, Arg2, Arg3)

expression Obligatoire. Expression qui renvoie un objet WorksheetFunction.

Arg1 Argument de type String obligatoire. Nom de la feuille de calcul.

Arg2 Argument de type String obligatoire. Nom de la plage.

Arg3 Argument de type Variant facultatif. Nom d'un argument permettant d'affiner la recherche.

Méthode Find telle qu'elle s'applique à l'objet Range.

Cette méthode recherche une information spécifique dans une plage et renvoie un objet Range qui représente la première cellule où cette information apparaît. Cette méthode renvoie la valeur Nothing si l'information n'est pas trouvée. N'affecte ni la sélection ni la cellule active.

expression.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)

expression Obligatoire. Expression qui renvoie un objet Range.

What Argument de type Variant obligatoire. Données à rechercher. Il peut s'agir d'une chaîne de caractères ou de tout autre type de données Microsoft Excel.

After Argument de type Variant facultatif. Cellule après laquelle vous souhaitez commencer la recherche. Cela correspond à la position de la cellule active lorsqu'une recherche est effectuée à partir de l'interface utilisateur. Notez que l'argument After doit correspondre à une seule cellule dans la plage. Rappelez-vous que la recherche commence après cette cellule ; la cellule spécifiée n'est pas recherchée jusqu'à ce que la méthode reviennent à cette cellule. Si vous ne spécifiez pas cet argument, la recherche commence après la cellule située dans le coin supérieur gauche de la plage.

LookIn Argument de type Variant facultatif. Type d'informations.

LookAt Argument de type Variant facultatif. Il peut s'agir de l'une des constantesXlLookAt suivantes : xlWhole ou xlPart.

SearchOrder Argument de type Variant facultatif. Il peut s'agir de l'une des constantes XlSearchOrder suivantes : xlByRows ou xlByColumns.

SearchDirection Argument de type XlSearchDirection facultatif. Direction de la recherche.

XlSearchDirection peut être l'une de ces constantes XlSearchDirection.
xlNext par défaut
xlPrevious

MatchCase Argument de type Variant facultatif. Affectez-lui la valeur True pour que la recherche respecte la casse. La valeur par défaut est False.

MatchByte Argument de type Variant facultatif. Cet argument est utilisé uniquement si vous avez sélectionné ou installé la prise en charge des langues codées sur deux octets. Affectez-lui la valeur True pour que les caractères codés sur deux octets ne correspondent qu'aux caractères codés sur deux octets. Affectez-lui la valeur False pour que les caractères codés sur deux octets correspondent à leurs équivalents codés sur un octet.

SearchFormat Argument de type Variant facultatif. Format de la recherche.
Messages postés
18
Date d'inscription
mardi 12 juillet 2011
Statut
Membre
Dernière intervention
21 juillet 2011
5
Merci, en effet ça m'aide.

Mais ça n'explique toujours pas ce problème de renvoi de la méthode find.

Code Jack
Messages postés
1181
Date d'inscription
mardi 27 mai 2008
Statut
Membre
Dernière intervention
12 juillet 2012
251
Savez-vous comment récupérer les coordonnées d'une cellule lorsqu'on connait son contenu ?

si tu as sélectionnée une cellule ... tu peux utiliser
les propriétés suivantes qui te donnent les coordonnées d' une cellule.


Sub demo()  
Dim hauteur, refHaut, refGauche, largeur  


hauteur = Range("d3").Height  

refHaut = Range("d3").Top  
refGauche = Range("d3").Left  
largeur = Range("d3").Width  

End Sub
Messages postés
18
Date d'inscription
mardi 12 juillet 2011
Statut
Membre
Dernière intervention
21 juillet 2011
5
Quoting : "Cette méthode recherche une information spécifique dans une plage et renvoie un objet Range qui représente la première cellule où cette information apparaît"

Voilà pourquoi je persiste à dire que je ne comprends. Une fois la méthode find appliquée, à l'aide d'une msgbox, la variable me renvoie la contenu de la cellule et non sa position... (cf. premier msg du topic)

Code Jack
Messages postés
18
Date d'inscription
mardi 12 juillet 2011
Statut
Membre
Dernière intervention
21 juillet 2011
5
Merci pour votre aide,

Mon problème a été résolu dès la première réponse, j'ai réussi à récupérer sa position.
Mais en effet tout ceci m'est encore obscur, et même si j'ai réussi à avoir ce que je voulais, je ne l'ai pas entièrement compris.

Je vais essayer votre proposition pour voir si ça m'aide à comprendre, mais en effet à l'aide des adresses ça semble assez logique.

Mystère et boule de gomme quant à ce qu'affirme l'aide ?

Merci à vous en tout cas,

Kojack
Messages postés
2
Date d'inscription
lundi 25 novembre 2013
Statut
Membre
Dernière intervention
28 novembre 2013

J'ai le même type de problème...Pour l'instant la seule propriété qui passe sur le résultat de ton Find est ".Address"
Si tu fais un MsgBox resultaduFIND.Address une fenêtre te renvoie les coordonnées de la cellule sous la forme $A$2
mais ceci n'est toujours par un Objet Range.............
j'essaie de trouver un moyen de convertir en VBA ce formant en range pour la suite de mon prog...
c'est peut être un début de solution......
Messages postés
12184
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
31 juillet 2020
2 471
Bonjour,

Et oui, je fais du déterrage de sujets...

La méthode Find renvoie ... un Range !

Il convient, afin d'éviter des erreurs, de la retourner dans une variable de type Range.
Pourquoi?
Simplement parce que si la valeur cherchée n'est pas trouvée, la propriété du Range (.Address, .Row, .Column, etc) va renvoyer une erreur. Logique puisque le range n'existe pas, il ne possède pas d'adresse...

Mais alors, pourquoi, lorsque je la place dans un MsgBox, seule sa valeur s'affiche?
Un objet Range n'est rien de concret. Il s'agit d'une cellule, d'une plage, d'une feuille... Comment voudriez-vous afficher une cellule (l'objet, pas son contenu), dans un message?
VBA interprète donc votre code :
MsgBox Rng
en choisissant la propriété par défaut de l'objet, propriété qui est... .Value !

La meilleure des façons de faire est donc celle-ci :
Sub Recherche()
Dim Rng As Range

    Set Rng = Worksheets("Feuil1").Range("A2:L1198").Find(What:="Bonjour")
    If Not Rng Is Nothing Then
        MsgBox Rng & " ====>" & vbCrLf & "trouvé sur : " & Rng.Worksheet.Name & vbCrLf & "cellule : " & Rng.Address
    Else
        MsgBox "pas trouvé"
    End If
End Sub
Merci beaucoup à chacun et à tous,

Je vais essayer et je vous reviens