Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

méthode find en VBA

roro145

XLDnaute Nouveau
Bonjour à tous, voilà j'ai un problème avec l'utilisation de la méthode find appliquée à un objet range, voici le code :

With ActiveWorkbook.Worksheet('MEMO2').Range('A1:Z1')
c = .Find(Donnée)
...
End With

avec 'Donnée' qui est une chaine de caractère.
Donnée se trouve bien dans la plage A1:Z1, mais pourtant c'est 'nothing' qui est affecté à c (c étant déclaré comme 'Range').

La fonction find ne devrait-elle pas renvoyé l'adresse de la cellule à laquelle la chaine de caractère à été trouvée ???

merci par avance pour vos éventuelles réponse.
++

Message édité par: roro145, à: 19/06/2006 10:59
 

Shock

XLDnaute Occasionnel
bjr roro,

je ne connais pas bien la méthode Find, mais en regardant dans l'aide, il faut apparemment faire un 'Do...Loop While' pour faire une recherche sur toute la plage.
je me penche un peu dessus et te dis ca!
 

Hervé

XLDnaute Barbatruc
bonjour

sinon, essayes comme ceci :

With ActiveWorkbook.Worksheets('MEMO2').Range('A1:Z1')
Set c = .Find(donnée)

End With


set permet d'affecter un objet à une variable

tu peux ensuite utiliser dans le reste de ton code directement c

c.select
c.interior.colorindex=3

si tu veux tester si c est bien initialisé, utilise ce type de syntaxe :

If Not c Is Nothing=si c n'est pas vide

salut
 
A

AV

Guest
Ave,

Attention à la méthode Find qui à la fâcheuse habitude de mémoriser les paramètres de la précédente utilisation !

Préférer la syntaxe suivante :

Sub zzz()
donnée = 'aaa'
x = [A1:Z1].Find(What:=donnée, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByColumns).Address
End Sub

AV [aaa]
 

Hervé

XLDnaute Barbatruc
re roro, shock
salut pierrejean, AV

pas de souci pierrejean

Bien d'accord avec toi alain

attention roro, si tu utilises la méthode d'alain, le x deviens un string (contenant l'addresse de la cellule trouvé)

si tu veux tester son contenu il te faut utiliser :

donnée = 'aaa'
On Error Resume Next
x = [A1:Z1].Find(What:=donnée, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByColumns).Address
If Not x = '' Then ...


et si ensuite tu veux utiliser une variable objet (dim c as range) :

set c=range(x)

salut
 

roro145

XLDnaute Nouveau
Merci à tous, vous êtes géniaux, et ultra réactifs , jamais vu une réponse donnée en si peu de temps ...
Donc j'ai essayé la méthode d'Hervé, qui marche parfaitement...
encore un grand merci, heureusement que vous êtes là,
++
 

roro145

XLDnaute Nouveau
Merci à tous, vous êtes géniaux, et ultra réactifs , jamais vu une réponse donnée en si peu de temps ...
Donc j'ai essayé la méthode d'Hervé, qui marche parfaitement...
encore un grand merci, heureusement que vous êtes là,
++
 

roro145

XLDnaute Nouveau
Merci à tous, vous êtes géniaux, et ultra réactifs , jamais vu une réponse donnée en si peu de temps ...
Donc j'ai essayé la méthode d'Hervé, qui marche parfaitement...
encore un grand merci, heureusement que vous êtes là,
++
 

Pierrot93

XLDnaute Barbatruc
Re : méthode find en VBA

Bonjour,

en principe "find" renvoie plutôt un objet "range" qu'une adresse... sinon, essaye ceci,tu aura une adresse style A1 :
Code:
MsgBox Range("A1").Address(0, 0)
bonne soirée
@+
 

Discussions similaires

Réponses
3
Affichages
1 K
Réponses
6
Affichages
622
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…