Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Contribuez
Contribuez Access : Vos contributions. Postez ici vos codes sources, conseils, astuces et autres propositions. Ce forum n'est pas un forum technique mais destiné aux contributions pour www.developpez.com
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/03/2006, 10h57   #1
Invité de passage
 
Inscription : mars 2006
Messages : 3
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 3
Points : 1
Points : 1
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.
gsilber est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2006, 12h55   #2
En attente de confirmation mail
 
Inscription : février 2005
Messages : 1 731
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : février 2005
Messages : 1 731
Points : 2 010
Points : 2 010
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.
=JBO= est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2006, 14h53   #3
Invité de passage
 
Inscription : mars 2006
Messages : 3
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 3
Points : 1
Points : 1
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"
Citation:
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 :
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 :
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 :
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
gsilber est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2006, 17h25   #4
En attente de confirmation mail
 
Inscription : février 2005
Messages : 1 731
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : février 2005
Messages : 1 731
Points : 2 010
Points : 2 010
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 :
1
2
3
4
5
Function test()
    Dim oTitre As clsTitre
 
    Set oTitre = Newtitre()
End Function
Dans base A:
Code :
1
2
3
Public Function NewTitre() As clsTitre
    Set NewTitre = New clsTitre
End Function
=JBO= est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2006, 18h58   #5
Invité de passage
 
Inscription : mars 2006
Messages : 3
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 3
Points : 1
Points : 1
Par défaut [RESClasse: instancing=[PublicNotCreatable] + Proc.construct

Citation:
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 !
gsilber est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h46.


 
 
 
 
Partenaires

Hébergement Web