Partage
  • Partager sur Facebook
  • Partager sur Twitter

[VBA] Erreur de compilation

Utilisation incorrecte de la propriété

6 septembre 2018 à 14:07:41

Bonjour à tous, j'ai un probleme lorsque j'utilise les classes dans vba.
Voici ce que j'ai 
une classe testA :
Option Explicit
 
Private Propriete1 As testB


Public Property Let changerProp1(ByVal valeur As testB)
    
    Propriete1 = valeur

End Property
une classe testB :
Option Explicit

Private prop As String


Private Sub Class_Initialize()
    prop = "hello"
End Sub
une procedure de test dans un module à part :
Option Explicit

Sub testProcedure()

    Dim a As testA
    Set a = New testA
    Dim b As testB
    Set b = New testB
    
    a.changerProp1 (b)
    
    MsgBox ("ok")

End Sub
lorsque je lance mon testProcedure, j'ai l'erreur suivante :
est ce que vous avez déjà eu ce genre de problème ?

-
Edité par Tati76 6 septembre 2018 à 14:09:04

  • Partager sur Facebook
  • Partager sur Twitter
10 septembre 2018 à 0:41:28

Bonjour,

Une propriété ne s'appelle pas, ça s'utilise plutôt comme si c'était un attribut (en fait, VBA génère pour toi des propriétés quand tu définis un attribut public). De plus, un argument avec des parenthèses en trop a un sens en VBA : ça force le passage par valeur; pour ça, l'IDE t'aide en plaçant correctement les espaces.

Let fonctionnera avec un objet mais je te le déconseille : ça t'empêchera plus tard d'implémenter une propriété par défaut dans l'objet stocké comme attribut et c'est à mon avis un peu moins lisible puisque lorsque tu veux stocker une référence à un objet ailleurs que dans un attribut, tu dois utiliser Set. Au passage, le type de propriété Let vient d'un mot-clé implicite que tu peux écrire devant une affectation...

Adapte donc cette ligne dans testA :

Public Property Set Prop1(ByVal valeur As testB)

... ainsi que celles-ci dans ta procédure :

    Set a.Prop1 = b
     
    MsgBox "ok"


Tu pourrais aussi instancier directement tes objets avec Dim, la seule différence est que VB ne les instanciera réellement que lorsqu'il en aura besoin...

Dim a As New testA
Dim b As New testB

-
Edité par ghuysmans99 10 septembre 2018 à 9:37:22

  • Partager sur Facebook
  • Partager sur Twitter
5 octobre 2021 à 14:44:35

il faut activer la page en question si dans le même classeur thisworkbook.sheets("nom_de_la_feuille").activate

unload ça décharge un userform, pas une feuille de classeur.

  • Partager sur Facebook
  • Partager sur Twitter