IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez Discussion :

[VBA] [CLASS] accès à une classe d'une autre base [Fait]


Sujet :

Contribuez

  1. #1
    Candidat au Club
    Homme Profil pro
    pdt
    Inscrit en
    Mars 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : pdt

    Informations forums :
    Inscription : Mars 2006
    Messages : 4
    Points : 4
    Points
    4
    Par défaut [VBA] [CLASS] accès à une classe d'une autre base
    Bonjour,
    J'ai une base A contenant des modules de classe (par ex.: un module clsTest) et d'autres modules.
    Lorsque dans une autre base, j'établis une référence vers la base A, je vois et j'ai accès aux modules normaux mais pas aux classes.
    par exemple, impossible de faire dim o as clsTest et/ou set o = new clsTest.

    De même, l'explorateur d'objet montre bien la base référencée avec les modules normaux mais pas les modules de classe.

    Est-il possible d'utiliser une classe définie dans une autre base ? comment ?

    merci pour toute piste.

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut Classe: instancing=[PublicNotCreatable] + Proc.constructeur
    Bonjour,
    Citation Envoyé par gsilber
    Est-il possible d'utiliser une classe définie dans une autre base ? comment ?
    [1] D'abord, il faut modifier la portée de la classe pour la rendre publique.

    Dans l'EDI VBA, tu sélectionnes la classe et, dans la fenêtre des propriétés, tu modifies la propriété [Instancing] avec la valeur [2. PublicNotCreatable]

    Access permet de choisir entre les portées [Private] Ou [Public not creatable].
    [Public not creatable] signifie que les instances de la classe peuvent être utilisées par n'importe quelle application Access qui référence ta base A, avec une grosse limitation: seul le code contenu dans base A est autorisé à instancier la classe (en clair, l'instruction New clsTest n'est pas valide en-dehors de base A).

    [2] Ensuite, pour tenir compte du [not creatable] tu dois ajouter dans base A une procédure publique chargée d'instancier clsTest et de retourner une référence sur le nouvel objet (dans la terminologie d'un "langage orienté objets" ça fait penser à un constructeur).
    C'est cette procédure publique qui sera ensuite appelée par le code de ta base application pour obtenir de nouvelles instances de clsTest.

  3. #3
    Candidat au Club
    Homme Profil pro
    pdt
    Inscrit en
    Mars 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : pdt

    Informations forums :
    Inscription : Mars 2006
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Classe: instancing=[PublicNotCreatable] + Proc.constructeur
    Merci pour cette aide.
    J'avance mais je trébuche maintenant sur la création de la procédure "constructeur"
    tu dois ajouter dans base A une procédure publique chargée d'instancier clsTest et de retourner une référence sur le nouvel objet
    J'ai essayé plusieurs combinaisons testx dans ma base normale et NewTitrex (constructeur) dans ma base A.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Function test()
    Dim oTitre As clsTitre
     
        oTitre = newtitre()  ' ou set oTitre = newtitre()
    End Function
     
    Public Function NewTitre() As clsTitre
    Dim oTitre As clsTitre
     
        Set oTitre = New clsTitre
        NewTitre = oTitre  '  erreur ici
    End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Function test2()
    Dim oTitre As clsTitre
     
        newTitre2 (oTitre)  '  erreur ici
    End Function
     
    Public Sub NewTitre2(ByRef oTitre As clsTitre)
        Set oTitre = New clsTitre
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Function test3()
    Dim oTitre As clsTitre
     
        newTitre3 (oTitre)  ' erreur ici
    End Function
     
    Public Sub NewTitre3(ByRef oTitre)
        Set oTitre = New clsTitre
    End Sub
    Dans les deux derniers cas, l'erreur se produit à l'appel de la procédure "constructeur" parce que l'objet à transmettre n'est pas encore instancié !
    Dans le premier cas l'erreur se produit dans la fonction "constructeur" lors de la tentative d'affectation de l'objet à la fonction pour retour.

    Je ne sais pas comment dans une procédure retourner la référence d'un objet créé par cette procédure.

    encore un tour d'aide et j'y arriverai ! merci

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut Re: Classe: instancing=[PublicNotCreatable] + Proc.construct
    Tu es proche du but.

    Citation Envoyé par gsilber
    Je ne sais pas comment dans une procédure retourner la référence d'un objet créé par cette procédure.
    L'utilisation du SET est sytématique et obligatoire pour référencer un objet et permettre à une fonction de retourner cette référence.

    Dans base application:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Function test()
        Dim oTitre As clsTitre
     
        Set oTitre = Newtitre()
    End Function
    Dans base A:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Function NewTitre() As clsTitre
        Set NewTitre = New clsTitre
    End Function

  5. #5
    Candidat au Club
    Homme Profil pro
    pdt
    Inscrit en
    Mars 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : pdt

    Informations forums :
    Inscription : Mars 2006
    Messages : 4
    Points : 4
    Points
    4
    Par défaut [RESClasse: instancing=[PublicNotCreatable] + Proc.construct
    L'utilisation du SET est sytématique et obligatoire pour référencer un objet et permettre à une fonction de retourner cette référence.
    testé + ca marche = MERCI !

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Cadre financier
    Inscrit en
    Février 2016
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Cadre financier

    Informations forums :
    Inscription : Février 2016
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    j'essaie d'appliquer la méthode décrite ci-dessous à une bibliothèque créée à partir d'une classe EXCEL personnalisée.

    Ma classe s'appelle RepFile

    Fonction publique créée dans RepFile
    Public Function NewRepFile() As RepFile
    Set NewRepFile = New RepFile
    End Function

    Fonction créée dans un module d'un projet EXCEL où je souhaite utiliser l'objet RepFile
    Function Test()
    Dim File As RepFile
    Set File = NewRepFile ()
    End Function

    A la compilation il me dit que la fonction NewRepFile n'est pas connue...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Accès à un composant d'une form dans une classe
    Par dezodev dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/06/2015, 14h32
  2. Réponses: 4
    Dernier message: 27/08/2011, 02h02
  3. utiliser une methode d'une classe (acces impossible)!
    Par Javamar dans le forum Débuter avec Java
    Réponses: 8
    Dernier message: 12/02/2009, 15h48
  4. Acces aux control d'une form depuis une classe
    Par PhilCou dans le forum Windows Forms
    Réponses: 2
    Dernier message: 22/07/2008, 10h59
  5. Réponses: 6
    Dernier message: 20/04/2007, 16h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo