Bonjour,
J'ai besoin d'un (ou plusieurs) avis sur ce problème VBA.
Dans le Sub b() je reçois un argument quelconque (tout type de variable).
Lorsque je passe un Range d'une seule cellule, ce n'est pas le Range qui est passé mais le Range.Value.
Comment éviter cela et empêcher ce ".Value" implicite ?
VB:
Sub a()
Dim r As Range
Set r = [A1]
Call b(r)
End Sub
Sub b(v As Variant)
'Problème ici -> v contient [A1].Value et non le Range [A1]
MsgBox VarType(v)
End Sub
Sub a()
Dim r As Range
Set r = [A1]
Call b(r)
End Sub
Sub b(v As Variant)
'Problème ici -> v contient [A1].Value et non le Range [A1] => totalement faux !!!
MsgBox IsObject(v)
MsgBox v.Parent.Name 'teste l'objet v
End Sub
IsObject renvoie VRAI donc v est bien un objet Range avec toutes ses propriétés.
Bonjour,
Quand tu passes un range à un paramètre de type variant tu as accès à toutes les propriétés et méthodes d'un range mais tu perds la saisie intuitive de l'objet range !
Pour t'en convaincre il te suffit en mode débug de faire un client droit sur la variable V et choisir dans le menu contextuel l'option ajouter à l'espion !
Bonjour @dysorthographie,
Merci pour cette précision.
Dans ce cas, le TypeOf Is Range étant vérifié, je suppose qu'il faudrait affecter le Variant V dans une variable explicitement déclarée en Range dans la fonction.
En plus de cette affaire de paramètre Variant de la fonction, j'ai eu quelques difficultés à faire rentrer un Range dans un Item du Dictionary. J'y suis arrivé pour le Range et j'ai généralisé à la notion d'Object mais j'avoue n'avoir pas testé d'autre Object que le Range.