Comment étendre la portée de la valeur d'une variable à tout un module?

Angus

XLDnaute Junior
Bonsoir à tous,

"Pour qu'une variable soit accessible dans toutes les procédures d'un module,il faut la déclarer dans la section Déclarations du module"

Mais comment étendre la portée de la valeur prise par une variable à toutes les procédures d'un module? (j'espère que c'est possible)

Merci d'avance.
 

Staple1600

XLDnaute Barbatruc
Re : Comment étendre la portée de la valeur d'une variable à tout un module?

Bonsoir

La réponse se trouve sur ton PC

ALT+F11 puis F1

Voila ce que tu aurais trouvé
L'exemple suivant crée la variable strName et spécifie le type de données String.
Dim strName As String
Si cette instruction apparaît dans une procédure, la variable strName peut être utilisée uniquement dans cette procédure. Si l'instruction apparaît dans la section Déclarations du module, la variable strName est accessible dans toutes les procédures du module, mais pas dans les procédures des autres modules du projet. Pour faire en sorte que cette variable soit accessible dans toutes les procédures du projet, faites-la précéder de l'instruction Public, comme dans l'exemple suivant :
Public strName As String

EDITION: Bonsoir Papounet
 
Dernière édition:

Papou-net

XLDnaute Barbatruc
Re : Comment étendre la portée de la valeur d'une variable à tout un module?

Bonsoir Angus,

Il faut remplacer Dim par Public, dans la section Déclarations d'un module (n'importe lequel).

Ex :

Code:
Public MaVar As Integer

Bonne soirée.

Cordialement.

EDIT :

Bonsoir Staple1600
 
Dernière édition:

Angus

XLDnaute Junior
Re : Comment étendre la portée de la valeur d'une variable à tout un module?

Il faut remplacer Dim par Public, dans la section Déclarations d'un module (n'importe lequel).
Ex :
Code:
Public MaVar As Integer

Bonsoir Papou-net,

Merci pour ta réponse.

Je n'ai pas essayé ta solution, mais s'agit-il bien de la valeur de la variable?

En tous cas, j'ai trouver ce que je cherchais, il faut ajouter l'option "static" dans la déclaration de procédure:

Code:
Private Static Sub boutton1_Click()

Ainsi les valeurs prisent par les variables au sein de la procédure, les gardent au delà de cette procédure.
 

Pierrot93

XLDnaute Barbatruc
Re : Comment étendre la portée de la valeur d'une variable à tout un module?

Bonjour à tous,

Ainsi les valeurs prisent par les variables au sein de la procédure, les gardent au delà de cette procédure.

petite remarque au passage, à ma connaissance si tu déclares une procédure "Private Static", ce sont les variables initialisées dans cette procédure uniquement qui garderont leurs valeurs, mais tu ne pourras t'en servir que dans cette même procédure... elles ne pourrons en aucun cas être appelées par une autre procédure, même du module en question...

bonne journée
@+
 

Papou-net

XLDnaute Barbatruc
Re : Comment étendre la portée de la valeur d'une variable à tout un module?

Code:
Je n'ai pas essayé ta solution, mais s'agit-il bien de la valeur de la variable?

Bonjour Angus, Staple1600, Pierrot93,

@ Angus,

Je ne comprends pas bien ta question : si la variable est accessible depuis tous les modules de ton projet, tu as forcément accès à sa valeur, non ?

Mais si tu désires conserver cette valeur, même après fermeture de ton fichier, tu dois alors la sauvegarder. La solution la plus simple est de la stocker dans une cellule masquée d'une de tes feuilles, ou mieux encore, dans une feuille masquée pouvant contenir une multitude d'autres valeurs. Tu peux aussi les enregistrer dans un fichier texte séparé, avec une extension ".ini" par exemple, mais là tu compliques un peu la programmation et la gestion de ton classeur car ce fichier doit suivre celui de ton classeur en cas de copie ou déplacement de ce dernier.

Espérant avoir pu t'aider.

Cordialement.
 

Angus

XLDnaute Junior
Re : Comment étendre la portée de la valeur d'une variable à tout un module?

petite remarque au passage, à ma connaissance si tu déclares une procédure "Private Static", ce sont les variables initialisées dans cette procédure uniquement qui garderont leurs valeurs, mais tu ne pourras t'en servir que dans cette même procédure... elles ne pourrons en aucun cas être appelées par une autre procédure, même du module en question...
@+

Si je comprend bien, en fait si; dans un livre j'ai:
"L'option STATIC indique que les variables de la procédure SUB conservent leurs valeurs entre les différents appels de la procédure."
 

Angus

XLDnaute Junior
Re : Comment étendre la portée de la valeur d'une variable à tout un module?

@ Angus,

Je ne comprends pas bien ta question : si la variable est accessible depuis tous les modules de ton projet, tu as forcément accès à sa valeur, non ?

Effectivement, je pensais avoir eu le problème suivant:
La variable n'est pas étrangère car elle est lu sans problème, mais sa valeur est "empty".

Maintenant en reessayant sans "STATIC" çà marche aussi...

Le fait fait est qu'en réinitialisant la procédure, j'ai oublier de recalculé la variable dans la première étape...

Maintenant je ne comprend plus a quoi sert "Static"....
 

Victor21

XLDnaute Barbatruc
Re : Comment étendre la portée de la valeur d'une variable à tout un module?

Bonjour, Angus, le fil

Sur ce principe, toutes les questions que je me pose ont leur réponse dans le menu d'aide ou sur google, non?
Pratiquement, oui, mais si c'est trop fatigant, tu peux poster sur ce forum.

Staple1600 ne connait pas le niveau de tes connaissances, et il t'indique dans sa réponse la manière la plus simple de résoudre les problèmes les plus courants, selon le principe bien connu qu'il vaut mieux t'apprendre à pêcher que te donner un poisson.

C'est aussi ça l'entre-aide.:)
 

Angus

XLDnaute Junior
Re : Comment étendre la portée de la valeur d'une variable à tout un module?

il y a:
L'option STATIC indique que les variables de la procédure SUB conservent leurs valeurs entre les différents appels de la procédure.

et ensuite:
Autrement dit si une procédure "static" est invoqué à plusieurs reprises lors de l’exécution d'un programme, a chaque appel, les variables propres à cette procédure ont la valeur qui leur a été affectée lors de l'appel précédent.

Est ce que cela veux dire que par exemple dans une procédure tel que:

X=range("A1") + 1

avec A1=1,

X vaudra toujours 2, appel après appel de la procédure?
 

Angus

XLDnaute Junior
Re : Comment étendre la portée de la valeur d'une variable à tout un module?

Bonjour Victor21,

Bonjour, Angus, le fil


Pratiquement, oui, mais si c'est trop fatigant, tu peux poster sur ce forum.

Staple1600 ne connait pas le niveau de tes connaissances, et il t'indique dans sa réponse la manière la plus simple de résoudre les problèmes les plus courants, selon le principe bien connu qu'il vaut mieux t'apprendre à pêcher que te donner un poisson.

C'est aussi ça l'entre-aide.:)

J'entends bien, mais mon menu d'aide est en anglais, et malgrès un bon niveau, je ne connais pas le mot "portée", alors je peux aussi chercher la traduction, mais dans ce cas le forum ne vaux que pour des question top niveau.

L'impression donnée par Staple1600, c'est que çà le fatigue de répondre, mais je ne l'y oblige pas. Sans parler du ton, genre trop feignant pour faire alt+F11 et ensuite F1...
 

Pierrot93

XLDnaute Barbatruc
Re : Comment étendre la portée de la valeur d'une variable à tout un module?

Bonjour à tous

un exemple ci-dessous à utiliser dans un module standard, tant que tu n'as pas fermé ton classeur ou réinitialisé via l'éditeur vba ta variable s'incrémentera...
Code:
Option Explicit
Sub test()
Static x As Double
x = x + 1
MsgBox x
End Sub

bon après miodi
@+
 

Angus

XLDnaute Junior
Re : Comment étendre la portée de la valeur d'une variable à tout un module?

Bonjour à tous

un exemple ci-dessous à utiliser dans un module standard, tant que tu n'as pas fermé ton classeur ou réinitialisé via l'éditeur vba ta variable s'incrémentera...
Code:
Option Explicit
Sub test()
Static x As Double
x = x + 1
MsgBox x
End Sub

bon après miodi
@+

Mais en fait il s'agit d'affecter l'option à la procédure comme suit: static Sub test()
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 305
Messages
2 087 084
Membres
103 459
dernier inscrit
Arnocal