Éviter de toujours définir les mêmes variables "Public"

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 !

Magic_Doctor

XLDnaute Barbatruc
Bonjour,

Dans mon application j'ai plusieurs variables "Public" toutes déclarées dans un même module standard.
Ces variables sont utilisées dans plusieurs macros.
VB:
Option Explicit
Public dut As Byte, ba As Double
Dim annuité As Double
--------------------------------------------------------
Sub Macro1()
	annuités = ba / dut
	
	blablabla
End Sub
--------------------------------------------------------
Sub Macro2()
	annuités = ba / dut
	
	blablabla
End Sub
--------------------------------------------------------
Sub Macro3()
	annuités = ba / dut
	
	blablabla
End Sub
--------------------------------------------------------
Sub Macro4()
	annuités = ba / dut
	
	blablabla
End Sub
--------------------------------------------------------
Plutôt que de toujours récrire à chaque fois dans chaque macro "annuités = ba / dut", il y aurait-il un moyen de ne l'écrire qu'une seule fois dans le module et qu'on n'en parle plus ?

Merci pour tout commentaire.
 
Re : Éviter de toujours définir les mêmes variables "Public"

Bonjour Magic_Doctor,
Hello Stape😉, Pierre-Jean😉,David😉


@L'agrafe tu pourrais écrire aussi :
Code:
 Public Enum chose
    Du = 10
    Ba = 2
    Annuités = Du / Ba
End Enum
Sub truc()
    MsgBox chose.Annuités
End Sub

Mais bon suivant l'utilisation que Magic_Doctor veut en faire...?.je ne sais pas.
Cela me semble être une mauvaise manière de traiter la chose, s'il veut que Du et Ba soient variables.

La fonction (post de Dranreb) me semble la plus heureuse des solutions.

Sinon on peut aussi faire dans un module général 3 propriétés, qui permettent des contrôles de valeur et valeur par défaut)

Code:
 Option Explicit
 Private mDut As Byte       'Variable privées de propriété
 Private mBa As Double
 Private mAnnuités As Double
 '
 Public Property Let Dut(dutValue As Byte)
    If dutValue = 0 Then mDutValue=1  else mDut = dutValue
    mAnnuités = mBa / mDut
 End Property
 Public Property Get Dut() As Byte
    Dut = mDut
 End Property
 
 Public Property Let Ba(baValue As Double)
    mBa = baValue
    mAnnuités = mBa / mDut
 End Property
 
 Public Property Get Ba() As Double
    Ba = mBa
 End Property
 
 Public Property Get Annuités() As Double 'En lecture Seule
    Annuités = mAnnuités
 End Property

'-------------------------------------------
 Sub Macro1()
 Dut = 0
 Ba = 14
 MsgBox Annuités
 End Sub


A+++ les amis
 
Dernière modification par un modérateur:
Re : Éviter de toujours définir les mêmes variables "Public"

salut

on peut aussi passer par une sous-routine. Cela est intéressant quand celle-ci est assez développée.
Pour une ligne, je ne comprends pas pourquoi se casser la tête 😕 !
Code:
Option Explicit
Public dut As Byte, ba As Double
Dim annuités

Sub Macro1()
  ba = 10
  dut = 100
  Call an(ba, dut)
  MsgBox annuités
End Sub
Sub Macro2()
  ba = 20
  dut = 100
  Call an(ba, dut)
  MsgBox annuités
End Sub

'sous-routine commune à plusieurs macros
Sub an(x, y)
  annuités = x / y 'prévoir les conrôles de validité comme y<>0
End Sub
 
Dernière édition:
Re : Éviter de toujours définir les mêmes variables "Public"

Bonsoir à tous,

D'abord, merci de vous intéresser à ce problème.

Pour être clair, les valeurs des variables "Public" "dut" & "ba" sont rentrées via des macros évènementielles se trouvant dans un module de feuille ; leurs valeurs respectives changeant forcément constamment. Ces variables sont ensuite récupérées dans des macros se trouvant, elles, dans un même module standard.

PS : rien à voir avec le sujet, mais l'Académie française a décidé que dorénavant événement s'écrirait évènement, ce qui, pour une fois n'est pas idiot, car le 2ème "e" s'étant TOUJOURS prononcé comme un "è" et non un "é", que l'on soit parisien ou marseillais...
 
Re : Éviter de toujours définir les mêmes variables "Public"

RE

Sinon, je verrai bien un truc du genre qui a peut être déjà été dit précédemment, mais pour moi, c'est plus simple de le rappelé à chaque fois:

Code:
Public Dut, BA, Res
sub Macro1
Dut=2
A
Activecell=Res
.....
end sub

sub A
Res= Dut/BA
end sub
 
Re : Éviter de toujours définir les mêmes variables "Public"

Re,

C'est bien ce que je pensais, ce n'est pas possible.
Je voulais faire simple et non pas compliqué.
En revanche, je viens de penser à une solution. Si, comme dans l'exemple que j'ai donné, il y avait un nombre conséquent de variables "Public" puisées dans un autre module mais toutes, par la suite dans un même module, traitées de la même manière, je pense que le plus simple serait qu'elles soient traitées dans une macro à part dans le module où se trouvent les autres macros, puis ensuite, dans chacune des macros, appeler la macro de "traitement". Exemple :
VB:
Option Explicit
Public dut As Byte, ba As Double
Dim annuité As Double
--------------------------------------------------------
Sub MacroIni()
	annuités = ba / dut
	.
	.
	.
End Sub
--------------------------------------------------------
Sub Macro1()
	MacroIni
	
	blablabla
End Sub
--------------------------------------------------------
Sub Macro2()
	MacroIni
	
	blablabla
End Sub
--------------------------------------------------------
Sub Macro3()
	MacroIni
	
	blablabla
End Sub
--------------------------------------------------------
Sub Macro4()
	MacroIni
	
	blablabla
End Sub
--------------------------------------------------------
 
Re : Éviter de toujours définir les mêmes variables "Public"

En quoi ma solution de la petite Function Anuités ne vous convient elle pas ? Vous utilisez Annuités comme bon vous semble, il la calcule quant vous l'invoquez tout simplement.
 
Re : Éviter de toujours définir les mêmes variables "Public"

RE

Je précise que je réfère bien au #1 ou dans les diverses macros annuité est défini en tout début de macro (donc sans changement ni de ba ni de dut ) Il va de soi que si ba ou dut varie en cours de macro il faudra redéfinir annuité
Dans le cas contraire la solution de Dranreb : fonction (avec ou sans argument ) est à mon sens la seule valable
Quant à Enum je peine à en voir l’intérêt

Public Enum Coeff
Coeff_2 = 2
Coeff_3 = 3
Coeff_4 = 4
End Enum

Face à

Const Coeff_2 = 2
Const Coeff_3 = 3
Const Coeff_4 = 4

ou

en début de macro

Coeff= Array(2,3,4)
 
Re : Éviter de toujours définir les mêmes variables "Public"

Re

C'est vrai que la fonction de Bernard est pas mal pour ce genre d'exercice. Je vais le mettre dans mon pense-bête 🙂.

Code:
Public ba, dut
Public Function Annuités() As Double: Annuités = ba / dut: End Function
Sub a()
ba = 10
dut = 5
MsgBox Annuités
ActiveCell = Annuités
End Sub
 
- 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

Retour