Bonjour,
j'arrive un peu tard dans ce débat, mais je préfère nettement la (structure de la) formule que préconise Zoom61 dans son introduction à l'utilisation d'une variable publique, avec quelques nuances :
- ton premier message est, à très peu de choses près, un objet métier
- remplace le module standard par un
module de classe, nommé pour représenter ce qu'il va contenir : le nom d'une table ou d'un objet traité dans ton Formulaire1 (et ailleurs!).
Par exemple, si ton application gère une école, des cours, des étudiants..., une classe cl_Etudiant.
Il y en aura d'autres, pour chaque objet traité : cl_Cours, cl_Matiere...)
- remplace les 2 subs GET_var1 et SET_var1 par une propriété GET/LET
(remarque : le terme Set est normalement réservé aux objets.):
1 2 3 4 5 6 7 8 9 10 11
| Option Compare Database
Option Explicit
Dim m_Nom As String
'Cette propriété permettra d'enregistrer une valeur dans une variable
Public Property Let Nom(NouveauNom As String)
m_Nom = NouveauNom
End Property
'Cette propriété permettra de récupérer la valeur d'une variable
Public Property Get Nom() As String
Nom = m_Nom
End Property |
Petite remarque : quel que soit le module (classe ou standard), ta variable g_var1 n'a de portée qu'à
l'intérieur du module -> préfixe de module
m_var1
Si tu veux que cette (ces) valeur(s) soi(en)t visible(s) partout, tu déclares l'objet au démarrage de l'application (exemple avec macro Autoexec qui lance la fonction Demarrage(), et module standard de démarrage :
1 2 3 4 5 6 7 8 9 10 11
|
Option CompareDatabase
Option Explicit
'Objet public
Public EtudiantActif As clEtudiant
Public Function Demarrage()
Set EtudiantActif = New clEtudiant
[...] 'lancement de l'application
End |
Et voilà !
Enfin, tout formulaire, module standard ou autre peut changer ou lire la valeur avec un simple :
1 2 3 4 5 6
|
'lire la valeur
if EtudiantActif.Nom = "William Gates" then
'changer la valeur
EtudiantActif.Nom = "Bill Gates"
End If |
Sans oublier que tu peux, à tout moment, détruire l'objet si tu n'en as plus besoin :
1 2
|
Set EtudiantActif = nothing |
Les principaux avantages :
Facilité :
- ça va aussi vite de faire un module de classe qu'un module standard,
- avec mzTools, tu crées les 2 propriétés Get/Let en un clic (voir aussi la version courte ci-dessous)
Souplesse :
- tu n'es pas limité par le nombre, et surtout pas par le type des variables : chacune a son type, tu peux ajouter autant d'objets que tu veux, et chaque objet peut avoir autant de propriétés que nécessaire. Et puis, des méthodes aussi, mais pas tout à la fois...
Code structuré :
- au lieu d'avoir une flopée de variables publiques + ou - cohérentes, tu les regroupes dans des objets : clarté du code très lisible, facile à faire évoluer.
Puissance accrue :
- tu vas pouvoir exécuter du code au moment du changement de valeur, ou de la lecture. The sky is the limit!
Portée variable :
- L'objet EtudiantActif peut être public, ou utilisé seulement dans un formulaire ou un seul module (je sais, ce n'est pas ton but ici, mais c'est une possibilité en plus que tu utiliseras certainement un jour)
Un grand nombre d'objets métier seront très proches de la structure de tes tables : 1 objet par table, 1 propriété par champ. En fait, seulement les objets et les propriétés que tu as besoin de "partager". Finalement assez simple à gérer,et beaucoup plus facile à déboguer ensuite.
Enfin, juste pour faire plaisir à Philippe, rappelons que la version simple de cet objet avec sa propriété, tient en une ligne. Même module de classe, même déclaration d'objet au démarrage, même utilisation n'importe où :
1 2 3
| Option Compare Database
Option Explicit
Public m_Nom As String |
Par contre, j'aimerais insister sur un point : tu me diras si je me trompe sur tes intentions, mais j'ai le sentiment que tu veux créer une sorte de variable universelle, ou tu vas mettre des tas de choses différentes, selon le moment ou tu l'utilises.
Si c'est le cas, je crie au meurtre : gros gros danger de confusion, de bogues indécelables : qui met quoi, où, quand, comment, pourquoi ???
C'est pour cela que la programmation objet a été inventée : y voir clair, nommer ce qu'on traite et regrouper dans un seul et même objet tout ce qui le concerne. Nos PCs aujourd'hui ont assez de RAM pour traiter cela, alors écrivons du code propre et lisible : on gagnera beaucoup de temps.
Partager