Utilisation d'une classe dans une autres classe

Résolu/Fermé
kate42 Messages postés 59 Date d'inscription dimanche 17 mai 2009 Statut Membre Dernière intervention 21 août 2018 - Modifié le 30 juil. 2018 à 20:42
kate42 Messages postés 59 Date d'inscription dimanche 17 mai 2009 Statut Membre Dernière intervention 21 août 2018 - 31 juil. 2018 à 09:15
Bonjour,

Voilà cela fait un petit moment que je cherche d'où vient mon problème et et n'ai pas trouvé de solution alors j'espère que quelqu'un pourra m'aider =). Merci d'avance.

Je suis assez novice en VBA mais j'ai des base en programmation Orienté objet.

Donc sous VBA j'ai créé 2 nouvelles classes : Site qui est composé de diverse propriétés (qui sont des String et Double) et Lien qui est composé de string et de Site.

alors ma question c'est donc est-ce que j'ai besoin de dire au début de ma classe Lien que ma classe Site existe ?

Car quand j'essaye de créer un Lien dans une subroutine (dans un module) j'ai une erreur d'éxecution 91.


Merci d'avance pour votre aide (N'hésitez pas à me faire des remarque sur la clarté de mon code ^^, je suis preneuse des conseils pour m'améliorer =))


au cas où je vous met la définition de mes deux classes et la subroutine que j'utilise :

Classe Site
Option Explicit


'---------------------------------------
'Classe Site
'---------------------------------------

'Création des propriétés propre à la classe
Private sNom_Theo As String   'Nom Théorique du site
Private sNom_SI As String     'Nom SI du site
Private dX_Lamb As Double     'X en Lamert II étandu (coordonnée utilisée par Bytel)
Private dY_Lamb As Double     'Y en Lamert II étandu (coordonnée utilisée par Bytel)
Private sX_GE As String
Private sY_GE As String
Private sDescription As String

'Lecture et modification des propriétés de la classe

Public Property Get Nom_Theo() As String
    Nom_Theo = sNom_Theo
End Property

Public Property Let Nom_Theo(ByVal vNewValue As String)
    sNom_Theo = vNewValue
End Property

Public Property Get Nom_SI() As String
    Nom_SI = sNom_SI
End Property

Public Property Let Nom_SI(ByVal vNewValue As String)
    sNom_SI = vNewValue
End Property

Public Property Get X_Lamb() As Double
    X_Lamb = dX_Lamb
End Property

Public Property Let X_Lamb(ByVal vNewValue As Double)
    dX_Lamb = vNewValue
End Property

Public Property Get Y_Lamb() As Double
    Y_Lamb = dY_Lamb
End Property

Public Property Let Y_Lamb(ByVal vNewValue As Double)
    dY_Lamb = vNewValue
End Property

Public Property Get X_GE() As String
    X_GE = sX_GE
End Property

Public Property Get Y_GE() As String
    Y_GE = sY_GE
End Property

Public Property Get Description() As String
    Description = sDescription
End Property

Public Property Let Description(ByVal vNewValue As String)
    sDescription = vNewValue
End Property


Classe Lien
Option Explicit

'---------------------------------------
'Classe Lien
'---------------------------------------

'Création des propriétés propre à la classe
Private sId_Lien As String    'Nom du Lien
Private pSite_A As Site
Private pSite_B As Site
Private sDescription As String

'Lecture et modification des propriétés de la classe

Public Property Get Id_Lien() As String
    Id_Lien = sId_Lien
End Property

Public Property Let Id_Lien(ByVal vNewValue As String)
    sId_Lien = vNewValue
End Property

Public Property Get Site_A() As Object
    Site_A = pSite_A
End Property

Public Property Set Site_A(ByVal vNewValue As Object)
    pSite_A = vNewValue
End Property

Public Property Get Site_B() As Object
    Site_B = pSite_B
End Property

Public Property Set Site_B(ByVal vNewValue As Object)
    pSite_B = vNewValue
End Property

Public Property Get Description() As String
    Description = sDescription
End Property

Public Property Let Description(ByVal vNewValue As String)
    sDescription = vNewValue
End Property


et enfin ma sub :
Sub testSite()
    
    Dim Site_1  As Site     'création du pointeur vers l'objet
    Set Site_1 = New Site
    With Site_1
        .Nom_Theo = "T83788"                      
        .X_Lamb = 845633
        .Y_Lamb = 2136685
        .Description = "z szd"
    End With
  
 
    Dim Site_2  As Site
    Set Site_2 = New Site
    With Site_2
        .Nom_Theo = "T79924"
        .X_Lamb = 845633
        .Y_Lamb = 2136685
        .Description = ""
    End With

    Dim FH1 As Lien
    Set FH1 = New Lien
    FH1.Id_Lien = "FH test"
    FH1.Site_A = Site_1   ' quand je fais le mode pas à pas l'erreur est ici lors de l'appel du Get Sit_A() As Object
    FH1.Site_B = Site_2
    
    Debug.Print Site_1.Nom_Theo; " coordonnées : "; Site_1.X_Lamb; " "; Site_1.Y_Lamb
    Debug.Print Site_2.Nom_Theo; " coordonnées : "; Site_2.X_Lamb; " "; Site_2.Y_Lamb
    Debug.Print FH1.Id_Lien 
 'ma dernière ligne n'est pas complète mais mon l’exécution plante avant 

End Sub

1 réponse

Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
Modifié le 30 juil. 2018 à 17:44
Bonjour,

Pour affecter un objet à une variable il faut utiliser Set, par exemple au lieu de :
pSite_A = vNewValue
écrire
Set pSite_A = vNewValue


1
kate42 Messages postés 59 Date d'inscription dimanche 17 mai 2009 Statut Membre Dernière intervention 21 août 2018
31 juil. 2018 à 09:15
Merci beaucoup pour votre aide, en effet cela fonctionne beaucoup mieux !
0