Comment stocker les variables avec valeur dans un module ?

Bonjour, je souhaite stocker toutes mes variables ainsi que leur valeur dans un module afin qu'on puisse les appeler dans un "Private Sub" , ce qui me permettrait de juste écrire le nom de la variable sans avoir besoin de lui attribuer une valeur selon son type.

Si ce n'est pas possible de faire dans un "Private Sub", est-il possible de le faire dans un "Public Sub" ?

Peut-on conserver le "Dim" ou dois-on le remplacer par un autre mot-clé ?

Je vous remercie d'avance.

Stef de Nîmes

Bonjour,

Je crois qu'il vous faut déclarer des constantes publiques (à moins qu'elles n'entrent en argument de vos macros) en tête d'un module standard :

public const i = 1
public const s as string = "bla"

par exemple.

Sinon, vous pouvez déclarer ces variables publiques et les affecter avant utilisation dans les macros :

public mavar$

sub affect()
mavar = range("A1").value
end sub

sub mavraiemacro()
call affect
msgbox mavar
end sub

Cdlt,

Bonjour 3GB,

Comme çà :
Public Const age As Byte = 34

Dois-je aussi mettre "Option Explicit" dans le module_Variables ?

Bonjour Stéphane,

Oui par exemple, en tête d'un module standard.

Ces variables auront alors une valeur fixe définie en "dur" dans le code. S'il est possible que leur valeur évolue, il faut choisir la seconde option ou un fonctionnement similaire.

Je ne crois pas que le recours à l'Option Explicit soit nécessaire. Mais vous n'y perdrez rien en le mettant.

Cdlt,

Bonjour

Dois-je aussi mettre "Option Explicit" dans le module_Variables ?

Comme dit 3GB, vous n'y perdez rien en la mettant mais cela sert surtout à vous assurer que vous avez bien déclaré toutes les variables là où vous avez mis cette instruction. Elle ne se place pas uniquement que dans les modules mais bien partout où vous avez des codes.

Je vous conseille de toujours la mettre et pour ne pas l'oublier vous pouvez faire en sorte qu'elle soit toujours placée dans vos modules, feuilles, userform, etc.. en allant dans le menu Editeur VBA -> Outils -> option et là vous cochez la case "Declaration variables obligatoire"

Variable Public peut être utilisée partout dans votre projet et à placer en entête d'un module
Variable Dim (donc non public) : peut être placée dans un code et ne sera active que dans le code à exécuter. Si elle est placée en tête d'un module ou userfom, elle est active dans le module ou userform en cours uniquement.

Cordialement

Bonjour,

La bonne méthode concernant les variables consiste à les déclarer en tant que de besoin dans chaque procédure ou dans chaque sub et c'est pour cela qu'on met Option Explicit en tête de chaque module. Cequi sécurise bien votre code et facilite le débogage.

Une fois qu'on a dit ça c'est clair qu'on peut s'en passer. Quelques pros s'y risque pour des trucs faciles ou ils ont fort peu de chance de se planter... Mébon dans l'ensemble y compris chez les pros c'est une pratique couramment admise de les déclarer systématiquement : Ça évite beaucoup de peete de temps et de prise de tête.

Y contrevenir est plutôt une pratique de fainéant qui n'a rien compris au problème...

Cependant dans quelques cas bien précis il est indispensable de déclarer certaines variables ou constantes publiques mais cela devrait rester exceptionnel.

A+

Bonjour à tous,

@Galopin : Ce n'est pas ta première démonstration d'hostilité à mon encontre :

Y contrevenir est plutôt une pratique de fainéant qui n'a rien compris au problème

Si tu as un problème avec moi, je t'invite à venir me parler en privé pour mettre les choses à plat, sinon de confirmer ici que tu ne me visais pas mais surtout je te prie de rester courtois et respectueux car certains de tes commentaires tournent à la vocifération...

@Stéphane : De mon point de vue (sans valeur car de novice, je le précise, pour ne fâcher personne), l'utilisation de l'Option Explicit est la bonne pratique "académique" mais, sur un petit projet, toujours en construction avec des petites "macrounettes", ce n'est absolument pas nécessaire.

Par exemple, sur une avenue, on emprunte les passages cloutés pour traverser mais on déroge à cette "règle" dans une impasse...

Cdlt,

Oh je n'ai rien à cacher ! Non ma remarque ne s'adressait pas à toi, pas plus qu'à DAN ou autre, c'est une considération d'ordre générale que j'ai adopté par ce que je l'ai lue il y a des années 'je ne sais ou) et je m'en suis bien trouvé. Après chacun fait ce qu'il veut de mes remarques .

Beaucoup trouvent certaines de mes remarques plongées dans en encrier de vitriol... C'est probablement du à mon vocabulaire... coloré ! Il n'en est rien, mes remarques n'ont jamais rien de personnel, même si j'en convient j'appelle toujours un chat un chat.

Bon on ne peut pas plaire à tout le monde aussi je ne cherche pas.Et comme je ne cherche pas non plus à flooder je me fais de plus en plus rare. Ce qui m'évite bien des acidités d'estomac.

Alors si je t'ai blessé c'est bien involontaire. Excuse moi d'être comme je suis !

A+

Ah d'accord, au temps pour moi alors. Je te remercie d'être venu me rassurer. On a parfois tendance à mal interpréter ce qu'on lit...

A plus,

Beaucoup trouvent certaines de mes remarques plongées dans en encrier de vitriol... C'est probablement du à mon vocabulaire... coloré !.... Ce qui m'évite bien des acidités d'estomac. ...Excuse moi d'être comme je suis

Lol Galopin, tu es un véritable Galopin...

C'est bien de rester cool les gars, on a tous ses connaissances avec ses limites, sa compréhension et ses oublis.

Je dirais qu'il est préférable de laisser l'option explicit se mettre automatiquement (c'est une définition qui est enregistrée dans le profil utilisateurs), cela évite de ne pas omettre de les déclarer quelque soit le projet.

Galopin se souviendra d'un ami sur un autre site Excel (l'homme fana des Stones !), qui n'hésitait pas à remonter les bretelles de celui qui oubliait de les déclarer dans sa solution

Amicalement

Bonjour à tous !

À 3GB, Dan et Galopin01,

Je vous remercie à tous les 3 de me venir en aide .

Je ferai ainsi pour chaque type de variable avec leur propre valeur.

Je vais donc pendre l'habitude de mettre l'instruction "Option Explicit" dans la zone des déclarations

Option Explicit

Public Const & "ma_variable" & As Type = & valeur de "ma_variable"

Quelle est la seconde option dont tu parles ? (Pourrais-tu m'en montrer un exemple s'il te plaît ?)

-----------------------------

Donc si je comprends bien, quand je vais rédiger une macro avec des variables, je n'aurai qu'à juste réécrire le nom de la variable et sa valeur sera retrouvée dans le Module_Variables sans avoir besoin de répéter sa valeur dans celle-ci !

Ai-je bien compris ou est-ce que je me suis trompé ?

-----------------------------

Dans le cas où j'ai une variable qui peut à tout moment changer de valeur mais pas de type, il me faudra juste écrire :

"Public" & "ma_variable" & As Type = & valeur_de "ma_variable"

est-ce que j'ai fait juste ?

-----------------------------

À 3GB, Dan et Galopin01,

Je vous remercie à vous 3 pour vos réponses respectives. En très peu de temps, j'ai appris de nouvelles choses concernant les déclarations des variables !

Merci beaucoup à vous 3 !

Stef de Nîmes

stephane.regis.laroche@gmail.com

Bonjour Steph,

La seconde possibilité, c'est d'avoir une macro d'affectation des variables publiques. J'ai mis un exemple sur mon premier commentaire :

public mavar$

'la macro d'affectation
sub affect()
mavar = range("A1").value
end sub

'l'appel de cette macro dans la macro principale
sub mavraiemacro()
call affect
msgbox mavar
end sub

'sinon, dès l'ouverture du fichier
private sub workbook_open()
call affect
end sub

Ce sont des exemple car ça dépend de ce que tu souhaites faire.

Oui, une fois que la valeur est attribuée, elle est conservée en mémoire jusqu'à fermeture du classeur (pour le seconde option) si je ne dis pas de bêtise. Et quand on utilise l'instruction Const, la variable a une valeur assigné qu'il n'est pas possible de modifier.

Cdlt,

Bonsoir

@3GB:

Oui, une fois que la valeur est attribuée, elle est conservée en mémoire jusqu'à fermeture du classeur (pour le seconde option) si je ne dis pas de bêtise. Et quand on utilise l'instruction Const, la variable a une valeur assigné qu'il n'est pas possible de modifier.

C'est exact pour les deux.

Juste un truc que j'évite absolument, ce sont les &, %, $ dans les déclarations de variables. Je préfère mettre String, Integer, Variant en toutes lettres. Même si cela veut dire la même chose pour excel, ces notations remontent, je pense à la création de visual Basic dans les années 60 (à l'époque on se devait de limiter les caractères... mémoire oblige) et je les trouve peu compréhensibles pour celui qui veut apprendre VBA. C'est juste un avis perso bien entendu.

@ Stephane : voyez ce lien intéressant sur le sujet -> https://forum.excel-pratique.com/astuces/vba-declaration-de-variable-10639 qui pourrait aider Stéphane

Rechercher des sujets similaires à "comment stocker variables valeur module"