XL 2016 Passage d'argument type As Range - Type d'argument incompatible

KuschR33

XLDnaute Nouveau
Bonjour ou Bonsoir,
J'ai une petite question concernant le passage d'argument (dans ce cas typé As Range) dans une macro.
Pourquoi ai-je le droit de faire ca ?

VB:
Private Sub CommandButton1_Click()
          Call Bonjour(Sheets("Feuil1").Range("A1:B2"))
End Sub

et que je n'ai pas le droit de passer Mon range dans une variable sans qu'Excel (il a sans doute raison) m'insulte avec son : "ByRef Type d'argument incompatible"

VB:
Private Sub CommandButton1_Click()
         MyRange = Sheets("Feuil1").Range("A1:B2")
         Call Bonjour(MyRange)
End Sub

Ma macro est juste là à titre d'exemple :
VB:
 Sub Bonjour(MonRange As Range)
  MsgBox ("Bonjour")
End Sub
 

Dranreb

XLDnaute Barbatruc
Bonsoir.
Très vif conseil :
Mettez quasi systématiquement ByVal devant les déclarations de paramètres de procédures, sauf :
1) — S'il s'agit d'un tableau
2) — Si c'est expressément, non pas une expression mais une variable non objet qui doit être spécifiée lors de l'appel, et que sa modification par la procédure doit modifier la variable passée.
Outre vos problèmes, ne pas le faire aboutit à du code machine carrément idiot … mais tout le monde s'en fout, bien sûr.

Dans votre cas ça ne marche pas parce que votre procédure attend l'adresse d'un objet Range alors que vous voulez lui transmettre l'adresse d'un Variant.
Avec ByVal il saurait qu'il doit installer à domicile chez la procédure une copie du Range tirée du Variant s'il en contient un. Ce qui n'est d'ailleurs pas le cas, puisque vous n'avez pas fait de Set dessus. Mais s'il n'a hélas, et inutilement, que des adresses pour se dépatouiller, il faut qu'elles correspondent à des types de données rigoureusement identiques.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 108
Messages
2 085 363
Membres
102 874
dernier inscrit
Petro2611