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

Public Onglet As String

3 réponses
Avatar
LANIMAL
Bonjour,
Encore une nouveauté jamais rencontrée !
J'ai déclaré : "Public Onglet As String" en tête du Module3 du classeur
MacrosPerso (Perso.xls)

Onglet prend la valeur "Carte" au début de l'exécution de la Sub
(unique) du Module3
puis, avec l'instruction Call on part dans la Sub AdaptForm() dans un
module d'un autre classeur qui utilise la variable "Onglet",
mais...
"Onglet" est alors vide :-(

Pourtant Onglet est déclaré "Public" !
ch'comprends pas, et je ne trouve pas la solution.
Merci à mon éventuel assistant.

3 réponses

Avatar
michdenis
Bonjour,

| J'ai déclaré : "Public Onglet As String" en tête du
| Module3 du classeur MacrosPerso (Perso.xls)
**** Une variable même si elle est déclarée "Public"
n'est valide qu'à l'intérieur du classeur où elle
est déclarée.

| Onglet prend la valeur "Carte" au début de l'exécution
| de la Sub (unique) du Module3 puis, avec l'instruction
| Call on part dans la Sub AdaptForm() dans un module
| d'un autre classeur qui utilise la variable "Onglet",
| mais... "Onglet" est alors vide :-(
**** Comme tu utilises ta variable dans un autre classeur,
tu dépasses l'étendue que ta variable peut couvrir.

Tu as une alternative, passe ta valeur de ta variable comme
paramètre à la procédure appelante.

Voici un petit exemple :

'Dans ton module3 de ton perso.xls

'Déclaration de la variable
Public Onglet As String

'Ta petite procédure appelante
'-------------------------------
Sub test()
Onglet = "Feuil1"
Application.Run "Classeur2xls!MaMacro", Onglet
End Sub
'-------------------------------

La macro appelée situé dans le classeur2.xls.
La macro "LaMacro" est située dans un module
standard du classeur Classeur2.xls
et j'ai passé la valeur Onglet en paramètre
'--------------------------------------
Sub MaMacro(NomFeuille As String)
MsgBox NomFeuille
End Sub
'--------------------------------------
Avatar
LANIMAL
Ah oui ... astucieux !
Entre temps j'ai résolu le pb en mémorisant la variable "Onglet" dans
une cellule du classeur dans lequel opère la sub appellée.

Ce qui m'étonne, c'est que l'on peut lire dans l'Aide :

"Cet exemple utilise l'instruction Public au niveau module (section
Général) d'un module standard pour déclarer de manière explicite des
variables comme publiques, ce qui signifie qu'elles sont disponibles
pour toutes les procédures de tous les modules de toutes les
applications à moins que Option Private Module soit activée.

Public Number As Integer "
Probablement j'interprète mal cette explication.
Merci quand même et bonne soirée/nuit




michdenis a écrit :
Bonjour,

| J'ai déclaré : "Public Onglet As String" en tête du
| Module3 du classeur MacrosPerso (Perso.xls)
**** Une variable même si elle est déclarée "Public"
n'est valide qu'à l'intérieur du classeur où elle
est déclarée.

| Onglet prend la valeur "Carte" au début de l'exécution
| de la Sub (unique) du Module3 puis, avec l'instruction
| Call on part dans la Sub AdaptForm() dans un module
| d'un autre classeur qui utilise la variable "Onglet",
| mais... "Onglet" est alors vide :-(
**** Comme tu utilises ta variable dans un autre classeur,
tu dépasses l'étendue que ta variable peut couvrir.

Tu as une alternative, passe ta valeur de ta variable comme
paramètre à la procédure appelante.

Voici un petit exemple :

'Dans ton module3 de ton perso.xls

'Déclaration de la variable
Public Onglet As String

'Ta petite procédure appelante
'-------------------------------
Sub test()
Onglet = "Feuil1"
Application.Run "Classeur2xls!MaMacro", Onglet
End Sub
'-------------------------------

La macro appelée situé dans le classeur2.xls.
La macro "LaMacro" est située dans un module
standard du classeur Classeur2.xls
et j'ai passé la valeur Onglet en paramètre
'--------------------------------------
Sub MaMacro(NomFeuille As String)
MsgBox NomFeuille
End Sub
'--------------------------------------





Avatar
michdenis
La seule manière de passer une variable public
d'un classeur à un autre est de passer ce classeur
comme référence. L'usage d'un paramètre est
souvent préférable !




"LANIMAL" a écrit dans le message de groupe de discussion :
u$
Ah oui ... astucieux !
Entre temps j'ai résolu le pb en mémorisant la variable "Onglet" dans
une cellule du classeur dans lequel opère la sub appellée.

Ce qui m'étonne, c'est que l'on peut lire dans l'Aide :

"Cet exemple utilise l'instruction Public au niveau module (section
Général) d'un module standard pour déclarer de manière explicite des
variables comme publiques, ce qui signifie qu'elles sont disponibles
pour toutes les procédures de tous les modules de toutes les
applications à moins que Option Private Module soit activée.

Public Number As Integer "
Probablement j'interprète mal cette explication.
Merci quand même et bonne soirée/nuit




michdenis a écrit :
Bonjour,

| J'ai déclaré : "Public Onglet As String" en tête du
| Module3 du classeur MacrosPerso (Perso.xls)
**** Une variable même si elle est déclarée "Public"
n'est valide qu'à l'intérieur du classeur où elle
est déclarée.

| Onglet prend la valeur "Carte" au début de l'exécution
| de la Sub (unique) du Module3 puis, avec l'instruction
| Call on part dans la Sub AdaptForm() dans un module
| d'un autre classeur qui utilise la variable "Onglet",
| mais... "Onglet" est alors vide :-(
**** Comme tu utilises ta variable dans un autre classeur,
tu dépasses l'étendue que ta variable peut couvrir.

Tu as une alternative, passe ta valeur de ta variable comme
paramètre à la procédure appelante.

Voici un petit exemple :

'Dans ton module3 de ton perso.xls

'Déclaration de la variable
Public Onglet As String

'Ta petite procédure appelante
'-------------------------------
Sub test()
Onglet = "Feuil1"
Application.Run "Classeur2xls!MaMacro", Onglet
End Sub
'-------------------------------

La macro appelée situé dans le classeur2.xls.
La macro "LaMacro" est située dans un module
standard du classeur Classeur2.xls
et j'ai passé la valeur Onglet en paramètre
'--------------------------------------
Sub MaMacro(NomFeuille As String)
MsgBox NomFeuille
End Sub
'--------------------------------------