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

Signaler
Messages postés
6
Date d'inscription
vendredi 26 novembre 2010
Statut
Membre
Dernière intervention
14 mars 2012
-
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
-
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

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
227
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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
227
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
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
70
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)