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

Mémoire des variables

6 réponses
Avatar
Jacquouille
Bonjour
Dans une macro, la variable....varie, pour, in fine, garder sa dernière
valeur.
Si l'on sort de la macro, puis qu'on y rentre, la variable a perdu sa
valeur, même s'il n'y a pas de remise à zéro en début de macro?
Par quel mystère cette variable devient-elle nulle?
Comme j'en ai marre de me poser la question, je vous la pose, tout en vous
souhaitant un bon WE.
Merci
Jacques.

--
Bien amicalmement,
"Le vin est au repas ce que le parfum est à la femme."

Jacquouille.

6 réponses

Avatar
michdenis
Ce que tu dis n'est pas nécessairement vrai et en voici un petit exemple

'--------------------
Sub test()
Dim A As Integer
A = 1
Bonjour "Jacquoille"
MsgBox A
End Sub
'--------------------
Sub Bonjour(Nom As String)
MsgBox "Bonjour " & Nom
End Sub
'--------------------

Va falloir que tu définisses ce que tu veux dire par sortir de la
procédure... !

Si tu veux définir une variable qui conserve sa valeur même en sortant de
la procédure, tu peux utiliser ceci... et si tu répètes plusieurs fois
l'exécution
de la procédure, tu vas te rendre compte que la variable A conserve sa
valeur
d'une fois à l'autre

'----------------------------
Sub test()
Static A As Integer
A = A + 1
MsgBox A
End Sub
'----------------------------

J'allais oublier ... c'était quoi ta question ?






"Jacquouille" a écrit dans le message de
news:
Bonjour
Dans une macro, la variable....varie, pour, in fine, garder sa dernière
valeur.
Si l'on sort de la macro, puis qu'on y rentre, la variable a perdu sa
valeur, même s'il n'y a pas de remise à zéro en début de macro?
Par quel mystère cette variable devient-elle nulle?
Comme j'en ai marre de me poser la question, je vous la pose, tout en vous
souhaitant un bon WE.
Merci
Jacques.

--
Bien amicalmement,
"Le vin est au repas ce que le parfum est à la femme."

Jacquouille.
Avatar
Modeste
Bonsour® 22141 jrs avec ferveur ;o))) vous nous disiez :

Dans une macro, la variable....varie, pour, in fine, garder sa
dernière valeur.
Si l'on sort de la macro, puis qu'on y rentre, la variable a perdu sa
valeur, même s'il n'y a pas de remise à zéro en début de macro?
Par quel mystère cette variable devient-elle nulle?



Les variables utilisées dans les procédures Sub appartiennent à deux catégories :
les variables qui sont déclarées explicitement au sein de la procédure (à l'aide de l'instruction Dim ou de l'équivalent) et celles qui ne le sont pas.
Les premières sont locales au niveau de la procédure. Les variables utilisées sans avoir été explicitement déclarées sont également locales au niveau de la procédure, à moins qu'elles ne soient explicitement déclarées à un niveau supérieur en dehors de la procédure.

comme l'a signalé "Michel" ;o)))
Static est Facultatif.
Indique que les variables locales de la procédure Sub sont conservées entre les appels.
L'attribut Static n'a aucun effet sur les variables déclarées en dehors de la procédure Sub, même si elles sont utilisées dans cette dernière.

a noter aussi :
Les variables déclarées avec l'instruction Public sont accessibles à toutes les procédures, dans l'ensemble des modules de toutes les applications, à moins que Option Private Module ne soit activé. Dans ce cas, les variables ne sont publiques qu'au sein du projet qui les accueille.
Lors de l'initialisation des variables, une variable numérique prend pour valeur initiale 0, une chaîne de longueur variable prend pour valeur initiale une chaîne de longueur nulle (""), et une chaîne de longueur fixe est remplie de zéros. Les variables de type Variant ont la valeur Empty à l'initialisation.

par ailleurs l'instruction END (seule)
Lorsqu'elle est exécutée, réinitialise toutes les variables au niveau du module et toutes les variables locales statiques dans tous les modules.

Pour conserver la valeur de ces variables, utilisez plutôt l'instruction STOP
****************************
Vous pourrez ainsi reprendre l'exécution tout en préservant la valeur des variables.
****************************



--
--
@+
;o)))
Avatar
michdenis
L'ami Modeste aurait aussi pu te parler de ceci...
je suppose qu'il manquait de mots !

Tu copies ceci dans un module standard :

Option Private Module
Dim toto As Integer
'------------------------------
Public Property Get Denis() As Integer
Denis = toto
End Property
'------------------------------
Public Property Let Denis(ByVal MyVar As Integer)
toto = MyVar
End Property
'------------------------------
Sub test()
MsgBox Denis
End Sub
'------------------------------

Et dans le module de ton choix "Feuil" ou autres tu inscris ceci:

Il est à noter que ce qui précède est dans le module1
à toi d'adapter si nécessaire.
'----------------------------
Sub test()
Module1.Denis = 25
x = Module1.Denis
Module1.test
End Sub
'----------------------------

Ce qui est intéressant avec cette méthode, c'est que la variable
"toto" conserve tout le temps son information et lorsque plusieurs
procédures modifient son contenu, il est facile de savoir en tout
temps son contenu sans être obliger de parcourrir l'ensemble du
projet VBA. De plus, au besoin, chaque modification de la variable
"toto" pourrait selon les circonstances déclencher une macro.

Habituellement "property let" et "property get" s'utilise dans les modules
de classe mais il n'est pas interdit d'en faire usager à l'extérieur !

Pour plus d'informations, Modeste va se charger de discourrir sur le sujet.
;-)
Avatar
Modeste
Bonsour® michdenis :

;o)))
j'aurais pu parler également des variables préservées malgré la fermeture du Classeur.
Le contenu du nom est préservé même si tous les classeurs ont été fermés.
Il est détruit uniquement après avoir quitté la session Excel en cours.
Des macros peuvent stocker des noms masqués, indétectables par les autres programmes, et dont la durée de vie est celle de la session Excel en cours.

;o)))
http://xcell05.free.fr/pages/prog/hnamespace.htm


--
@+
;o)))
Avatar
michdenis
| j'aurais pu parler également des variables préservées malgré la fermeture
du Classeur.

Oui je sais, mais je suis certain que la communauté
excellienne aurait préféré un exemple concret à se
mettre sous la dent !

Excel ce n'est quand même pas un prolongement de
l'académie française pour discourir comme ça...

;-))
Avatar
Jacquouille
Bonjour Gilbert et Denis,

Je suis pour la paix dans les ménages, mais il faut reconnaître qu'un peu de
joutes verbales met de l'ambiance dans ce forum.

Mon but était de savoir ce qui déclenchait la remise à zéro (ou "") d'une
variable utilisée dans une sub lorsque l'on sort de cette sub (End sub). Je
crois avoir un peu compris.

Suggestion:
Sur un air de zinzinulement, pourquoi l'un ne pondrait-il pas un texte,
revu et corrigé par l'autre et vice et versa, sur ces maudites variables ?
Vous enverriez ce bouquet à Flo.

Et Flo n'aurait plus qu'à ( le célèbreYaka) cueillir ce pannier
d'informations pour en parfumer son Excelabo. ( Si ele le désire, oeuf corse
comme dirait JPS)

Un grand merci et au plaiisr de vous lire
Jacques.

--
Bien amicalmement,
"Le vin est au repas ce que le parfum est à la femme."

Jacquouille.

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

| j'aurais pu parler également des variables préservées malgré la fermeture
du Classeur.

Oui je sais, mais je suis certain que la communauté
excellienne aurait préféré un exemple concret à se
mettre sous la dent !

Excel ce n'est quand même pas un prolongement de
l'académie française pour discourir comme ça...

;-))