[Catégorie modifiée VB6 -> VBA] fonction find

Résolu
jc53 Messages postés 6 Date d'inscription vendredi 26 novembre 2010 Statut Membre Dernière intervention 14 mars 2012 - 14 mars 2012 à 12:33
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 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



merci par avance pour votre aide

3 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
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
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
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
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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)
0
Rejoignez-nous