XL 2013 DECLARER UNE SEULE FOIS VARIABLES ET LEUR VALEUR SUR X MACROS

  • Initiateur de la discussion Initiateur de la discussion Attila451
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Attila451

XLDnaute Occasionnel
Bonjour,
Je n'arrive pas à trouver comment déclarer une seule fois les variables ET leur valeurs pour plusieurs macros:
Je prends l'exemple de 3 macros (j'ai mis les mêmes macros sur 3 modules pour expliquer au mieux mon besoin),
MODULE 1 et 2 ça marche mais module 3: ca plante.

MODULE 1: je déclare classiquement dans chaque macro les types de variables et leur valeur:

Sub SUP()

Dim L As Long
Dim v As Long
Dim R As Long
Dim ligne As Long

ligne = 2
L = 1
v = 2
R = 3

While Cells(ligne, L) <> ""
If Cells(ligne, v) > 10 Then
Cells(ligne, R) = "SUP"
End If

ligne = ligne + 1
Wend
End Sub

Sub INF()

Dim L As Long
Dim v As Long
Dim R As Long
Dim ligne As Long

ligne = 2
L = 1
v = 2
R = 3

While Cells(ligne, L) <> ""
If Cells(ligne, v) < 10 Then
Cells(ligne, R) = "INF"
End If

ligne = ligne + 1
Wend
End Sub

Sub efface()

Dim L As Long
Dim v As Long
Dim R As Long
Dim ligne As Long

ligne = 2
L = 1
v = 2
R = 3

While Cells(ligne, L) <> ""
Cells(ligne, R) = " "

ligne = ligne + 1
Wend


MODULE 2: Pour faire plus simple, je ne déclare en début de module que le type de variables pour éviter de le répéter dans toutes les macros, par contre, je déclare les valeurs des variables dans chaque macro:

Dim L As Long
Dim v As Long
Dim R As Long
Dim ligne As Long

Sub SUP()
ligne = 2
L = 1
v = 2
R = 3

While Cells(ligne, L) <> ""
If Cells(ligne, v) > 10 Then
Cells(ligne, R) = "SUP"
End If

ligne = ligne + 1
Wend
End Sub

Sub INF()
ligne = 2
L = 1
v = 2
R = 3

While Cells(ligne, L) <> ""
If Cells(ligne, v) < 10 Then
Cells(ligne, R) = "INF"
End If

ligne = ligne + 1
Wend
End Sub

Sub efface()
ligne = 2
L = 1
v = 2
R = 3

While Cells(ligne, L) <> ""
Cells(ligne, R) = " "
ligne = ligne + 1
Wend
End Sub

MODULE 3: c'est ce dont j'ai besoin: si j'ai à changer sur 50 macros les variables et leur valeur pourquoi on ne peut pas faire comme avec les type de variable et les saisir une seule fois en début de module ??

Dim L As Long
Dim v As Long
Dim R As Long
Dim ligne As Long

ligne = 2
L = 1
v = 2
R = 3

Sub SUP()

While Cells(ligne, L) <> ""
If Cells(ligne, v) > 10 Then
Cells(ligne, R) = "SUP"
End If

ligne = ligne + 1
Wend
End Sub

Sub INF()

While Cells(ligne, L) <> ""
If Cells(ligne, v) < 10 Then
Cells(ligne, R) = "INF"
End If

ligne = ligne + 1
Wend
End Sub

Sub efface()

While Cells(ligne, L) <> ""
Cells(ligne, R) = " "

ligne = ligne + 1
Wend
End Sub

J'ai "ERREUR D'INSTRUCTION".... sur le module 3, comment procéder svp ?
Merci d'avance pour votre aide !
 

Pièces jointes

Bonjour Attila,
Comme vos variables sont valables pour tous les modules, on peut les considérer comme étant des constantes. Si c'est le cas déclarez les en constantes publiques et affecter leur une valeur :
VB:
Public Const L As Long = 1
Public Const v As Long = 2
Public Const R As Long = 3
Public Const ligne As Long = 2
 
Bonjour,
Merci, j'ai trouvé cette solution de déclarer en constante par contre il y a juste " ligne" qui ne fonctionne pas car elle est incrémentée dans la routine. La solution fonctionne impeccablement sur un même module, par contre, si je déclare les constantes dans un module, si je lance une macro dans un autre module , j'ai le message "nom ambigu"... Et je n'ai pas encore trouvé comment le solutionner ...
Si vous aviez une piste, je suis preneur !
Merci d'avance.
 
Re,
Si elle est incrémentée dans la routine, déclarez la comme variable public.
Elle conservera alors sa valeur pour tous les modules amis devra être initialisée une première fois.
VB:
Public ligne As Long
 
Bonsoir,
Merci. Par contre, en saisissant les constantes dans un module, quand je lance une macro dans un autre module, les constantes ne sont pas reconnues, même en public. J'ai le message "nom ambigu".
Vous avez une idée pour y remedier ?
 
Bonsoir tout le monde,
Quand une variable est déclarée en Public, sa portée est pour tout le classeur.
Donc soit elle est mal déclarée, soit déclarée pas au bon endroit.
Essayez de fournir un petit fichier test.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
252
Réponses
4
Affichages
363
Retour