OVH Cloud OVH Cloud

Dim dans la déclaration générale

11 réponses
Avatar
TouTi
Bonjour et bon Lundi ;-))

J'aimerai bien comprendre l'utilisation de l'intruction "Dim" en long en
large et en travers et trouver des rémèdes.

1) Elle permet de déclarer des variables
2) Dans un module, cette variable est accessible à l'ensemble du module
3) Dans une procédure, cette variable est accessible qu'à la procédure
4) Dans une form, cette variable est accessible à l'ensemble de la form

Dans le cas 4, à la fermeture de la form on pourrait penser que la variable
soit vidée/supprimée mais il n'en est rien.
Toujours dans même ce cas, comment vider/supprimer toutes les variables à
l'ouverture ou la fermeture de la form????

Merci

'''Form2
Dim resu As Integer

Private Sub Command1_Click()
MsgBox resu
resu = resu + 10
Text1 = resu
End Sub


''Form1
Private Sub Command2_Click()
Load Form2
Form2.Show
End Sub


--
TouTi

10 réponses

1 2
Avatar
Christian Hugoud
Si, la variable doit disparaître. Cependant, elle est peut-être déclarée en
public ailleurs, mais il me semble que le compilateur le détecterait.

Aussi possible : la feuille n'est pas déchargée. Lorsque tu la réaffiches,
tu retrouves les valeurs positionnées dans tes variables locales.

Pour décharger :
unload f
set f = nothing

tout ceci depuis l'extérieur de la feuille.


Tu peux toujours tester si f is nothing. Ces instructions ne fonctionneront
pas si dans ta feuille tu références un autre objet public et qu'il existe
toujours au moment du déchargement. Le forçage à nothing est inopérant dans
ce cas. Tu dois mettre à nothing tes références internes à la feuille. De
même, si ta feuille est référencée à l'extérieur d'elle même (par exemple
dans une collection), tu ne peux pas la décharger.

Hope this helps

Christian



"TouTi" <gelapplication[nospam]@tiscali.fr> a écrit dans le message de news:
44155397$0$20138$
Bonjour et bon Lundi ;-))

J'aimerai bien comprendre l'utilisation de l'intruction "Dim" en long en
large et en travers et trouver des rémèdes.

1) Elle permet de déclarer des variables
2) Dans un module, cette variable est accessible à l'ensemble du module
3) Dans une procédure, cette variable est accessible qu'à la procédure
4) Dans une form, cette variable est accessible à l'ensemble de la form

Dans le cas 4, à la fermeture de la form on pourrait penser que la
variable soit vidée/supprimée mais il n'en est rien.
Toujours dans même ce cas, comment vider/supprimer toutes les variables à
l'ouverture ou la fermeture de la form????

Merci

'''Form2
Dim resu As Integer

Private Sub Command1_Click()
MsgBox resu
resu = resu + 10
Text1 = resu
End Sub


''Form1
Private Sub Command2_Click()
Load Form2
Form2.Show
End Sub


--
TouTi




Avatar
X
Bonjour,

Ça dépend aussi de ce que l'on met devant, s'il y a

public variable
form1

Tu peux de n'importe qu'elle forme l'appeler (mais pas en indicé je crois)

form2
form1.variable = y

Ça revient à l'équivalent du module dans le principe, et ça évite d'avoir
une feuille de plus (le module)...
----------------------

Normalement il me semble que ça se décharge quand tu ferme le programme:
unload form X
unload form Y...
end

Peut être que tu peux encore lire les emplacement mémoire ? Mais normalement
au déchargement d'un programme les endroits mémoire où se trouvent les
variables sont désalloués (libre pour un autre programme)...

Mais de toute façon par rigueur, il est toujours sage d'uinitialiser les
variables en entrant dans un programme, leur donner une valeur ou RAB our
RAB...
-----------------------

Tu a d'autre cas de figure aussi, tel que les définition indicés non encore
déterminées à la déclaration:
dim variable()
formX
redim variable(y)

etc...



------
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
------------------------------------------------------------------------------------
"TouTi" <gelapplication[nospam]@tiscali.fr> a écrit dans le message de news:
44155397$0$20138$
Bonjour et bon Lundi ;-))

J'aimerai bien comprendre l'utilisation de l'intruction "Dim" en long en
large et en travers et trouver des rémèdes.

1) Elle permet de déclarer des variables
2) Dans un module, cette variable est accessible à l'ensemble du module
3) Dans une procédure, cette variable est accessible qu'à la procédure
4) Dans une form, cette variable est accessible à l'ensemble de la form

Dans le cas 4, à la fermeture de la form on pourrait penser que la
variable soit vidée/supprimée mais il n'en est rien.
Toujours dans même ce cas, comment vider/supprimer toutes les variables à
l'ouverture ou la fermeture de la form????

Merci

'''Form2
Dim resu As Integer

Private Sub Command1_Click()
MsgBox resu
resu = resu + 10
Text1 = resu
End Sub


''Form1
Private Sub Command2_Click()
Load Form2
Form2.Show
End Sub


--
TouTi




Avatar
Thierry
Attention, si tu n'est pas en "option explicit", VB va déclarer une variable
pour toi...



"TouTi" <gelapplication[nospam]@tiscali.fr> a écrit dans le message de news:
44155397$0$20138$
Bonjour et bon Lundi ;-))

J'aimerai bien comprendre l'utilisation de l'intruction "Dim" en long en
large et en travers et trouver des rémèdes.

1) Elle permet de déclarer des variables
2) Dans un module, cette variable est accessible à l'ensemble du module
3) Dans une procédure, cette variable est accessible qu'à la procédure
4) Dans une form, cette variable est accessible à l'ensemble de la form

Dans le cas 4, à la fermeture de la form on pourrait penser que la


variable
soit vidée/supprimée mais il n'en est rien.
Toujours dans même ce cas, comment vider/supprimer toutes les variables à
l'ouverture ou la fermeture de la form????

Merci

'''Form2
Dim resu As Integer

Private Sub Command1_Click()
MsgBox resu
resu = resu + 10
Text1 = resu
End Sub


''Form1
Private Sub Command2_Click()
Load Form2
Form2.Show
End Sub


--
TouTi




Avatar
Jean-Marc
"TouTi" <gelapplication[nospam]@tiscali.fr> a écrit dans le message de
news:44155397$0$20138$
Bonjour et bon Lundi ;-))

J'aimerai bien comprendre l'utilisation de l'intruction "Dim" en long


en
large et en travers et trouver des rémèdes.

1) Elle permet de déclarer des variables
2) Dans un module, cette variable est accessible à l'ensemble du


module
3) Dans une procédure, cette variable est accessible qu'à la procédure
4) Dans une form, cette variable est accessible à l'ensemble de la


form

Dans le cas 4, à la fermeture de la form on pourrait penser que la


variable
soit vidée/supprimée mais il n'en est rien.
Toujours dans même ce cas, comment vider/supprimer toutes les


variables à
l'ouverture ou la fermeture de la form????



Hello Touti,

le plus simple est de prendre l'information
à la source, c'est à dire ici:
http://msdn.microsoft.com/library/en-us/vbenlr98/html/vastmDim.asp

Tu as une description exhaustive de l'utilisation de Dim, dans tous
les cas et sous toutes ses formes.

--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
Avatar
TouTi
Merci à tous pour vos réflexions et coup de mains

Je pense que ds le cas d'une déclaration dans une form, il est souhaitable
d'initialiser les variables à l'ouverture et/ou à la fermeture de la form.

Sans quoi, comme la commande Erase pour un tableau, y a-t-il une commande
pour vider les variables sans s'occuper de leur type???


--
TouTi
Avatar
Jean-Marc
"TouTi" <gelapplication[nospam]@tiscali.fr> a écrit dans le message de
news:441673be$0$20162$
Merci à tous pour vos réflexions et coup de mains



Mais de rien :-)

Je pense que ds le cas d'une déclaration dans une form, il est


souhaitable
d'initialiser les variables à l'ouverture et/ou à la fermeture de la


form.

Oui pourquoi pas, mais voir la suite.

Sans quoi, comme la commande Erase pour un tableau, y a-t-il une


commande
pour vider les variables sans s'occuper de leur type???



Hello,

Je pense que tu fais fausse route dans ton raisonnement.
Les variables ne sont pas des choses qu'on déclare en vrac
et qu'on libère en vrac. Une variable a un but, un usage,
une durée de vie, etc.
On déclare les variables le plus localement possible,
idéalement uniquement des variables locales (au niveau
procédure).
Pour les variables au niveau forme, leur nombre doit
être limité (sinon c'est une erreur de conception) et
dans ce cas effectivement, on peut les initialiser au
chargement (via une procédure d'init appelée depuis form_load
par exemple). Quand à les "effacer" ou les "vider", ça n'a pas
de sens en VB. Le programme se termine ou la form se décharge et
les variables disparaissent de la mémoire.

VOila, j'espère que ceci t'éclaire un peu. Note que ceci sort un
peu du cadre strictement VB, on parle ici de concepts généraux
d'informatique et d'algorithmique. Il y a plein de bons livres
et/ou sites qui traitent du sujet dans le détail. Si tu es intéressé,
je peux te donner des références.

--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
Avatar
X
Bonjour,

Bis: non, à l'ouverture, oui, c'es à mon sens conseillé, ça évite de
petite erreur où l'on passe dès fois beaucoup de temps...

Mais à la fermeture, NON, si la forme est déchargé "unload", le
programme desalloue les variables...

Où tu as vu (après déchargement des feuilles et fermeture du programme),
que tes variables étaient encore allouées et bloquées pour ton programme ???

Bis repetita -> il est possible que les variables ne s'effacent pas
toujours en RAM ??? Mais si le programme est "bien" fermées, elles sont
désallouées, comme sur le disque, quand tu supprimer un fichier, tu
retrouves des blocs d'écriture de ton fichier, mais les blocs sont
désalloués, ça veut dire qu'ils sont là mais n'occupent rien, car disponible
pour le premier qui écrit dessus...

------
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
------------------------------------------------------------------------------------
"TouTi" <gelapplication[nospam]@tiscali.fr> a écrit dans le message de news:
441673be$0$20162$
Merci à tous pour vos réflexions et coup de mains

Je pense que ds le cas d'une déclaration dans une form, il est souhaitable
d'initialiser les variables à l'ouverture et/ou à la fermeture de la form.

Sans quoi, comme la commande Erase pour un tableau, y a-t-il une commande
pour vider les variables sans s'occuper de leur type???


--
TouTi





Avatar
TouTi
Jean marc
Quand à les "effacer" ou les "vider", ça n'a pas
de sens en VB. Le programme se termine ou la form se décharge et
les variables disparaissent de la mémoire.



X
Où tu as vu (après déchargement des feuilles et fermeture du programme),
que tes variables étaient encore allouées et bloquées pour ton programme
???



Je suis surpris, mais c'est bien ce qui arrive... Un exemple figure dans mon
premier post

--
Touti
Avatar
TouTi
>Il y a plein de bons livres
et/ou sites qui traitent du sujet dans le détail. Si tu es intéressé,
je peux te donner des références.



Je veux bien Jean Marc

--
TouTi
Avatar
Jean-Marc
"TouTi" <gelapplication[nospam]@tiscali.fr> a écrit dans le message de
news:441957b1$0$18344$
Jean marc
Quand à les "effacer" ou les "vider", ça n'a pas
> de sens en VB. Le programme se termine ou la form se décharge et
> les variables disparaissent de la mémoire.

X
>Où tu as vu (après déchargement des feuilles et fermeture du


programme),
>que tes variables étaient encore allouées et bloquées pour ton


programme
>???

Je suis surpris, mais c'est bien ce qui arrive... Un exemple figure


dans mon
premier post



Hello Touti,

Ce que tu observes est normal. J'avoue que la doc de VB n'est pas
super explicite, il faut un peu chercher...

J'explique:
Tant qu'il y a un objet référencé, les variables déclarées au niveau
d'un module ne sont PAS désallouées. La désallocation de la mémoire
est faite au moment ou l'évènement Terminate() est appelé.

Hors, si dans ton exemple, tu ajoutes ceci:

Private Sub Form_Terminate()
MsgBox "tout est vide maintenant"
End Sub

Tu verras que tu ne passes JAMAIS par ce code. Pourquoi: simplement
parce que la form en se chargeant la première fois à instancié une
variable (resu), ce qui suffit à empêcher cet évènement de se produire.

Donc, contrairement à l'idée reçue les variables ne disparaissent PAS
à la fermeture *SIMPLE* de la forme. Mon dernier post n'était pas clair
sur ce point, en fait j'ai carrément oublié de mentionner ce qui suit
ici.

Quelle est la solution? C'est tout simple: tu dois dire à VB au moment
ou tu fermes ta forme (Form2) que tu ne souhaites VRAIMENT plus
l'utiliser,
ni aucune de ses variables.

Comment faire? Simple:

Tu ajoutes ceci dans form2:
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Set Form2 = Nothing
End Sub

Et la tu verras que l'évènement Terminate() va être appelé. Puis si
tu reviens dans Form2, tu verras que resu a bien été réinitialisée
à 0.

Voila pourquoi les variables au niveau module sont si dangeureuses:
si on ne prend pas de précautions, leur durée de vie est plus
importante que ce que l'on croit.


--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
1 2