OVH Cloud OVH Cloud

Declarations "Public"

3 réponses
Avatar
Pantagruel92
Bonjour et bonne année...
Dans mon appli Excel, chaque module ou macro commence par quelque chose
comme :

Dim S1 as Worksheet
Dim S2 as Worksheet
Set S1 = Application.Worksheets("feuil1")
Set S2 = Application.Worksheets("feuil2")

En réalité, il y en a 5 ou 6 à chaque fois.
Comment et où déclarer ces S1, S2, ... et leur valeur comme Public, de
manière à ne pas être obligé de le faire pour chaque Sub ou chaque Macro, et
à être sur (juste pour la beauté de la chose et la facilité de debuggage) que
S1, S2, etc représentent toujours la même feuille?

Merci de m'aider.
Jacques

3 réponses

Avatar
michdenis
Bonjour Pantagruel92,

Tu utilises un module standard que tu renommes avec un nom significatif en rapport
avec sa fonction.

Dans le haut de ce module du déclare tes variables comme Public
Exemple pour les variables objet.

Public Rg as Range
Public F as Worksheet

Et pour les instancier, toujours dans le même module, tu crées une procédure
à cet effet qui sera exécutée à l'ouverture du classeur en utilisant l'événement
"Private Sub Workbook_Activate()" situé dans le ThisWorkbook.

Sub InstantiationDesVariables()
Set Rg = Worksheets("Feuil1").Range("A5:G10")
'Il est préférable d'utiliser la propriété Name de l'objet VBA
Set Rg = Feuil1.Range("A5:G10")

Set F = Feuil3
End Sub

Et dans le ThisWorkbook de Ton Classeur
'---------------
Private Sub Workbook_Activate()
InstantiationDesVariables
End Sub

'------------------
Private Sub Workbook_Deactivate()
Set Rg = Noghing
Set F = Nothing
End Sub
'------------------

Pour les variables de type String, integer, double...l'utilisation de variable Public peut devenir
problématique si plus d'un classeur utilise le même nom d'une même variable déclarée Public....

Le principe de base avec les variables est de limitée leur champ d'action le plus possible
d'abord au niveau de la procédure, du module où elle se trouve et finalement "Public".

Ce n'est pas une bonne idée de déclarer des variables "Public" ou au niveau du module
seulement pour sauver quelques lignes de code en début de procédure !


Salutations!



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

Bonjour et bonne année...
Dans mon appli Excel, chaque module ou macro commence par quelque chose
comme :

Dim S1 as Worksheet
Dim S2 as Worksheet
Set S1 = Application.Worksheets("feuil1")
Set S2 = Application.Worksheets("feuil2")

En réalité, il y en a 5 ou 6 à chaque fois.
Comment et où déclarer ces S1, S2, ... et leur valeur comme Public, de
manière à ne pas être obligé de le faire pour chaque Sub ou chaque Macro, et
à être sur (juste pour la beauté de la chose et la facilité de debuggage) que
S1, S2, etc représentent toujours la même feuille?

Merci de m'aider.
Jacques
Avatar
Pantagruel92
Merci, Michdenis, ça c'est une réponse détaillée!
A partir du moment où j'aurai instancié ces variables objet publiques (F et
Rg dans ton exemple), je pourrais les nommer dans chaque Sub de chaque
module, et dans chaque macro de l'application : elles garderont leur valeur
(tant que je n'aurai pas exécuté une instruction Set Rg =...., bien sûr).
C'est bien ça?

Merci encore.


Bonjour Pantagruel92,

Tu utilises un module standard que tu renommes avec un nom significatif en rapport
avec sa fonction.

Dans le haut de ce module du déclare tes variables comme Public
Exemple pour les variables objet.

Public Rg as Range
Public F as Worksheet

Et pour les instancier, toujours dans le même module, tu crées une procédure
à cet effet qui sera exécutée à l'ouverture du classeur en utilisant l'événement
"Private Sub Workbook_Activate()" situé dans le ThisWorkbook.

Sub InstantiationDesVariables()
Set Rg = Worksheets("Feuil1").Range("A5:G10")
'Il est préférable d'utiliser la propriété Name de l'objet VBA
Set Rg = Feuil1.Range("A5:G10")

Set F = Feuil3
End Sub

Et dans le ThisWorkbook de Ton Classeur
'---------------
Private Sub Workbook_Activate()
InstantiationDesVariables
End Sub

'------------------
Private Sub Workbook_Deactivate()
Set Rg = Noghing
Set F = Nothing
End Sub
'------------------

Pour les variables de type String, integer, double...l'utilisation de variable Public peut devenir
problématique si plus d'un classeur utilise le même nom d'une même variable déclarée Public....

Le principe de base avec les variables est de limitée leur champ d'action le plus possible
d'abord au niveau de la procédure, du module où elle se trouve et finalement "Public".

Ce n'est pas une bonne idée de déclarer des variables "Public" ou au niveau du module
seulement pour sauver quelques lignes de code en début de procédure !


Salutations!



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

Bonjour et bonne année...
Dans mon appli Excel, chaque module ou macro commence par quelque chose
comme :

Dim S1 as Worksheet
Dim S2 as Worksheet
Set S1 = Application.Worksheets("feuil1")
Set S2 = Application.Worksheets("feuil2")

En réalité, il y en a 5 ou 6 à chaque fois.
Comment et où déclarer ces S1, S2, ... et leur valeur comme Public, de
manière à ne pas être obligé de le faire pour chaque Sub ou chaque Macro, et
à être sur (juste pour la beauté de la chose et la facilité de debuggage) que
S1, S2, etc représentent toujours la même feuille?

Merci de m'aider.
Jacques





Avatar
michdenis
Bonjour Pantagruel92,

Si tu appliques mon exemple, tu n'auras pas besoin de déclarer tes
variables au niveau de chacune des procédures. Une fois c'est assez.

Cependant, ce que j'exprimais est qu'il ne faut pas abuser de cela
(déclaration des variables au niveau du module ou comme "Public)
si le but recherché en est strictement un d'économie de quelques
lignes de code pour déclarer les variables localement (au niveau
de la procédure)

Quand les applications requiert des codes plus élaborés, il devient alors
difficile d'effectuer le suivi de tous ces variables dans les diverses
procédures. La lecture du code est plus difficile, le temps de "debuggage"
est plus long ....et l'espace mémoire utilisé est plus important.
Alors, aussi bien que leur présence soit justifiée.


Salutations!


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

Merci, Michdenis, ça c'est une réponse détaillée!
A partir du moment où j'aurai instancié ces variables objet publiques (F et
Rg dans ton exemple), je pourrais les nommer dans chaque Sub de chaque
module, et dans chaque macro de l'application : elles garderont leur valeur
(tant que je n'aurai pas exécuté une instruction Set Rg =...., bien sûr).
C'est bien ça?

Merci encore.


Bonjour Pantagruel92,

Tu utilises un module standard que tu renommes avec un nom significatif en rapport
avec sa fonction.

Dans le haut de ce module du déclare tes variables comme Public
Exemple pour les variables objet.

Public Rg as Range
Public F as Worksheet

Et pour les instancier, toujours dans le même module, tu crées une procédure
à cet effet qui sera exécutée à l'ouverture du classeur en utilisant l'événement
"Private Sub Workbook_Activate()" situé dans le ThisWorkbook.

Sub InstantiationDesVariables()
Set Rg = Worksheets("Feuil1").Range("A5:G10")
'Il est préférable d'utiliser la propriété Name de l'objet VBA
Set Rg = Feuil1.Range("A5:G10")

Set F = Feuil3
End Sub

Et dans le ThisWorkbook de Ton Classeur
'---------------
Private Sub Workbook_Activate()
InstantiationDesVariables
End Sub

'------------------
Private Sub Workbook_Deactivate()
Set Rg = Noghing
Set F = Nothing
End Sub
'------------------

Pour les variables de type String, integer, double...l'utilisation de variable Public peut devenir
problématique si plus d'un classeur utilise le même nom d'une même variable déclarée Public....

Le principe de base avec les variables est de limitée leur champ d'action le plus possible
d'abord au niveau de la procédure, du module où elle se trouve et finalement "Public".

Ce n'est pas une bonne idée de déclarer des variables "Public" ou au niveau du module
seulement pour sauver quelques lignes de code en début de procédure !


Salutations!



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

Bonjour et bonne année...
Dans mon appli Excel, chaque module ou macro commence par quelque chose
comme :

Dim S1 as Worksheet
Dim S2 as Worksheet
Set S1 = Application.Worksheets("feuil1")
Set S2 = Application.Worksheets("feuil2")

En réalité, il y en a 5 ou 6 à chaque fois.
Comment et où déclarer ces S1, S2, ... et leur valeur comme Public, de
manière à ne pas être obligé de le faire pour chaque Sub ou chaque Macro, et
à être sur (juste pour la beauté de la chose et la facilité de debuggage) que
S1, S2, etc représentent toujours la même feuille?

Merci de m'aider.
Jacques