Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

1 / absence de RAZ des variables 2/ EnableEvents sans effet

3 réponses
Avatar
M41
Bonjour

2 problèmes différents (Excel 2002 sous Win XP)

1 //absence de remise à zéro des variables typées/
J'ai dans un module une variable Type sous forme A avec ses "déclinaisons"
.A .B .C .D
Je charge ces variables dans le code d'un Userform à travers un variant
Array (placé
dans l'initialisation de ce Userform ; Nini est déclaré Private pour tout le
code du Userform)

Nini = Array(A.A, A.B, A.C, A.D)

N = Array(EstA, EstB, EstC, EstD) est un tableau constitué à partitr de
Const délarées Public dans le module principale (Public const EstA as
string ...)


Dans le userform les valeurs de Nini sont changées par des CheckBox
si par exemple CheckBox1.Value =True alors Nini(0)=N(0) sinon Nini(0)=""
avec aussi après A.A=Nini(0)
En fait tout se passe comme si la référence à une variable dans Nini était
remplacée par
une valeur : des Debug.Print prouvent que celà fonctionne parfaitement.


Le Userform est Unload et son programme Sub de commande (module) s'arrête
Surprise : lorsque je relance le Sub du module la variable typée A a
concervé les
valeurs de la dernière ouverture du Userform : ceci ne me semble pas logique
puisqu'à la fermeture totale du Userforme (Unload) et après la fin du Sub de
commande
toutes les variables devraient être remises à zéro ou "" !!!!!

S'agit il d'un bogue qui fait que lorsque l'on charge initialement un Array
avec les valeurs d'un tableau typé, tout se passe comme si ce tableau typé
devenait Static même après arrêt total de VBA ? La remise à zéro ne se fait
que si l'on décharge-recharge l'application.

2// EnableEvents sans effet

Application.EnableEvents = False
If X Then CheckBox1.Value = True

...entraine l'activation de

Private Sub CheckBox1_Click()

?


Cordialement
M41

3 réponses

Avatar
MichDenis
Déclare ta variable typée au niveau du formulaire pas
au niveau d'un module standard .. un petit exemple :

"La durée de vie d'une est fonction de l'endroit où celle-ci a été déclarée.

'Déclaration de la variable
Private Type Denis
a As Integer
End Type


'Renseigne la variable
'-------------------------
Sub test()
Dim x As Denis
x.a = 25
MsgBox x.a
End Sub

'Appel de la variable.
'-------------------------
Private Sub CommandButton1_Click()
test
End Sub


Si tu veux utiliser un module standard, ajoute une procédure
qui va remettre à zéro tous les éléments de ta variables

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
x.a = 0
End Sub




"M41" a écrit dans le message de news:
45f3f162$0$27389$
Bonjour

2 problèmes différents (Excel 2002 sous Win XP)

1 //absence de remise à zéro des variables typées/
J'ai dans un module une variable Type sous forme A avec ses "déclinaisons"
.A .B .C .D
Je charge ces variables dans le code d'un Userform à travers un variant
Array (placé
dans l'initialisation de ce Userform ; Nini est déclaré Private pour tout le
code du Userform)

Nini = Array(A.A, A.B, A.C, A.D)

N = Array(EstA, EstB, EstC, EstD) est un tableau constitué à partitr de
Const délarées Public dans le module principale (Public const EstA as
string ...)


Dans le userform les valeurs de Nini sont changées par des CheckBox
si par exemple CheckBox1.Value =True alors Nini(0)=N(0) sinon Nini(0)=""
avec aussi après A.A=Nini(0)
En fait tout se passe comme si la référence à une variable dans Nini était
remplacée par
une valeur : des Debug.Print prouvent que celà fonctionne parfaitement.


Le Userform est Unload et son programme Sub de commande (module) s'arrête
Surprise : lorsque je relance le Sub du module la variable typée A a
concervé les
valeurs de la dernière ouverture du Userform : ceci ne me semble pas logique
puisqu'à la fermeture totale du Userforme (Unload) et après la fin du Sub de
commande
toutes les variables devraient être remises à zéro ou "" !!!!!

S'agit il d'un bogue qui fait que lorsque l'on charge initialement un Array
avec les valeurs d'un tableau typé, tout se passe comme si ce tableau typé
devenait Static même après arrêt total de VBA ? La remise à zéro ne se fait
que si l'on décharge-recharge l'application.

2// EnableEvents sans effet

Application.EnableEvents = False
If X Then CheckBox1.Value = True

...entraine l'activation de

Private Sub CheckBox1_Click()

?


Cordialement
M41
Avatar
M41
Bonjour
Le module standard est obligatoire car c'est là que sont traitées ensuite
les données (application complexe puisque l'ensemble de VBA fait à ce jour 7
à 8000 lignes : le programme est totalement écrit "en mode relatif" à partir
qqs centaines de lignes de déclarations constantes, variables publiques ou
fonctions simples équivalentes à des déclarations complexes, pour faciliter
la maintenance : elles décrivent les feuilles). La solution est donc une RAZ
après usage des données avant arrêt total de VBA. Mais il s'agit bien d'un
bogue de défaut de remise à zéro des variables après arrêt total de basic
et pour la seconde question ?
Cordialement
M41



"MichDenis" a écrit dans le message de news:

Déclare ta variable typée au niveau du formulaire pas
au niveau d'un module standard .. un petit exemple :

"La durée de vie d'une est fonction de l'endroit où celle-ci a été
déclarée.

'Déclaration de la variable
Private Type Denis
a As Integer
End Type


'Renseigne la variable
'-------------------------
Sub test()
Dim x As Denis
x.a = 25
MsgBox x.a
End Sub

'Appel de la variable.
'-------------------------
Private Sub CommandButton1_Click()
test
End Sub


Si tu veux utiliser un module standard, ajoute une procédure
qui va remettre à zéro tous les éléments de ta variables

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
x.a = 0
End Sub




"M41" a écrit dans le message de news:
45f3f162$0$27389$
Bonjour

2 problèmes différents (Excel 2002 sous Win XP)

1 //absence de remise à zéro des variables typées/
J'ai dans un module une variable Type sous forme A avec ses "déclinaisons"
.A .B .C .D
Je charge ces variables dans le code d'un Userform à travers un variant
Array (placé
dans l'initialisation de ce Userform ; Nini est déclaré Private pour tout
le
code du Userform)

Nini = Array(A.A, A.B, A.C, A.D)

N = Array(EstA, EstB, EstC, EstD) est un tableau constitué à partitr de
Const délarées Public dans le module principale (Public const EstA as
string ...)


Dans le userform les valeurs de Nini sont changées par des CheckBox
si par exemple CheckBox1.Value =True alors Nini(0)=N(0) sinon Nini(0)=""
avec aussi après A.A=Nini(0)
En fait tout se passe comme si la référence à une variable dans Nini était
remplacée par
une valeur : des Debug.Print prouvent que celà fonctionne parfaitement.


Le Userform est Unload et son programme Sub de commande (module) s'arrête
Surprise : lorsque je relance le Sub du module la variable typée A a
concervé les
valeurs de la dernière ouverture du Userform : ceci ne me semble pas
logique
puisqu'à la fermeture totale du Userforme (Unload) et après la fin du Sub
de
commande
toutes les variables devraient être remises à zéro ou "" !!!!!

S'agit il d'un bogue qui fait que lorsque l'on charge initialement un
Array
avec les valeurs d'un tableau typé, tout se passe comme si ce tableau typé
devenait Static même après arrêt total de VBA ? La remise à zéro ne se
fait
que si l'on décharge-recharge l'application.

2// EnableEvents sans effet

Application.EnableEvents = False
If X Then CheckBox1.Value = True

...entraine l'activation de

Private Sub CheckBox1_Click()

?


Cordialement
M41





Avatar
MichDenis
| Mais il s'agit bien d'un bogue de défaut de remise à zéro des variables
| après arrêt total de basic et pour la seconde question ?

Absolument pas. Pour pouvoir utiliser ta variable définie dans un module standard
dans un module formulaire, ta variable doit être obligatoirement déclarer
comme "Public", c'est à dire qu'elle est accessible dans n'importe quel module.
Lorsque dans une procédure, ce type de variable est renseignée, elle perd sa
valeur seulement au moment de la fermeture du classeur ou au moment où on
lui affecte une autre valeur.

Je réitère cette affirmation à l'effet que la durée de vie d'une variable dépend
de l'endroit et de la manière dont on a fait sa déclaration et non de l'endroit
et du moment où on lui a affectée une valeur.


"M41" a écrit dans le message de news:
45f41ba7$0$5112$
Bonjour
Le module standard est obligatoire car c'est là que sont traitées ensuite
les données (application complexe puisque l'ensemble de VBA fait à ce jour 7
à 8000 lignes : le programme est totalement écrit "en mode relatif" à partir
qqs centaines de lignes de déclarations constantes, variables publiques ou
fonctions simples équivalentes à des déclarations complexes, pour faciliter
la maintenance : elles décrivent les feuilles). La solution est donc une RAZ
après usage des données avant arrêt total de VBA. Mais il s'agit bien d'un
bogue de défaut de remise à zéro des variables après arrêt total de basic
et pour la seconde question ?
Cordialement
M41



"MichDenis" a écrit dans le message de news:

Déclare ta variable typée au niveau du formulaire pas
au niveau d'un module standard .. un petit exemple :

"La durée de vie d'une est fonction de l'endroit où celle-ci a été
déclarée.

'Déclaration de la variable
Private Type Denis
a As Integer
End Type


'Renseigne la variable
'-------------------------
Sub test()
Dim x As Denis
x.a = 25
MsgBox x.a
End Sub

'Appel de la variable.
'-------------------------
Private Sub CommandButton1_Click()
test
End Sub


Si tu veux utiliser un module standard, ajoute une procédure
qui va remettre à zéro tous les éléments de ta variables

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
x.a = 0
End Sub




"M41" a écrit dans le message de news:
45f3f162$0$27389$
Bonjour

2 problèmes différents (Excel 2002 sous Win XP)

1 //absence de remise à zéro des variables typées/
J'ai dans un module une variable Type sous forme A avec ses "déclinaisons"
.A .B .C .D
Je charge ces variables dans le code d'un Userform à travers un variant
Array (placé
dans l'initialisation de ce Userform ; Nini est déclaré Private pour tout
le
code du Userform)

Nini = Array(A.A, A.B, A.C, A.D)

N = Array(EstA, EstB, EstC, EstD) est un tableau constitué à partitr de
Const délarées Public dans le module principale (Public const EstA as
string ...)


Dans le userform les valeurs de Nini sont changées par des CheckBox
si par exemple CheckBox1.Value =True alors Nini(0)=N(0) sinon Nini(0)=""
avec aussi après A.A=Nini(0)
En fait tout se passe comme si la référence à une variable dans Nini était
remplacée par
une valeur : des Debug.Print prouvent que celà fonctionne parfaitement.


Le Userform est Unload et son programme Sub de commande (module) s'arrête
Surprise : lorsque je relance le Sub du module la variable typée A a
concervé les
valeurs de la dernière ouverture du Userform : ceci ne me semble pas
logique
puisqu'à la fermeture totale du Userforme (Unload) et après la fin du Sub
de
commande
toutes les variables devraient être remises à zéro ou "" !!!!!

S'agit il d'un bogue qui fait que lorsque l'on charge initialement un
Array
avec les valeurs d'un tableau typé, tout se passe comme si ce tableau typé
devenait Static même après arrêt total de VBA ? La remise à zéro ne se
fait
que si l'on décharge-recharge l'application.

2// EnableEvents sans effet

Application.EnableEvents = False
If X Then CheckBox1.Value = True

...entraine l'activation de

Private Sub CheckBox1_Click()

?


Cordialement
M41