OVH Cloud OVH Cloud

Bug Excel VBA avec une variable que si remet a zero toute seule

7 réponses
Avatar
Rémi
Bonjour à tous,

Voila je fais souvent des interventions sur le news Microsoft Excel italien.
Et ces derniers jours nous avons rencontré ce problème, qui au premier
regard parait tout simple mais incompréhensible.

Voilà : le but est de faire une variable que va de 1 en 1 avec deux macros.
la macro un augmente de un la variable
la macro deux ouvre un useform et augmente de 1 la variable
sur l'userform, suelement un objet label.

Pb : sur la macro 1 tout va bien, sur la macro 2, la variable se remet a
zero toute seule.

Mais chose encore plus étrange, est qu'elle ne se met à zero que si le VBE
est ouvert, sinon, il n'y a pas de pb !?

Ce phénomène ne se fait pas sur tout les ordi, mas nous n'avons pas encore
réussi à comprendre sur quel type le pb aparait ou non.

Voila en syntèse, je vous metle code ci jont, et vous demande de tester pour
voir si vous aussi rencontrez ce pb, et si quelqu'un à déjà vu ce pb.

Dans un module :
Public Num As Integer

Sub IncrementaNum1()
Num = Num + 1
Range("A1") = Num
End Sub
Sub IncrementaNum2()
Num = Num + 1
UserForm1.Show
Range("A1") = Num
End Sub


dans l'userform
Private Sub UserForm_Click()
Label1.Caption = 1
End Sub

Voila c'est tout !!! c'est tout bête mais tres bizzare. Merci d'avance de
prendre le tps de tester et de me donner vos impressions et suggestions.

Rémi.

7 réponses

Avatar
isabelle
bonjour Rémi,

Label1.Caption = 1

??
y a t'il un erreur de transcription sur cette ligne ?

isabelle


Bonjour à tous,

Voila je fais souvent des interventions sur le news Microsoft Excel italien.
Et ces derniers jours nous avons rencontré ce problème, qui au premier
regard parait tout simple mais incompréhensible.

Voilà : le but est de faire une variable que va de 1 en 1 avec deux macros.
la macro un augmente de un la variable
la macro deux ouvre un useform et augmente de 1 la variable
sur l'userform, suelement un objet label.

Pb : sur la macro 1 tout va bien, sur la macro 2, la variable se remet a
zero toute seule.

Mais chose encore plus étrange, est qu'elle ne se met à zero que si le VBE
est ouvert, sinon, il n'y a pas de pb !?

Ce phénomène ne se fait pas sur tout les ordi, mas nous n'avons pas encore
réussi à comprendre sur quel type le pb aparait ou non.

Voila en syntèse, je vous metle code ci jont, et vous demande de tester pour
voir si vous aussi rencontrez ce pb, et si quelqu'un à déjà vu ce pb.

Dans un module :
Public Num As Integer

Sub IncrementaNum1()
Num = Num + 1
Range("A1") = Num
End Sub
Sub IncrementaNum2()
Num = Num + 1
UserForm1.Show
Range("A1") = Num
End Sub

dans l'userform
Private Sub UserForm_Click()
Label1.Caption = 1
End Sub

Voila c'est tout !!! c'est tout bête mais tres bizzare. Merci d'avance de
prendre le tps de tester et de me donner vos impressions et suggestions.

Rémi.


Avatar
Rémi
Non, c'est bien comme ça, mais cela a peu d'importance je crois, cela ne
peut pas influencer sur la variable.

Rémi.



"isabelle" a écrit dans le message de
news:
bonjour Rémi,

Label1.Caption = 1

??
y a t'il un erreur de transcription sur cette ligne ?

isabelle


Bonjour à tous,

Voila je fais souvent des interventions sur le news Microsoft Excel
italien.


Et ces derniers jours nous avons rencontré ce problème, qui au premier
regard parait tout simple mais incompréhensible.

Voilà : le but est de faire une variable que va de 1 en 1 avec deux
macros.


la macro un augmente de un la variable
la macro deux ouvre un useform et augmente de 1 la variable
sur l'userform, suelement un objet label.

Pb : sur la macro 1 tout va bien, sur la macro 2, la variable se remet a
zero toute seule.

Mais chose encore plus étrange, est qu'elle ne se met à zero que si le
VBE


est ouvert, sinon, il n'y a pas de pb !?

Ce phénomène ne se fait pas sur tout les ordi, mas nous n'avons pas
encore


réussi à comprendre sur quel type le pb aparait ou non.

Voila en syntèse, je vous metle code ci jont, et vous demande de tester
pour


voir si vous aussi rencontrez ce pb, et si quelqu'un à déjà vu ce pb.

Dans un module :
Public Num As Integer

Sub IncrementaNum1()
Num = Num + 1
Range("A1") = Num
End Sub
Sub IncrementaNum2()
Num = Num + 1
UserForm1.Show
Range("A1") = Num
End Sub

dans l'userform
Private Sub UserForm_Click()
Label1.Caption = 1
End Sub

Voila c'est tout !!! c'est tout bête mais tres bizzare. Merci d'avance
de


prendre le tps de tester et de me donner vos impressions et suggestions.

Rémi.




Avatar
isabelle
je ne réussi pas à reproduire le problème, sur mon poste la valeur de la cellule A1 est bien incrémenté dans les deux
cas, il n'y a pas de remise à zéro.

isabelle


Non, c'est bien comme ça, mais cela a peu d'importance je crois, cela ne
peut pas influencer sur la variable.

Rémi.

"isabelle" a écrit dans le message de
news:
bonjour Rémi,

Label1.Caption = 1

??
y a t'il un erreur de transcription sur cette ligne ?

isabelle


Bonjour à tous,

Voila je fais souvent des interventions sur le news Microsoft Excel
italien.


Et ces derniers jours nous avons rencontré ce problème, qui au premier
regard parait tout simple mais incompréhensible.

Voilà : le but est de faire une variable que va de 1 en 1 avec deux
macros.


la macro un augmente de un la variable
la macro deux ouvre un useform et augmente de 1 la variable
sur l'userform, suelement un objet label.

Pb : sur la macro 1 tout va bien, sur la macro 2, la variable se remet a
zero toute seule.

Mais chose encore plus étrange, est qu'elle ne se met à zero que si le
VBE


est ouvert, sinon, il n'y a pas de pb !?

Ce phénomène ne se fait pas sur tout les ordi, mas nous n'avons pas
encore


réussi à comprendre sur quel type le pb aparait ou non.

Voila en syntèse, je vous metle code ci jont, et vous demande de tester
pour


voir si vous aussi rencontrez ce pb, et si quelqu'un à déjà vu ce pb.

Dans un module :
Public Num As Integer

Sub IncrementaNum1()
Num = Num + 1
Range("A1") = Num
End Sub
Sub IncrementaNum2()
Num = Num + 1
UserForm1.Show
Range("A1") = Num
End Sub

dans l'userform
Private Sub UserForm_Click()
Label1.Caption = 1
End Sub

Voila c'est tout !!! c'est tout bête mais tres bizzare. Merci d'avance
de


prendre le tps de tester et de me donner vos impressions et suggestions.

Rémi.






Avatar
Modeste
Bongiorno Remi !!!
la première chose à laquelle j'ai pensé c'est de renommer
plus clairement la variable ,
l'utilisation du terme "num" me fait penser à un mot
réservé !!!
à tout hasard
essaie avec par exemple mia_variabile
ciao !!!
;o)))
-----Message d'origine-----
Bonjour à tous,

Voila je fais souvent des interventions sur le news
Microsoft Excel italien.

Et ces derniers jours nous avons rencontré ce problème,
qui au premier

regard parait tout simple mais incompréhensible.

Voilà : le but est de faire une variable que va de 1 en
1 avec deux macros.

la macro un augmente de un la variable
la macro deux ouvre un useform et augmente de 1 la
variable

sur l'userform, suelement un objet label.

Pb : sur la macro 1 tout va bien, sur la macro 2, la
variable se remet a

zero toute seule.

Mais chose encore plus étrange, est qu'elle ne se met à
zero que si le VBE

est ouvert, sinon, il n'y a pas de pb !?

Ce phénomène ne se fait pas sur tout les ordi, mas nous
n'avons pas encore

réussi à comprendre sur quel type le pb aparait ou non.

Voila en syntèse, je vous metle code ci jont, et vous
demande de tester pour

voir si vous aussi rencontrez ce pb, et si quelqu'un à
déjà vu ce pb.


Dans un module :
Public Num As Integer

Sub IncrementaNum1()
Num = Num + 1
Range("A1") = Num
End Sub
Sub IncrementaNum2()
Num = Num + 1
UserForm1.Show
Range("A1") = Num
End Sub


dans l'userform
Private Sub UserForm_Click()
Label1.Caption = 1
End Sub

Voila c'est tout !!! c'est tout bête mais tres bizzare.
Merci d'avance de

prendre le tps de tester et de me donner vos impressions
et suggestions.


Rémi.


.



Avatar
Daniel.M
Rémi,

Tu ne peux pas considérer que ta variable Public Num aura une longévité
éternelle (contrairement à ce qui est coutume dans d'autres langages).

En VBA, il existe des événements (l'instruction End, un 'Reset' dans
l'environnement VBE, la fermeture d'un classeur) qui réinitialise tes variables
globales à zéro.

Si tu as absolument besoin de t'assurer que ta variable conserve sa valeur même
en cas d'arrêt de procédure, tu devrais utiliser un Nom qui réfère à une cellule
(celle-ci pourrait être située dans une ligne cachée, ou une feuille cachée).
Ainsi, après avoir défini ce nom (Ctrl-F3, "UnNumero"), tu y accèdes dans ton
code par
Range("UnNumero")

Ça continue alors de s'incrémenter même en cas de pépin et d'arrêt intempestif
(End) de ton code.

Salutations,

Daniel M.



"Rémi" <masremi(senza)@aol.com> wrote in message
news:
Bonjour à tous,

Voila je fais souvent des interventions sur le news Microsoft Excel italien.
Et ces derniers jours nous avons rencontré ce problème, qui au premier
regard parait tout simple mais incompréhensible.

Voilà : le but est de faire une variable que va de 1 en 1 avec deux macros.
la macro un augmente de un la variable
la macro deux ouvre un useform et augmente de 1 la variable
sur l'userform, suelement un objet label.

Pb : sur la macro 1 tout va bien, sur la macro 2, la variable se remet a
zero toute seule.

Mais chose encore plus étrange, est qu'elle ne se met à zero que si le VBE
est ouvert, sinon, il n'y a pas de pb !?

Ce phénomène ne se fait pas sur tout les ordi, mas nous n'avons pas encore
réussi à comprendre sur quel type le pb aparait ou non.

Voila en syntèse, je vous metle code ci jont, et vous demande de tester pour
voir si vous aussi rencontrez ce pb, et si quelqu'un à déjà vu ce pb.

Dans un module :
Public Num As Integer

Sub IncrementaNum1()
Num = Num + 1
Range("A1") = Num
End Sub
Sub IncrementaNum2()
Num = Num + 1
UserForm1.Show
Range("A1") = Num
End Sub


dans l'userform
Private Sub UserForm_Click()
Label1.Caption = 1
End Sub

Voila c'est tout !!! c'est tout bête mais tres bizzare. Merci d'avance de
prendre le tps de tester et de me donner vos impressions et suggestions.

Rémi.




Avatar
GD
Bonsour ® prenom.M
;o)))
(_chez_reverse_ac.nortoediv),

c'est en effet exactement ce que Laurent Longre a développé dans son exposé
"HiddenName"
http://longre.free.fr/pages/prog/hnamespace.htm#VBA
../..
noms masqués, indétectables par les autres programmes,
et dont la durée de vie est celle de la session Excel en cours
../..
@+

Daniel.M wrote:
Rémi,

Tu ne peux pas considérer que ta variable Public Num aura une
longévité éternelle (contrairement à ce qui est coutume dans d'autres
langages).

En VBA, il existe des événements (l'instruction End, un 'Reset' dans
l'environnement VBE, la fermeture d'un classeur) qui réinitialise tes
variables globales à zéro.

Si tu as absolument besoin de t'assurer que ta variable conserve sa
valeur même en cas d'arrêt de procédure, tu devrais utiliser un Nom
qui réfère à une cellule (celle-ci pourrait être située dans une
ligne cachée, ou une feuille cachée). Ainsi, après avoir défini ce
nom (Ctrl-F3, "UnNumero"), tu y accèdes dans ton code par
Range("UnNumero")

Ça continue alors de s'incrémenter même en cas de pépin et d'arrêt
intempestif (End) de ton code.

Salutations,

Daniel M.



"Rémi" <masremi(senza)@aol.com> wrote in message
news:
Bonjour à tous,

Voila je fais souvent des interventions sur le news Microsoft Excel
italien. Et ces derniers jours nous avons rencontré ce problème, qui
au premier regard parait tout simple mais incompréhensible.

Voilà : le but est de faire une variable que va de 1 en 1 avec deux
macros. la macro un augmente de un la variable
la macro deux ouvre un useform et augmente de 1 la variable
sur l'userform, suelement un objet label.

Pb : sur la macro 1 tout va bien, sur la macro 2, la variable se
remet a zero toute seule.

Mais chose encore plus étrange, est qu'elle ne se met à zero que si
le VBE est ouvert, sinon, il n'y a pas de pb !?

Ce phénomène ne se fait pas sur tout les ordi, mas nous n'avons pas
encore réussi à comprendre sur quel type le pb aparait ou non.

Voila en syntèse, je vous metle code ci jont, et vous demande de
tester pour voir si vous aussi rencontrez ce pb, et si quelqu'un à
déjà vu ce pb.

Dans un module :
Public Num As Integer

Sub IncrementaNum1()
Num = Num + 1
Range("A1") = Num
End Sub
Sub IncrementaNum2()
Num = Num + 1
UserForm1.Show
Range("A1") = Num
End Sub


dans l'userform
Private Sub UserForm_Click()
Label1.Caption = 1
End Sub

Voila c'est tout !!! c'est tout bête mais tres bizzare. Merci
d'avance de prendre le tps de tester et de me donner vos impressions
et suggestions.

Rémi.




Avatar
Daniel.M
Bonsoir,

c'est en effet exactement ce que Laurent Longre a développé dans son exposé
"HiddenName"
http://longre.free.fr/pages/prog/hnamespace.htm#VBA
../..
noms masqués, indétectables par les autres programmes,
et dont la durée de vie est celle de la session Excel en cours
../..


Les noms masqués, tel que décrit par Laurent, représentent une AUTRE manière
très puissante de conserver les variables selon la durée de vie d'Excel.

Ce que je proposais était plus spécifiquement relié à une plage dédiée dans un
classeur.
Pour un exemple d'utilisation de plages nommées, il y a mon implantation du jeu
MasterMind (basé sur le tien) disponible sur le site de Misange.

Je trouve ma manière plus simple (utilisation d'une plage dédiée pour conserver
les valeurs) mais moins puissante car elle crée une dépendance à un classeur
(celui-ci doit rester ouvert).

Salutations,

Daniel M.