Êtes-vous adepte du Dot (.) ou du Bang (!) dans vos syntaxes VBA ? Connaissez-vous la différence entre les 2 ? Dans cet article nous allons essayer d’y voir plus clair.
Un peu d’histoire pour comprendre
Bang (!) le séparateur historique
En 1992, lorsque Access est paru, il n’y avait que 2 possibilités pour automatiser les processus :
- Les Macros
- Les expressions
- Access Basic dérivé de Visual Basic, qui deviendra avec Access 2.0 le célèbre VBA.
Pour accéder aux composants des formulaires et des états, le séparateur adopté fut le point d’exclamation (Bang en anglais). Toute la documentation Access Basic se résumant au manuel de programmation d’Access indiquait le Bang (!) comme séparateur.
Le Dot (.) modernise Access Basic
En version 2.0 d’Access le point (. Dot) fait son apparition et avec lui une fonctionnalité très attendue : L’autocomplétion.
Cette liste de membres ajoute du confort au développement en VBA et permet aux plus curieux une exploration des modèles objets utilisés.
Il faut au préalable avoir coché son utilisation dans VBE/Outils/Options :
Le F2 (explorateur d’objets) vient complété cette offre de service.
Bang ! vs. Dot .
On l’aura compris pour avoir une bonne maitrise du code et une courbe d’autoformation améliorée, l’utilisation du Dot (.) est à privilégier.
Doit-on abandonner le Bang pour autant ? La réponse est clairement Non !
Il a une signification, il désigne l’élément (méthode/propriété) par défaut de certaines classes.
'Code exemple Dim rst as dao.Recordset Set rst = currentdb.openrecordset("Select id, nom, prenom From tClient;", dbopensnapshot) 'cette syntaxe debug.print rst.fields("nom").value ' est equivalente à celle-ci debug.print rst!nom.value
Avec l’Explorateur d’Objets de VBA (F2) on peut vérifier si un membre est déclaré « par défaut ».
Le point bleu sur l’icône + l’intitulé « Membre par défaut » dans la description du membre.
Utilisation de Bang (!) et ses exceptions
L’utilisation du Bang (!) dans les collections pourrait être simple s’il ne souffrait pas de quelques exceptions.
La collection Form et Report indique que « Controls » (collection des controls) est le membre par défaut. Mais étrangement il peut aussi désigner la colonne d’une table ou d’une requête indiqué dans la source du formulaire ou de l’état si celle-ci n’a pas de « Control » (zone de texte, zone de liste…) liée.
Autrement dit pour une source du formulaire comme ceci :
SELECT id, nom, prenom FROM tClient;
Où seul Nom et Prénom aurait leur zone de texte insérée dans le formulaire/état on pourrait très bien utiliser le Bang (!) dans VBA pour faire référence à Id qui lui n’a pas de « Control ».
'fonctionne Me!Id 'ne fonctionne pas Me.Id
Conclusion
L’utilisation du Dot (.) est donc primordial pour travailler avec VBA. D’ailleurs lorsqu’on regarde les problèmes remontés dans les forums sur du code qui provoque des erreurs du type « Membre inconnu » on remarque souvent que le Bang (!) est employé à tous les étages.
Certain diront que le code verbeux est proscrire mais il s’agit d’une habitude qui permet plusieurs années après la conception de mieux s’y retrouver. C’est pour cela que je n’emploie le Bang (!) que pour son exception, jamais pour le le membre par défaut.
Et vous, quelle habitude avez-vous et qu’utilisez vous majoritairement ?
Est-ce que ce billet va vous faire changer vos habitudes ?