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

Établir Variables qu'à un seul endroit

7 réponses
Avatar
rmillerlcxl
Bonjour,

Dans plusieurs macros j'utilise les m=C3=AAmes variables et ce pour plusieu=
rs feuilles.

Comment =C3=A9tablir toutes les variables qu'=C3=A0 un seul endroit? Mon bu=
t est d'avoir qu'une seule macro pour une m=C3=AAme fonction.

Par exemple ... Feui1.Range("CN_1CtrlZone").column est utilis=C3=A9 =C3=A0 =
plusieurs endroits. Mais aussi Feui2.Range("CN_2CtrlZone").column.

Donc je me demande si je pouvais avoir qu'=C3=A0 un endroit ...

Case Feuil1.name=20
Var_CtrlCol =3D Feui1.Range("CN_1CtrlZone").column=20

Case Feuil2.name=20
Var_CtrlCol =3D Feui2.Range("CN_2CtrlZone").column=20

Je sais que je peux faire ceci mais je ne suis pas certain de comment le fa=
ire qu'=C3=A0 un seul endroit mais pour toutes les macros dans le classeur.

Merci =C3=A0 l'avance.

7 réponses

Avatar
Michd
Bonjour,
2 manières de procéder :
'Dans le haut d'un module standard, tu déclares
'Les constantes ou variables selon l'approche
'que tu as retenue
'Avec des variables
Public MaCol As Long
'Avec des constantes
Public Test As Range
Const K = "Feuil1!A1:A5"
Const P = "toto"
Const N = 25
'---------------------------------------------
Sub Exemple_Avec_Constantes()
MsgBox Range(K).Address
MsgBox Range(P).Address
End Sub
'---------------------------------------------
'Une autre manière de procéder
Sub Exemple_Avec_Variables()
'Tu insères toutes les variables que tu veux
'définir pour toutes les feuilles.
'Cette procédure sert seulement à définir les variables
'Tu appelles cette procédure dans le thisworkbook
MaCol = Feui1.Range("CN_1CtrlZone").Column
End Sub
'Dans le Thisworkbook, tu inscris ceci :
'Dès l'ouverture du classeur, si les macros sont activées
'toutes les variables dans la procédure "Exemple_Avec_Variables"
'seront initialées.
Private Sub Workbook_Open()
Call Exemple_Avec_Variables
End Sub
'---------------------------------------------
MichD
Avatar
rmillerlcxl
Bonjour,
Merci. J'en comprend le principe. Mais il doit me manquer un petit bout et je me rend compte que je n'ai possiblement pas précisé correcteme nt. Désolé.
C'est que la variable dépend de la feuille active. Alors voici ce que j'ai fais;
Dans le Thisworkbook j'ai placé ceci;
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Call Pro_VARIABLES
End Sub
Dans un module standard j'ai la macro Pro_VARIABLES qui liste toutes les va riables. Mais comme ceci.
Select case activesheet.name
Case feuil1.name
Var_ColDescriptCol = Feuil1.range("D1").column
Case Feuil2.name
Var_ColDescriptCol = Feuil2.range("G1").column
End select
Ensuite dans l'évènement activate de la feuille ... exemple la fe uil1 j'ai...
Call Pro_LARGEURCOL
Qui lance une macro dans un module standard.
Mais dans la macro Pro_LARGEURCOL ce qui se passe est que la variable est v ide.
Par exemple : Activesheet.range(Var_ColDescriptCol).columnwidth = 45
Il doit me manquer un petit bout comme un Declare à quelque part ou?
Mon besoin est que la variable soit établie lors de l'activation d'une feuille et que celle-ci soit ensuite reconnue partout. Il me semble bien q u'il y a une façon de faire.
Merci à l'avance.
Avatar
Michd
Bonjour,
Ce que je t'ai proposé devrait fonctionner. À l'ouverture d'un classeur,
lorsque tu initialises une variable, cette variable conserve cette valeur de
base tant et aussi longtemps qu'une autre procédure ne modifie pas sa
valeur. Peu importe que ce soit pour une donnée émanant d'une feuille
particulière.
Je ne vois pas pourquoi tu veux utiliser des procédures événementielles qui,
par nature, deviennent répétitives SAUF si tu veux modifier la valeur de ces
variables en cours de route.
Je ne sais pas ce que tu veux faire, dans un premier temps, tu dis que tu
veux définir des variables et conserver leur valeur (comme si c'était des
constantes ) parce que ces variables sont appelées par différentes
procédures dans ton classeur, et en même temps, tu veux modifier constamment
"réinitialer" la valeur de ces variables.
'-----------------------
Mon besoin est que la variable soit établie lors de l'activation d'une
feuille et que celle-ci soit ensuite reconnue partout. Il me semble bien
qu'il y a une façon de faire.
'-----------------------
**** Est-ce que la valeur de la ou les variables demeure constante après
avoir été paraphée une première fois ou si elles peuvent changer de valeur à
chaque fois que tu sélectionnes une feuille?
Le principe est simple :
Lorsque tu définis une variable dans un MODULE STANDARD comme PUBLIC comme
dans : Public Toto As String , tu peux définir la valeur de cette variable
dans la procédure de ton choix et cette variable va conserver cette valeur,
peu importe la feuille active du classeur et aussi longtemps qu'une autre
procédure ne viendra modifier cette valeur. Si la valeur de ces variables
demeure constante, pourvoir pas définir leur valeur une fois dès l'ouverture
du classeur. Si leur valeur est appelée à changer lors de la sélection d'une
feuille particulière, tu as des événements de la feuille ou du Thisworkbook
dont tu peux faire usage.
Ce n'est pas à moi de définir ce que tu veux faire!
MichD
Avatar
rmillerlcxl
Bonjour,
Merci encore.
En fait ... j'ai besoin que des variables soient définies dans le this workbook mais j'ai aussi plusieurs autres variables qui doivent être m odifiées selon la feuille active ... comme vous le décriviez. Vou s avez évidemment totalement raison.
J'ai alors fais le nécessaire et ça fonctionne ... assez bien.
Mais ... disons qu'à l'activation d'une feuille je lance la macros pou r établir les variables selon les feuilles actives ... et que ... j'ob tiens une erreur ... il semble que les variables ne sont plus reconnues ... comme s'il fallait à nouveau lancer la macro pour établir les va riables.
Car si j'obtiens une erreur ... je demeure dans la feuille active et je sou haite continuer.
Est-ce normal d'avoir cette situation ou ... peut-être me manque t'il un bout de code?
Ou encore ... devrais-je simplement ajouter un code tel que On error goto F in et en bas de Fin: je lancerais à nouveau la macro pour les variable s?
Merci à l'avance.
Avatar
Michd
Bonjour,
Quand tu déclares une variable dans le haut d'un module standard comme dans
l'exemple,
'Dans le haut d'un module standard. La variable est disponible partout dans
le code de ton classeur.
Public Toto as String
Si tu déclares la variable dans le haut d'un module Feuille, la variable est
disponible seulement au niveau des procédures de la feuille.
Dim Toto as String
Au niveau de la procédure locale, la variable est disponible seulement au
niveau de la procédure et nulle part ailleurs.
Tu dois déclarer une variable seulement une seule fois, l'endroit de la
déclaration dépend de l'usage que tu veux faire de la variable.
Qu'indique le texte du message d'erreur? Peux-tu publier la macro qui génère
l'erreur et ne pas oublier de dire dans quel module on retrouve la
procédure?
'----------------------------
Sub MaMacro()
Dim Toto As String
'le code
End Sub
'----------------------------
MichD
Avatar
rmillerlcxl
Merci. C'est très clair comme réponse et je comprend bien.
Voici la structure.
- Dans le haut d'un module standard j'ai plusieurs variables de déclar ées par Public. Plus bas dans ce même modules j'ai ma macro qui d éfinie les variables ... Pro_VARIABLESWS. Vu que ce sont des variables qui changent selon la feuille active lorsque j'active la feuille je lance la macro Pro_VARIABLESWS. Alors les variables sont ajustées et correct ement. Mais ensuite dans la feuille active ... par exemple dans l'év ènement DoubleClic ... si selon une condition je lance une autre macro exemple Pro_INITIALES (qui est dans un autre module) pour effectuer une au tre opération ... comme par exemple d'inscrire une valeur à un en droit particulier.
Or ... si j'obtiens une erreur dans la macro Pro_INITIALES ... qui est dan s un autre module ... je suis toujours dans la même feuille. Mais en f aisant de nouveau l'opération ... par exemple en ayant corriger le cod e pour éviter l'erreur ... alors la variables n'est plus reconnue ... même si je suis dans la même feuille.
Dois-je en déduire que ... comme vous l'avez précisé ... que c'est parce que l'erreur se produit dans une macro d'un autre module? Mais par contre cette macro a été lancée dans la feuille par Cal l Pro_INITIALES.
Évidemment ... si cela est possible ... j'aimerais ne pas à devoi r mettre à jour les variables (celles-ci doivent changer à l'acti vation d'une feuille).
Peut-être devrais actualiser les variables au début de chaque mac ro plutôt que dans la feuille?
Merci à l'avance.
Avatar
Michd
Comme je ne vois pas les macros et que tu ne me dis pas quel est le message
d'erreur qu'affiche Excel, il est difficile pour moi de voir ce qui ne va
pas. Peux-tu publier ton classeur (supprime toutes les informations
sensibles, ce qui m'intéresse ce sont les macros) et utilise cette adresse
pour publier ton classeur "Cjoint.Com". Retourne-nous ici l'adresse que tu
obtiendras.
Dis-moi sur quelles cellules tu fais un double-clic qui provoque l'erreur.
MichD