OVH Cloud OVH Cloud

Méthode Load non applicable à un Module ??

6 réponses
Avatar
News Groups
Bonjour,

Pour un formulaire donné j'ai un tableau d'entier : intMonTableau(i)

Au départ pour pouvoir y faire référence je l'ai déclaré au niveau du module
du Formulaire par :
-- Niveau Déclaration Module du Form
°° Private intMonTableau(0 To 10) as Integer

Or comme je fais référence à ce tableau en dehors du Formulaire je l'ai
ensuite déclaré public :
-- Niveau Déclaration Module du Form
°° Public intMonTableau(0 To 10) as Integer
Une erreur à la compilation apparait car je ne peux déclarer de tableau
public au niveau du module du Form !! :-(

J'ai donc déclaré mon Tableau dans un Module Global :
-- Niveau Déclaration Module Global <<mdlMonModule>>
°° Public intMonTableau(0 To 10) as Integer

Cela fait, tout est OK, mais lorsque je ferme mon Formulaire, mon Tableau ne
me sert plus donc
je veux le désallouer de la mémoire. J'ai pour cela peu de solutions :
Faire un Redim sur le tableau :
°° Redim intMonTableau(0)
Mais il n'est pas vraiment désalloué, seulement redimensionné à la dimension
la plus minime possible !! :-(

Le Module Global <<mdlMonModule>> dans lequel est déclaré <<intMonTableau>>
aprés un premier appel reste chargé en mémoire, j'ai donc j'ai voulu
décharger le Module Global <<mdlMonModule>> :
°° Unload Modules("mdlMonModule")
Une erreur à l'éxecution c'est produite : "Impossible de charger ou de
décharger cet objet" !! :-(

Est-ce que la méthode Unload ne s'applique pas aux Modules, (étonnant!) ??
Quelqu'un alors sait-il comment décharger un module de la mémoire ??
Ou sinon , avez vous une idée autre que cette méthode pour désallouer le
tableau ??

Toute remarque est vraiment la bien venu car je stagne dur .. !!

Merci encore,
Thierry.

6 réponses

Avatar
jamilloux
Bonjour,

Je ne sais pas répondre le déchargement de module en
mémoire. mais si tu veux que ton tableau soit alloué en
mémoire selon le besoin et qu'il serve dans une fonction
d'un autre module, alors passe le peut-être en argument à
la fonction en question.
Cordialement
Véronique

-----Message d'origine-----
Bonjour,

Pour un formulaire donné j'ai un tableau d'entier :
intMonTableau(i)


Au départ pour pouvoir y faire référence je l'ai déclaré
au niveau du module

du Formulaire par :
-- Niveau Déclaration Module du Form
°° Private intMonTableau(0 To 10) as Integer

Or comme je fais référence à ce tableau en dehors du
Formulaire je l'ai

ensuite déclaré public :
-- Niveau Déclaration Module du Form
°° Public intMonTableau(0 To 10) as Integer
Une erreur à la compilation apparait car je ne peux
déclarer de tableau

public au niveau du module du Form !! :-(

J'ai donc déclaré mon Tableau dans un Module Global :
-- Niveau Déclaration Module Global <<mdlMonModule>>
°° Public intMonTableau(0 To 10) as Integer

Cela fait, tout est OK, mais lorsque je ferme mon
Formulaire, mon Tableau ne

me sert plus donc
je veux le désallouer de la mémoire. J'ai pour cela peu
de solutions :

Faire un Redim sur le tableau :
°° Redim intMonTableau(0)
Mais il n'est pas vraiment désalloué, seulement
redimensionné à la dimension

la plus minime possible !! :-(

Le Module Global <<mdlMonModule>> dans lequel est déclaré
<<intMonTableau>>

aprés un premier appel reste chargé en mémoire, j'ai donc
j'ai voulu

décharger le Module Global <<mdlMonModule>> :
°° Unload Modules("mdlMonModule")
Une erreur à l'éxecution c'est produite : "Impossible de
charger ou de

décharger cet objet" !! :-(

Est-ce que la méthode Unload ne s'applique pas aux
Modules, (étonnant!) ??

Quelqu'un alors sait-il comment décharger un module de la
mémoire ??

Ou sinon , avez vous une idée autre que cette méthode
pour désallouer le

tableau ??

Toute remarque est vraiment la bien venu car je stagne
dur .. !!


Merci encore,
Thierry.



.



Avatar
News Groups
Effectivement c'est ce principe que j'utilise, je vais détailler un peu plus
mon résonnant :
Mon Tableau est passé par référence dans les fonctions où il est nécessaire
(pour de la lecture ou de l'écriture).
Sur ce principe donc au départ, je l'ai déclaré privé au niveau du module de
mon formulaire et ainsi à la fermeture du
formulaire le tableau était désalloué de la mémoire :
-- Niveau Déclaration Module du Form
°° Private intMonTableau(0 To 10) as Integer


Mais je n'ai pu gardé cette déclaration Privée au niveau formulaire car lors
d'un passage d'un FormA (où se trouve le tableau Privé)
vers un FormB, le tableau est désalloué quand le FormA n'est plus le Form
Actif, donc lorsque l'on reviens sur le FormA tout appel du tableau entraine
une erreur (le cas est identique lorsque FormA est un sous formulaire de
FormB).
C'est la raison pour laquelle j'ai voulu déclaré mon tableau Public au
niveau du Module du Formulaire :
-- Niveau Déclaration Module du Form
°° Private intMonTableau(0 To 10) as Integer


Or cela n'est pas autorisé (erreur de compilation), donc au final j'en suis
venu a le déclarer Public au niveau d'un Module Global :
-- Niveau Déclaration Module Global <<mdlMonModule>>
°° Public intMonTableau(0 To 10) as Integer


D'où la question pour désallouer ce module global lors de la fin de
l'utilisation du tableau :
Est-ce que la méthode Unload ne s'applique pas aux
Modules, (étonnant!) ??

Quelqu'un alors sait-il comment décharger un module de la
mémoire ??

Ou sinon , avez vous une idée autre que cette méthode
pour désallouer le

tableau ??


Cette question restant entiére pour moi ....??....

Si vous avez d'autres idées, je suis preneur...

Merci encore,
Thierry.
"jamilloux" a écrit dans le message de news:
0cfa01c4e43f$ebba3c60$
Bonjour,

Je ne sais pas répondre le déchargement de module en
mémoire. mais si tu veux que ton tableau soit alloué en
mémoire selon le besoin et qu'il serve dans une fonction
d'un autre module, alors passe le peut-être en argument à
la fonction en question.
Cordialement
Véronique

-----Message d'origine-----
Bonjour,

Pour un formulaire donné j'ai un tableau d'entier :
intMonTableau(i)


Au départ pour pouvoir y faire référence je l'ai déclaré
au niveau du module

du Formulaire par :
-- Niveau Déclaration Module du Form
°° Private intMonTableau(0 To 10) as Integer

Or comme je fais référence à ce tableau en dehors du
Formulaire je l'ai

ensuite déclaré public :
-- Niveau Déclaration Module du Form
°° Public intMonTableau(0 To 10) as Integer
Une erreur à la compilation apparait car je ne peux
déclarer de tableau

public au niveau du module du Form !! :-(

J'ai donc déclaré mon Tableau dans un Module Global :
-- Niveau Déclaration Module Global <<mdlMonModule>>
°° Public intMonTableau(0 To 10) as Integer

Cela fait, tout est OK, mais lorsque je ferme mon
Formulaire, mon Tableau ne

me sert plus donc
je veux le désallouer de la mémoire. J'ai pour cela peu
de solutions :

Faire un Redim sur le tableau :
°° Redim intMonTableau(0)
Mais il n'est pas vraiment désalloué, seulement
redimensionné à la dimension

la plus minime possible !! :-(

Le Module Global <<mdlMonModule>> dans lequel est déclaré
<<intMonTableau>>

aprés un premier appel reste chargé en mémoire, j'ai donc
j'ai voulu

décharger le Module Global <<mdlMonModule>> :
°° Unload Modules("mdlMonModule")
Une erreur à l'éxecution c'est produite : "Impossible de
charger ou de

décharger cet objet" !! :-(

Est-ce que la méthode Unload ne s'applique pas aux
Modules, (étonnant!) ??

Quelqu'un alors sait-il comment décharger un module de la
mémoire ??

Ou sinon , avez vous une idée autre que cette méthode
pour désallouer le

tableau ??

Toute remarque est vraiment la bien venu car je stagne
dur .. !!


Merci encore,
Thierry.



.



Avatar
Jamilloux
Bonsoir,

Si l'idée est d'optimiser l'espace mémoire, peut-être
serait-il plus simple de stocker les données du tableau
dans une table temporaire quand tu es dans ton formulaire
A. Une fois celui-ci désactiver tu accèdes aux données de
la table temporaire depuis ton formulaire B. Et tu
supprimes cette table quand tu n'en as plus besoin, à la
fermeture du formulaire A par exemple.
Mais je n'ai pas de réponse concernant la fonction unload
sur un module.
Bon week-end
Véronique
-----Message d'origine-----
Effectivement c'est ce principe que j'utilise, je vais
détailler un peu plus

mon résonnant :
Mon Tableau est passé par référence dans les fonctions où
il est nécessaire

(pour de la lecture ou de l'écriture).
Sur ce principe donc au départ, je l'ai déclaré privé au
niveau du module de

mon formulaire et ainsi à la fermeture du
formulaire le tableau était désalloué de la mémoire :
-- Niveau Déclaration Module du Form
°° Private intMonTableau(0 To 10) as Integer


Mais je n'ai pu gardé cette déclaration Privée au niveau
formulaire car lors

d'un passage d'un FormA (où se trouve le tableau Privé)
vers un FormB, le tableau est désalloué quand le FormA
n'est plus le Form

Actif, donc lorsque l'on reviens sur le FormA tout appel
du tableau entraine

une erreur (le cas est identique lorsque FormA est un
sous formulaire de

FormB).
C'est la raison pour laquelle j'ai voulu déclaré mon
tableau Public au

niveau du Module du Formulaire :
-- Niveau Déclaration Module du Form
°° Private intMonTableau(0 To 10) as Integer


Or cela n'est pas autorisé (erreur de compilation), donc
au final j'en suis

venu a le déclarer Public au niveau d'un Module Global :
-- Niveau Déclaration Module Global <<mdlMonModule>>
°° Public intMonTableau(0 To 10) as Integer


D'où la question pour désallouer ce module global lors de
la fin de

l'utilisation du tableau :
Est-ce que la méthode Unload ne s'applique pas aux
Modules, (étonnant!) ??

Quelqu'un alors sait-il comment décharger un module de la
mémoire ??

Ou sinon , avez vous une idée autre que cette méthode
pour désallouer le

tableau ??


Cette question restant entiére pour moi ....??....

Si vous avez d'autres idées, je suis preneur...

Merci encore,
Thierry.
"jamilloux" a écrit dans le
message de news:

0cfa01c4e43f$ebba3c60$
Bonjour,

Je ne sais pas répondre le déchargement de module en
mémoire. mais si tu veux que ton tableau soit alloué en
mémoire selon le besoin et qu'il serve dans une fonction
d'un autre module, alors passe le peut-être en argument à
la fonction en question.
Cordialement
Véronique

-----Message d'origine-----
Bonjour,

Pour un formulaire donné j'ai un tableau d'entier :
intMonTableau(i)


Au départ pour pouvoir y faire référence je l'ai déclaré
au niveau du module

du Formulaire par :
-- Niveau Déclaration Module du Form
°° Private intMonTableau(0 To 10) as Integer

Or comme je fais référence à ce tableau en dehors du
Formulaire je l'ai

ensuite déclaré public :
-- Niveau Déclaration Module du Form
°° Public intMonTableau(0 To 10) as Integer
Une erreur à la compilation apparait car je ne peux
déclarer de tableau

public au niveau du module du Form !! :-(

J'ai donc déclaré mon Tableau dans un Module Global :
-- Niveau Déclaration Module Global <<mdlMonModule>>
°° Public intMonTableau(0 To 10) as Integer

Cela fait, tout est OK, mais lorsque je ferme mon
Formulaire, mon Tableau ne

me sert plus donc
je veux le désallouer de la mémoire. J'ai pour cela peu
de solutions :

Faire un Redim sur le tableau :
°° Redim intMonTableau(0)
Mais il n'est pas vraiment désalloué, seulement
redimensionné à la dimension

la plus minime possible !! :-(

Le Module Global <<mdlMonModule>> dans lequel est déclaré
<<intMonTableau>>

aprés un premier appel reste chargé en mémoire, j'ai donc
j'ai voulu

décharger le Module Global <<mdlMonModule>> :
°° Unload Modules("mdlMonModule")
Une erreur à l'éxecution c'est produite : "Impossible de
charger ou de

décharger cet objet" !! :-(

Est-ce que la méthode Unload ne s'applique pas aux
Modules, (étonnant!) ??

Quelqu'un alors sait-il comment décharger un module de la
mémoire ??

Ou sinon , avez vous une idée autre que cette méthode
pour désallouer le

tableau ??

Toute remarque est vraiment la bien venu car je stagne
dur .. !!


Merci encore,
Thierry.



.




.




Avatar
Raymond [mvp]
Bonsoir.

on ne peut faire un unload que sur un objet chargé par load. pour être
chargé par load, l'objet doit être un objet de la rubrique Application. Un
module standard n'étant pas une rubrique d'application, il ne peut pas être
chargé donc ne peut pas être déchargé.
il ne reste que les api pour faire ça mais s'il faut utiliser les apis pour
tout faire, pourquoi avoir access ?
--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Jamilloux" a écrit dans le message de
news: 081c01c4e456$0fa1d140$
Bonsoir,

Si l'idée est d'optimiser l'espace mémoire, peut-être
serait-il plus simple de stocker les données du tableau
dans une table temporaire quand tu es dans ton formulaire
A. Une fois celui-ci désactiver tu accèdes aux données de
la table temporaire depuis ton formulaire B. Et tu
supprimes cette table quand tu n'en as plus besoin, à la
fermeture du formulaire A par exemple.
Mais je n'ai pas de réponse concernant la fonction unload
sur un module.
Bon week-end
Véronique
Avatar
Eric
Bonjour News Groups,

En complémént de la réponse de Raymond te disant qu'on ne peut pas
utiliser UnLoad pour décharger un module, voici une solution qui te
permet de récupérer la place allouée à ton tableau.

1-Dans la partie déclarative d'un module global, déclarer ton tableau
dynamiquement par Public intMonTableau() as Integer

2-Dans la procédure évènementielle de ton formulaire, déclarer sa taille
par Redim intMonTableau(0 to 10) au moment opportun.

3-Dans la procédure du formulaire B, quand tu n'en as plus l'utilité,
faire :

Erase intMonTableau

Tu libères ainsi l'espace (mémoire) alloué(e) à ton tableau.
Attention, Erase permet de récupérer l'espace alloué aux tableaux,
uniquement si ceux-la ont été déclarés dynamiquement.

Voila, je ne sais pas si ca t'est d'une grande aide.

A+
Eric




"News Groups" écrivait
news:41c2c052$0$25661$:

Bonjour,

Pour un formulaire donné j'ai un tableau d'entier : intMonTableau(i)

Au départ pour pouvoir y faire référence je l'ai déclaré au niveau du
module du Formulaire par :
-- Niveau Déclaration Module du Form
°° Private intMonTableau(0 To 10) as Integer

Or comme je fais référence à ce tableau en dehors du Formulaire je
l'ai ensuite déclaré public :
-- Niveau Déclaration Module du Form
°° Public intMonTableau(0 To 10) as Integer
Une erreur à la compilation apparait car je ne peux déclarer de
tableau public au niveau du module du Form !! :-(

J'ai donc déclaré mon Tableau dans un Module Global :
-- Niveau Déclaration Module Global <<mdlMonModule>>
°° Public intMonTableau(0 To 10) as Integer

Cela fait, tout est OK, mais lorsque je ferme mon Formulaire, mon
Tableau ne me sert plus donc
je veux le désallouer de la mémoire. J'ai pour cela peu de solutions :
Faire un Redim sur le tableau :
°° Redim intMonTableau(0)
Mais il n'est pas vraiment désalloué, seulement redimensionné à la
dimension la plus minime possible !! :-(

Le Module Global <<mdlMonModule>> dans lequel est déclaré
<<intMonTableau>> aprés un premier appel reste chargé en mémoire, j'ai
donc j'ai voulu décharger le Module Global <<mdlMonModule>> :
°° Unload Modules("mdlMonModule")
Une erreur à l'éxecution c'est produite : "Impossible de charger ou de
décharger cet objet" !! :-(

Est-ce que la méthode Unload ne s'applique pas aux Modules,
(étonnant!) ?? Quelqu'un alors sait-il comment décharger un module de
la mémoire ?? Ou sinon , avez vous une idée autre que cette méthode
pour désallouer le tableau ??

Toute remarque est vraiment la bien venu car je stagne dur .. !!

Merci encore,
Thierry.






Avatar
News Groups
Merci à vous de m'aider sur le sujet ! :-)

L'option d'utiliser des tables tempo comme me le conseille Véronique n'est
pas possible,
car je suis dans un projet ADP (Access 2002 / SQL Server) donc les tables
sont celle sous SQL Server
et je rechigne à y créer des tables portant sur la gestion de l'application,
d'ùo mon utlisation de tableau comme mode de stockage.

Je vais abandonner l'idée de décharger les modules globaux, car comme le dit
Raymond
" ..s'il faut utiliser les apis pour tout faire, pourquoi avoir access ?.."

Par contre l'instruction Erase est, je pense parfaite pour mon cas ;- ) ,
merci Eric !

Encore meci de votre aide,
Thierry.




"jamilloux" a écrit dans le message de news:
0cfa01c4e43f$ebba3c60$
Bonjour,

Je ne sais pas répondre le déchargement de module en
mémoire. mais si tu veux que ton tableau soit alloué en
mémoire selon le besoin et qu'il serve dans une fonction
d'un autre module, alors passe le peut-être en argument à
la fonction en question.
Cordialement
Véronique

-----Message d'origine-----
Bonjour,

Pour un formulaire donné j'ai un tableau d'entier :
intMonTableau(i)


Au départ pour pouvoir y faire référence je l'ai déclaré
au niveau du module

du Formulaire par :
-- Niveau Déclaration Module du Form
°° Private intMonTableau(0 To 10) as Integer

Or comme je fais référence à ce tableau en dehors du
Formulaire je l'ai

ensuite déclaré public :
-- Niveau Déclaration Module du Form
°° Public intMonTableau(0 To 10) as Integer
Une erreur à la compilation apparait car je ne peux
déclarer de tableau

public au niveau du module du Form !! :-(

J'ai donc déclaré mon Tableau dans un Module Global :
-- Niveau Déclaration Module Global <<mdlMonModule>>
°° Public intMonTableau(0 To 10) as Integer

Cela fait, tout est OK, mais lorsque je ferme mon
Formulaire, mon Tableau ne

me sert plus donc
je veux le désallouer de la mémoire. J'ai pour cela peu
de solutions :

Faire un Redim sur le tableau :
°° Redim intMonTableau(0)
Mais il n'est pas vraiment désalloué, seulement
redimensionné à la dimension

la plus minime possible !! :-(

Le Module Global <<mdlMonModule>> dans lequel est déclaré
<<intMonTableau>>

aprés un premier appel reste chargé en mémoire, j'ai donc
j'ai voulu

décharger le Module Global <<mdlMonModule>> :
°° Unload Modules("mdlMonModule")
Une erreur à l'éxecution c'est produite : "Impossible de
charger ou de

décharger cet objet" !! :-(

Est-ce que la méthode Unload ne s'applique pas aux
Modules, (étonnant!) ??

Quelqu'un alors sait-il comment décharger un module de la
mémoire ??

Ou sinon , avez vous une idée autre que cette méthode
pour désallouer le

tableau ??

Toute remarque est vraiment la bien venu car je stagne
dur .. !!


Merci encore,
Thierry.



.