1 / absence de RAZ des variables 2/ EnableEvents sans effet
3 réponses
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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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" <boomerang.pro00@wanadoo.fr> a écrit dans le message de news:
45f3f162$0$27389$ba4acef3@news.orange.fr...
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
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
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
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" <michdenis@hotmail.com> a écrit dans le message de news:
OwRaBk9YHHA.3928@TK2MSFTNGP03.phx.gbl...
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" <boomerang.pro00@wanadoo.fr> a écrit dans le message de news:
45f3f162$0$27389$ba4acef3@news.orange.fr...
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
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
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
| 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" <boomerang.pro00@wanadoo.fr> a écrit dans le message de news:
45f41ba7$0$5112$ba4acef3@news.orange.fr...
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" <michdenis@hotmail.com> a écrit dans le message de news:
OwRaBk9YHHA.3928@TK2MSFTNGP03.phx.gbl...
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" <boomerang.pro00@wanadoo.fr> a écrit dans le message de news:
45f3f162$0$27389$ba4acef3@news.orange.fr...
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
| 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