{"id":234,"date":"2025-07-20T14:28:44","date_gmt":"2025-07-20T14:28:44","guid":{"rendered":"https:\/\/loufab.alwaysdata.net\/blogaccess\/?p=234"},"modified":"2025-07-30T20:46:22","modified_gmt":"2025-07-30T20:46:22","slug":"vba-bang-ou-dot","status":"publish","type":"post","link":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/2025\/07\/20\/vba-bang-ou-dot\/","title":{"rendered":"VBA : Bang ou Dot ?"},"content":{"rendered":"\n<p>Lorsque vous d\u00e9veloppez en VBA, \u00eates-vous plut\u00f4t Bang (!) ou plut\u00f4t Dot (.) ou m\u00e9langez-vous all\u00e9grement les deux formes de syntaxe Dang\/Bot ?<\/p>\n\n\n\n<p>Pour savoir o\u00f9 vous vous situez, voici un exemple de chaque syntaxe.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"visualbasic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">'Bang\nForms!monformulaire!maliste\n\n'Dot\nForms.monformulaire.maliste\n\n'Dang ou Bot :)\nForms.monformulaire!macolonne<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Le Bang<\/h2>\n\n\n\n<p>C&rsquo;est la syntaxe originelle de VBA quand il apparut pour la premi\u00e8re fois sur Ms Access 1.1. On retrouve de nombreux exemples sur Internet et dans des applications anciennes ou d\u00e9veloppez \u00e0 grand coup de copier\/coller issu du net, et sans surprise dans le code remont\u00e9 par les IA.<\/p>\n\n\n\n<p>Le Bang a une signification particuli\u00e8re depuis l&rsquo;apparition du Dot. Prenons par exemple l&rsquo;objet <strong>Recordset <\/strong>de la biblioth\u00e8que <strong>DAO <\/strong>(Microsoft Office xx.0 Object Library) dans l&rsquo;Explorateur d&rsquo;Objets (<strong>F2<\/strong>) de VBE.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"415\" height=\"299\" src=\"https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/07\/f2_default-1.png\" alt=\"\" class=\"wp-image-237\" style=\"width:369px;height:auto\" srcset=\"https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/07\/f2_default-1.png 415w, https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/07\/f2_default-1-300x216.png 300w\" sizes=\"auto, (max-width: 415px) 100vw, 415px\" \/><\/figure>\n<\/div>\n\n\n<p>On voit dans l&rsquo;Explorateur d&rsquo;Objets qu&rsquo;un \u00e9l\u00e9ment de la classe b\u00e9n\u00e9ficie d&rsquo;une ic\u00f4ne particuli\u00e8re et qu&rsquo;en le s\u00e9lectionnant il apparait comme <strong>Membre par d\u00e9faut<\/strong>. Le Bang d\u00e9signe cet objet (ou propri\u00e9t\u00e9) implicitement sans pour autant qu&rsquo;on sp\u00e9cifie sa nature.<\/p>\n\n\n\n<p>Partant du mod\u00e8le indiquant que <strong>Fields <\/strong>est le membre par d\u00e9faut de <strong>Recordset <\/strong>et que <strong>Value <\/strong>est le membre par d\u00e9faut de <strong>Field <\/strong>on cr\u00e9e l&rsquo;exemple de manipulation Bang\/Dot suivant :<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"visualbasic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Sub test()\nDim rs As DAO.Recordset\nSet rs = CurrentDb.OpenRecordset(\"select * FROM matable\", dbOpenSnapshot)\n\n'renvoi le nom de la colonne Nom\nDebug.Print rs!nom.Name  'bang\/dot\nDebug.Print rs.Fields(\"nom\").Name  '\u00e9quivalent dot\n\n'renvoi la valeur de la colonne Nom\nDebug.Print rs!nom    'bang ou Value est le membre par d\u00e9faut de Field\nDebug.Print rs.Fields(\"nom\")  'dot avec bang implicite\nDebug.Print rs.Fields(\"nom\").value  'dot explicite\n\n'provoque une erreur\nDebug.Print rs!nom!Name     'bang non maitris\u00e9\nDebug.Print rs.Fields(\"nom\")!Name  'dot\/bang non maitris\u00e9\n\nrs.Close\nSet rs = Nothing\n\nEnd Sub<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Alors pourquoi le Dot ? Quels avantages ?<\/h2>\n\n\n\n<p>L&rsquo;utilisation de Dot, m\u00eame si elle est plus verbeuse, permet l&rsquo;affichage de <strong>l&rsquo;autocompl\u00e9tion <\/strong>\u00e0 la touche du point (Dot) appuy\u00e9e.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"282\" height=\"179\" src=\"https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/07\/autocompletion.png\" alt=\"\" class=\"wp-image-238\"\/><\/figure>\n<\/div>\n\n\n<p><strong>L&rsquo;autocompl\u00e9tion <\/strong>pour ceux qui ne sont pas habitu\u00e9s \u00e0 l&rsquo;utilisation des EDI (Environnement de D\u00e9veloppement Int\u00e9gr\u00e9) sont des listes tr\u00e8s utiles qui recenses les propri\u00e9t\u00e9s, m\u00e9thodes et objets des classes invoqu\u00e9es.<\/p>\n\n\n\n<p>Outre sont cot\u00e9 pratique d&rsquo;aide \u00e0 la saisie, il y a, pour les plus curieux, un tremplin de d\u00e9couverte et d&rsquo;exploration de classe.<\/p>\n\n\n\n<p>Le c\u00f4t\u00e9 verbeux de Dot ne doit pas rebuter le d\u00e9veloppeur car \u00e0 premi\u00e8re lecture du code et sans forc\u00e9ment connaitre la classe utilis\u00e9e, il n&rsquo;y a pas de doute sur ce que le concepteur fait.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>Si la forme Dot peut remplacer la forme Bang, il faut \u00eatre vigilant lors de l&rsquo;utilisation du Bang et le m\u00e9lange des deux doit \u00eatre effectu\u00e9 dans la plus grande connaissance de la classe.<\/p>\n\n\n\n<p>Etes-vous Dot, Bang ou Dang\/Bot ?<br>Si vous voyez du Bang, \u00e9prouvez-vous le besoin de le transformer en Dot ?<br>Donnez moi votre point de vue sur le sujet.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Lorsque vous d\u00e9veloppez en VBA, \u00eates-vous plut\u00f4t Bang (!) ou plut\u00f4t Dot (.) ou m\u00e9langez-vous all\u00e9grement les deux formes de syntaxe Dang\/Bot ? Pour savoir o\u00f9 vous vous situez, voici un exemple de chaque syntaxe. Le Bang C&rsquo;est la syntaxe &hellip; <a href=\"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/2025\/07\/20\/vba-bang-ou-dot\/\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[7],"class_list":["post-234","post","type-post","status-publish","format-standard","hentry","category-code-vba","tag-code-vba"],"_links":{"self":[{"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/posts\/234","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/comments?post=234"}],"version-history":[{"count":3,"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/posts\/234\/revisions"}],"predecessor-version":[{"id":264,"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/posts\/234\/revisions\/264"}],"wp:attachment":[{"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/media?parent=234"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/categories?post=234"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/tags?post=234"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}