OVH Cloud OVH Cloud

Importer un module dont le Attribute VB a été modifié

9 réponses
Avatar
Archives
Bonsoir,

Je souhaite rendre publique une classe à partir d'une autre base Access 97.
D'après d'autre fils, il faut changer la déclaration Attribute
VB_Exposed=False en True. J'exporte donc ma classe dans un fichier texte, je
modifie la déclaration ci-dessus, puis je détruis ma classe dans la base
Access.

Comment puis-je maintenant importer cette classe à partir du nouveau fichier
? Je ne parviens à importer que des bases de données, pas des modules.

Merci

9 réponses

Avatar
Raymond [mvp]
Bonjour.

Si comme je le pense tu as exporté ton module par la fonction:
SaveAsText acModule, "classe1", "classe1.txt"

Il te faut l'importer par la fonction inverse:
LoadFromText acModule, "classe1", "classe1.txt"

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Archives" a écrit dans le message de
news:casij4$c2h$
Bonsoir,

Je souhaite rendre publique une classe à partir d'une autre base Access
97.

D'après d'autre fils, il faut changer la déclaration Attribute
VB_Exposedúlse en True. J'exporte donc ma classe dans un fichier texte,
je

modifie la déclaration ci-dessus, puis je détruis ma classe dans la base
Access.

Comment puis-je maintenant importer cette classe à partir du nouveau
fichier

? Je ne parviens à importer que des bases de données, pas des modules.

Merci





Avatar
Archives
Non, en fait j'ai simplement utilisé la fonction "Exporter" avec le click
droit de la souris dans l'onglet Module.

J'ai essayé votre fonction "LoadFromText". Access 97 me répond qu'il s'agit
d'une fonction cachée mais il l'accepte tout de même à la compilation. En
revanche, à l'éxécution, il me réponds:

Erreur détectée à la ligne 1
Attendu: operation. Trouvé: Attribute.

Curieux...

"Raymond [mvp]" a écrit dans le message de
news: Oaa#a$
Bonjour.

Si comme je le pense tu as exporté ton module par la fonction:
SaveAsText acModule, "classe1", "classe1.txt"

Il te faut l'importer par la fonction inverse:
LoadFromText acModule, "classe1", "classe1.txt"

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Archives" a écrit dans le message de
news:casij4$c2h$
Bonsoir,

Je souhaite rendre publique une classe à partir d'une autre base Access
97.

D'après d'autre fils, il faut changer la déclaration Attribute
VB_Exposedúlse en True. J'exporte donc ma classe dans un fichier
texte,


je
modifie la déclaration ci-dessus, puis je détruis ma classe dans la base
Access.

Comment puis-je maintenant importer cette classe à partir du nouveau
fichier

? Je ne parviens à importer que des bases de données, pas des modules.

Merci









Avatar
Raymond [mvp]
je ne connais qu'une seule méthode qui fonctionne bien pour l'export et
l'import de modules c'est saveastext et loadfromtext.
il te reste à recréer un txt à partir d'un autre module, de modifier les
paramètres et de le recharger.

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Archives" a écrit dans le message de
news:caskn1$pcn$
Non, en fait j'ai simplement utilisé la fonction "Exporter" avec le click
droit de la souris dans l'onglet Module.

J'ai essayé votre fonction "LoadFromText". Access 97 me répond qu'il
s'agit

d'une fonction cachée mais il l'accepte tout de même à la compilation. En
revanche, à l'éxécution, il me réponds:

Erreur détectée à la ligne 1
Attendu: operation. Trouvé: Attribute.

Curieux...


Avatar
Archives
En fait, j'ai l'impression que c'est le module de classe qui crée une
erreur. Un module normal semble bien passer, mais je ne parviens pas à
importer un module de classe.

"Raymond [mvp]" a écrit dans le message de
news:
je ne connais qu'une seule méthode qui fonctionne bien pour l'export et
l'import de modules c'est saveastext et loadfromtext.
il te reste à recréer un txt à partir d'un autre module, de modifier les
paramètres et de le recharger.

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Archives" a écrit dans le message de
news:caskn1$pcn$
Non, en fait j'ai simplement utilisé la fonction "Exporter" avec le
click


droit de la souris dans l'onglet Module.

J'ai essayé votre fonction "LoadFromText". Access 97 me répond qu'il
s'agit

d'une fonction cachée mais il l'accepte tout de même à la compilation.
En


revanche, à l'éxécution, il me réponds:

Erreur détectée à la ligne 1
Attendu: operation. Trouvé: Attribute.

Curieux...






Avatar
Raymond [mvp]
je ne vois pas ce qui peut gêner si l'export est fait par le saveastext et
l'import par loadfromtext. je viens de faire des essais, je n'ai pas de
remarques à faire. il n'y a pas d'erreur de compil dans le module ?

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Archives" a écrit dans le message de
news:casnvl$7bu$
En fait, j'ai l'impression que c'est le module de classe qui crée une
erreur. Un module normal semble bien passer, mais je ne parviens pas à
importer un module de classe.


Avatar
Archives
Déjà, je ne peux exporter un module de classe avec la fonction SaveAsText.
Avec le paramètre acClassModule, Access 97 me réponds qu'il ne trouve pas le
module. Si je metle paramètre acModule à la place, il sauvegarde le module
mais en temps que module normal et non un module de classe. Les déclarations
en entête du fichier sont alors différentes, il n'y a plus par exemple
d'attribute VB exposed.

Si j'ajoute ces lignes à la main (ou en sauvegardant avec la commande click
droit souris Suavegarder sous), l'importation génére une erreur avec
LoadFomText.


"Raymond [mvp]" a écrit dans le message de
news:
je ne vois pas ce qui peut gêner si l'export est fait par le saveastext et
l'import par loadfromtext. je viens de faire des essais, je n'ai pas de
remarques à faire. il n'y a pas d'erreur de compil dans le module ?

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Archives" a écrit dans le message de
news:casnvl$7bu$
En fait, j'ai l'impression que c'est le module de classe qui crée une
erreur. Un module normal semble bien passer, mais je ne parviens pas à
importer un module de classe.






Avatar
Raymond [mvp]
je viens de refaire mes essais.

saveastext me donne pour un module de classe vierge:
Attribute VB_Creatable = True
Option Compare Database
Option Explicit

le loadfromtext du même fichier me donne le même module de classe.

en 97 il n'y a pas d'autres options.

si je lis un fichier créé par 2003, 97 supprime toutes les options.

en 2003, j'ai ces options dans un module vierge:
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False
Option Compare Database
Option Explicit

D'après moi, VB_Exposed n'est pas une option 97 et il ne faut pas s'acharner
dessus.

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Archives" a écrit dans le message de
news:casqou$u2i$
Déjà, je ne peux exporter un module de classe avec la fonction SaveAsText.
Avec le paramètre acClassModule, Access 97 me réponds qu'il ne trouve pas
le

module. Si je metle paramètre acModule à la place, il sauvegarde le module
mais en temps que module normal et non un module de classe. Les
déclarations

en entête du fichier sont alors différentes, il n'y a plus par exemple
d'attribute VB exposed.

Si j'ajoute ces lignes à la main (ou en sauvegardant avec la commande
click

droit souris Suavegarder sous), l'importation génére une erreur avec
LoadFomText.


Avatar
Archives
Pourtant, en créant un module de classe (non vierge) sous Access 97 et en le
sauvegardant à l'aide du menu click droit "Enregistre sous / Exporter" dans
la fenêtre de base de données, j'obtient bien dans le fichier texte
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False

Mais la fonction loadfromtext génére une erreur lorsqu'elle lit ce fichier,
même sans le modifier.


"Raymond [mvp]" a écrit dans le message de
news: #
je viens de refaire mes essais.

saveastext me donne pour un module de classe vierge:
Attribute VB_Creatable = True
Option Compare Database
Option Explicit

le loadfromtext du même fichier me donne le même module de classe.

en 97 il n'y a pas d'autres options.

si je lis un fichier créé par 2003, 97 supprime toutes les options.

en 2003, j'ai ces options dans un module vierge:
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False
Option Compare Database
Option Explicit

D'après moi, VB_Exposed n'est pas une option 97 et il ne faut pas
s'acharner

dessus.

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Archives" a écrit dans le message de
news:casqou$u2i$
Déjà, je ne peux exporter un module de classe avec la fonction
SaveAsText.


Avec le paramètre acClassModule, Access 97 me réponds qu'il ne trouve
pas


le
module. Si je metle paramètre acModule à la place, il sauvegarde le
module


mais en temps que module normal et non un module de classe. Les
déclarations

en entête du fichier sont alors différentes, il n'y a plus par exemple
d'attribute VB exposed.

Si j'ajoute ces lignes à la main (ou en sauvegardant avec la commande
click

droit souris Suavegarder sous), l'importation génére une erreur avec
LoadFomText.






Avatar
Archives
Apparemment, le premier paramètre des fonctions SaveAsText et LoadFromText
appartient à la collection AcObjectType. Cette collection ne contient que le
membre acModule (=5) mais pas du tout de membre acClassModule.

Ces fonctions sont malgré tout utilisables pour ces deux types de module.
Acces différencie ces deux types de modules en ajoutant la ligne "Attribute
VB_Creatable = True" au début du fichier texte de sauvegarde. Si au moment
du chargement du module il trouve cette ligne, il en déduit qu'il s'agit
d'un module de classe.

Cependant, en utilisant la commande Click droit "Sauvegarder sous/ Exporter"
pour un module de classe, Access ajoute encore des lignes supplémentaires en
tête de fichier:

Attribute VB_Name = "MyClass"
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False

On peut donc recopier les lignes manquantes dans le fichier obtenu avec la
fonction SaveAsText en prenant soin de laisser la ligne "Attribute
VB_Creatable = True" en tête de fichier (ce qui me faisait planter hier
soir).

On peut alors forcer "Attribute VB_Exposed = True" et ainsi rendre visible
un module de classe depuis un projet Access 97 extérieur, ce qui est très
pratique et évite de recopier tout un tas de modules dans le projet.

Là où je n'ai pas encore compris, c'est que l'application extérieure admet
le mot clé New, ce qui d'après la litérature est impossible sous Access 97.
Nul besoin de passer par un module intermédiaire qui crée l'objet dans le
fichiçer Acces contenant le module de classe. Tant mieux...

Merci pour cette fonction cachée.


"Archives" a écrit dans le message de news:
castvr$tlf$
Pourtant, en créant un module de classe (non vierge) sous Access 97 et en
le

sauvegardant à l'aide du menu click droit "Enregistre sous / Exporter"
dans

la fenêtre de base de données, j'obtient bien dans le fichier texte
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False

Mais la fonction loadfromtext génére une erreur lorsqu'elle lit ce
fichier,

même sans le modifier.


"Raymond [mvp]" a écrit dans le message de
news: #
je viens de refaire mes essais.

saveastext me donne pour un module de classe vierge:
Attribute VB_Creatable = True
Option Compare Database
Option Explicit

le loadfromtext du même fichier me donne le même module de classe.

en 97 il n'y a pas d'autres options.

si je lis un fichier créé par 2003, 97 supprime toutes les options.

en 2003, j'ai ces options dans un module vierge:
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False
Option Compare Database
Option Explicit

D'après moi, VB_Exposed n'est pas une option 97 et il ne faut pas
s'acharner

dessus.

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Archives" a écrit dans le message de
news:casqou$u2i$
Déjà, je ne peux exporter un module de classe avec la fonction
SaveAsText.


Avec le paramètre acClassModule, Access 97 me réponds qu'il ne trouve
pas


le
module. Si je metle paramètre acModule à la place, il sauvegarde le
module


mais en temps que module normal et non un module de classe. Les
déclarations

en entête du fichier sont alors différentes, il n'y a plus par exemple
d'attribute VB exposed.

Si j'ajoute ces lignes à la main (ou en sauvegardant avec la commande
click

droit souris Suavegarder sous), l'importation génére une erreur avec
LoadFomText.