jc53
Messages postés6Date d'inscriptionvendredi 26 novembre 2010StatutMembreDernière intervention14 mars 2012
-
14 mars 2012 à 12:33
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 2015
-
14 mars 2012 à 13:52
Bonjour,
Pour effectuer la recherche d'une valeur d'une variable,j'utilise dans une boucle le code suivant :
Set ss = Sheets("NOMENCLATURE").Range("S:W").Find(what:=rep).Offset(0, 3)
If ss Is Nothing Then
MsgBox "Pas trouvé"
Else
ActiveCell.Value = ss
ActiveCell.Offset(1, 0).Select
End If
Mon problème avec ce code : si la valeur recherchée est absente de la zone de recherche alors la macro tombe en erreur.
Je voudrai dans ce cas qu'elle fasse apparaître un msgbox
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018212 14 mars 2012 à 12:51
Bonjour,
Mis à part le fait (que je déplore personnellement) que tu as ouvert ceette discussion dans la section VB6 en lieu et place de la section appropriée, soit : Langages dérivés > VBA) !,
comment peut-on, à la fois, écrire :
ActiveCell.Value = ss
et
Set ss = Sheets("NOMENCLATURE").Range("S:W").Find(what:=rep).Offset(0, 3) ' ===>>> donc un objet
et
If ss Is Nothing Then ' <<<+++ qui confirme qu'on le considère bien comme un objet !
Me donne l'impression de ce que tu veux mettre la charrue avant les boeufs et que tu n'es pas encore passé par l'étape indispensable : savoir ce qu'est une variable objet. Savoir ce que sont les propriétés d'un objet et ... les préciser ...
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018212 14 mars 2012 à 12:58
J'aimerais ajouter deux "petites" choses (oh ... si ... "infimes" ...) :
- Find n'est pas une "fonction". Une fonction a une vocation différente de celle d'une méthode. Et chaque mot a son importance.
- mettre option Explicit en haut de son code n'est pas un luxe, surtout si l'on débute
- présenter son code entre balises code sur ce forum n'en est pas un non plus.
- nous aurions tellement aimé que, dans toutes tes autres discussions ouvertes, tu aies pensé à cliquer le tag "Réponse acceptée" chaque fois que réponse ayant solutionné ton problème (et cela, ce n'est pas du développement. Juste de l'esprit de forum).
En conclusion et pour résumer : invite à la rigueur et invite à la discipline.
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201578 14 mars 2012 à 13:52
Salut
Normal, oui :
Set ss = Sheets("NOMENCLATURE").Range("S:W").Find(what:=rep).Offset(0, 3)
Dans cette syntaxe, tu lui demande de faire une recherche et de se décaler de 3 colonnes.
C'est là qu'est le problème : Il ne peut pas faire d'offset sur une cellule qui n'existe pas.
Il te suffit donc de décomposer :
Set ss = Sheets("NOMENCLATURE").Range("S:W").Find(what:=rep)
If Not ss Is Nothing Then
ss = ss.Offset(0, 3) ' peut-être avec un Set aussi
...
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)