{"id":132,"date":"2025-06-15T23:07:19","date_gmt":"2025-06-15T23:07:19","guid":{"rendered":"https:\/\/loufab.alwaysdata.net\/blogaccess\/?p=132"},"modified":"2025-07-30T21:25:47","modified_gmt":"2025-07-30T21:25:47","slug":"debogage-vba-les-bonnes-pratiques-1","status":"publish","type":"post","link":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/2025\/06\/15\/debogage-vba-les-bonnes-pratiques-1\/","title":{"rendered":"VBA : D\u00e9bogage, les bonnes pratiques (1)"},"content":{"rendered":"\n<p>Dans cette s\u00e9rie de billets nous allons d\u00e9livrer des conseils, d\u00e9tailler des techniques et mettre en pratique le d\u00e9bogage au travers d\u2019exemples simples.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Introduction<\/h1>\n\n\n\n<p>Le d\u00e9bogage est l&rsquo;action de suivre le d\u00e9roulement du code pour en observer le comportement et corriger des probl\u00e8mes ou bugs. Tout d\u00e9veloppement passe par cette phase dont la dur\u00e9e varie suivant la ma\u00eetrise du langage. La facilit\u00e9 de d\u00e9bogage est proportionnelle \u00e0 la simplicit\u00e9 du code. Faites un code simple, efficace et vous aurez d\u2019autant plus de facilit\u00e9 \u00e0 le d\u00e9boguer.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Qu&rsquo;est-ce que VBE ?<\/h1>\n\n\n\n<p><strong>VBE <\/strong>est l\u2019acronyme de <strong>Visual Basic Editor<\/strong>, soit l\u2019\u00e9diteur Visual Basic Application commun \u00e0 tous les produits de la suite Office et autre produit int\u00e9grant le langage de programmation VBA. C\u2019est avec lui que nous allons travailler tout au long de ces billets.<\/p>\n\n\n\n<p>On y acc\u00e8de au choix apr\u00e8s l&rsquo;ouverture d&rsquo;un fichier Access :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Avec la combinaison de touches <strong>Alt + F11<\/strong>,<\/li>\n\n\n\n<li>En ouvrant un nouveau module ou un existant,<\/li>\n\n\n\n<li>En ouvrant ou cr\u00e9ant un \u00e9v\u00e9nement du type<strong> [Proc\u00e9dure Ev\u00e8nementielle]<\/strong> d&rsquo;un formulaire\/\u00e9tat.<\/li>\n\n\n\n<li>Pour les versions r\u00e9centes via le ruban Cr\u00e9er\/ Autre \/Menu Macro\/ Module ou Module de classe.<\/li>\n<\/ul>\n\n\n\n<p>Cet \u00e9diteur comporte un menu, des barres d\u2019outils ainsi que plusieurs fen\u00eatres.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/06\/fenetres_vbe-1024x576.png\" alt=\"\" class=\"wp-image-133\" srcset=\"https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/06\/fenetres_vbe-1024x576.png 1024w, https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/06\/fenetres_vbe-300x169.png 300w, https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/06\/fenetres_vbe-768x432.png 768w, https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/06\/fenetres_vbe-1536x864.png 1536w, https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/06\/fenetres_vbe-500x281.png 500w, https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/06\/fenetres_vbe.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\n\n\n<p>Nous allons aborder tour \u00e0 tour chacune d\u2019elles au fur et \u00e0 mesure de notre besoin.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Premiers r\u00e9glages : R\u00e9duire les risques d\u2019erreurs<\/h1>\n\n\n\n<p>Le d\u00e9bogage commence avant l\u2019\u00e9criture de la moindre ligne de code. En effet, au-del\u00e0 de la bonne connaissance du produit il existe quelques pr\u00e9cautions \u00e0 prendre pour limiter le risque d\u2019erreurs de codage. Il faut en premier lieu utiliser les meilleurs r\u00e9glages de l\u2019\u00e9diteur VB (Visual Basic Editeur, VBE).<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Les r\u00e9glages de VBE<\/h1>\n\n\n\n<p>Avant de commencer l\u2019\u00e9criture de la moindre ligne de code vous devez vous assurer des r\u00e9glages des options de l\u2019\u00e9diteur VB.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"448\" height=\"361\" src=\"https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/06\/2019-12-17_10h01_21.png\" alt=\"\" class=\"wp-image-134\" srcset=\"https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/06\/2019-12-17_10h01_21.png 448w, https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/06\/2019-12-17_10h01_21-300x242.png 300w, https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/06\/2019-12-17_10h01_21-372x300.png 372w\" sizes=\"auto, (max-width: 448px) 100vw, 448px\" \/><\/figure>\n<\/div>\n\n\n<h1 class=\"wp-block-heading\">V\u00e9rification automatique de syntaxe<\/h1>\n\n\n\n<p>Cette option est int\u00e9ressante lorsque vous d\u00e9butez car elle vous signale les erreurs lors du changement de ligne et vous propose un acc\u00e8s \u00e0 la rubrique d\u2019aide la plus ad\u00e9quate pour r\u00e9soudre le probl\u00e8me.<br>Dans le cas d\u2019une erreur sur la ligne, la ligne apparait en rouge. Si la v\u00e9rification automatique de syntaxe est active, le mot clef posant probl\u00e8me est signal\u00e9 et un message d\u2019erreur s\u2019affiche.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Avec la v\u00e9rification automatique de syntaxe :<\/h2>\n\n\n\n<p>Lorsque le curseur n&rsquo;est plus sur la ligne comportant l&rsquo;erreur.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"678\" height=\"382\" src=\"https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/06\/2019-12-17_09h54_29.png\" alt=\"\" class=\"wp-image-135\" srcset=\"https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/06\/2019-12-17_09h54_29.png 678w, https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/06\/2019-12-17_09h54_29-300x169.png 300w, https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/06\/2019-12-17_09h54_29-500x282.png 500w\" sizes=\"auto, (max-width: 678px) 100vw, 678px\" \/><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\">Sans la v\u00e9rification :<\/h2>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"678\" height=\"382\" src=\"https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/06\/2019-12-17_10h06_04.png\" alt=\"\" class=\"wp-image-136\" srcset=\"https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/06\/2019-12-17_10h06_04.png 678w, https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/06\/2019-12-17_10h06_04-300x169.png 300w, https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/06\/2019-12-17_10h06_04-500x282.png 500w\" sizes=\"auto, (max-width: 678px) 100vw, 678px\" \/><\/figure>\n<\/div>\n\n\n<p> Activ\u00e9e ou non la ligne apparaitra en rouge si elle comporte une erreur, la diff\u00e9rence est uniquement sur l&rsquo;affichage ou non du message.<\/p>\n\n\n\n<p>Lorsque vous faites de la concat\u00e9nation de texte, comme des requ\u00eates SQL dans le code (les plus int\u00e9gristes me traiteront d&rsquo;h\u00e9r\u00e9tique), ou de la copie de code cette option peut vite devenir aga\u00e7ante. Personnellement je d\u00e9sactive cette option.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">D\u00e9claration des variables obligatoires<\/h1>\n\n\n\n<p>Vivement conseill\u00e9e en toute circonstance, cette option permet d\u2019ajouter sur tous les nouveaux modules, l\u2019instruction <strong>Option Explicit <\/strong>en en-t\u00eate. Cela oblige le d\u00e9veloppeur \u00e0 d\u00e9clarer chaque variable avant son utilisation. Vous r\u00e9duisez ainsi les erreurs li\u00e9es aux mauvais noms de variables souvent caus\u00e9es par des fautes de frappe.<br>Tr\u00e8s fr\u00e9quente, cette erreur conduit \u00e0 un code qui ne plante pas mais qui ne fait pas ce qu&rsquo;on lui demande. C&rsquo;est souvent le plus difficile \u00e0 d\u00e9boguer.<br>Si vous avez d\u00e9j\u00e0 commenc\u00e9 \u00e0 coder lorsque vous lisez ces lignes, il n\u2019est pas trop tard pour ajouter cette option dans tous vos modules y compris ceux des formulaires et des \u00e9tats, cependant vous devrez le faire manuellement.<br>Cette instruction vient imm\u00e9diatement apr\u00e8s <strong>Option Compare<\/strong>.<\/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=\"\">Option Compare Database \nOption Explicit<\/pre>\n\n\n\n<p>Notez qu\u2019en l\u2019absence de d\u00e9claration, une variable est de type Variant comme une variable d\u00e9clar\u00e9 sans type. Le type <strong>Variant<\/strong> est&nbsp; tr\u00e8s gourmand en m\u00e9moire.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Compl\u00e9ment automatique des instructions<\/h1>\n\n\n\n<p>Cette option ajoute un confort et une rapidit\u00e9 en mettant \u00e0 disposition la compl\u00e9tion de code. La compl\u00e9tion, souvent d\u00e9sign\u00e9e sous le terme d\u2019<strong>auto-compl\u00e9tion<\/strong> ou <strong>intellisense<\/strong>, se comporte de diff\u00e9rentes mani\u00e8res.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1er cas d\u2019utilisation<\/h2>\n\n\n\n<p>Lorsque vous saisissez un d\u00e9but d\u2019instruction et que vous appuyez simultan\u00e9ment sur <strong>CTRL+Espace<\/strong>&nbsp; plusieurs cas de figure peuvent se produire.<br>INFORMATION : Les cas sont ceux rencontr\u00e9s avec les r\u00e9f\u00e9rences standards.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Une seule correspondance<\/h3>\n\n\n\n<p>Il n\u2019existe qu\u2019une instruction possible, votre saisie est automatique compl\u00e9t\u00e9e.<br>Entrez <strong>Doc<\/strong> et <strong>CTRL+Espace<\/strong>, le mot cl\u00e9 <strong>DoCmd<\/strong> s\u2019affiche.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Plusieurs correspondances possibles<\/h3>\n\n\n\n<p>Il existe plusieurs instructions qui r\u00e9pondent \u00e0 cette saisie. Une liste d\u00e9roulante s\u2019affiche, l\u2019instruction choisie est celle qui correspond \u00e0 la saisie.<br>Entrez <strong>Do<\/strong> et <strong>CTRL+Espace<\/strong> et la liste s\u2019affiche.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"308\" height=\"141\" src=\"https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/06\/2019-12-17_10h14_10.png\" alt=\"\" class=\"wp-image-137\" srcset=\"https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/06\/2019-12-17_10h14_10.png 308w, https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/06\/2019-12-17_10h14_10-300x137.png 300w\" sizes=\"auto, (max-width: 308px) 100vw, 308px\" \/><\/figure>\n<\/div>\n\n\n<p>Utilisez les touches de d\u00e9placement et la tabulation pour valider ou la souri ou encore compl\u00e9ter le mot clef.<br>Pour annuler utilisez la touche <strong>Echap<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2\u00e8me cas d\u2019utilisation<\/h2>\n\n\n\n<p>Lorsque vous utilisez le nom d\u2019un objet ou d\u2019une classe et que vous saisissez le point, la m\u00eame liste d\u00e9roulante s\u2019ouvre avec les choix possibles pour cet objet.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"211\" height=\"150\" src=\"https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/06\/intellisense2.png\" alt=\"\" class=\"wp-image-138\"\/><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\">3\u00e8me cas d\u2019utilisation<\/h2>\n\n\n\n<p>Dans certains cas, comme la d\u00e9claration de variables typ\u00e9es, la compl\u00e9tion entre en action apr\u00e8s avoir entr\u00e9 le mot cl\u00e9 <strong>AS<\/strong>.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"512\" height=\"144\" src=\"https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/06\/intellisense3.png\" alt=\"\" class=\"wp-image-139\" srcset=\"https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/06\/intellisense3.png 512w, https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/06\/intellisense3-300x84.png 300w, https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/06\/intellisense3-500x141.png 500w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/figure>\n<\/div>\n\n\n<p>On rencontre aussi ce fonctionnement lorsque l\u2019instruction saisie n\u00e9cessite un param\u00e8tre <strong>Enum<\/strong>, La m\u00e9thode <strong>OpenRecordset<\/strong> de <strong>DAO<\/strong> en est un parfait exemple. Voir le billet sur les d\u00e9clarations <strong>Enum<\/strong> <a href=\"http:\/\/blogaccess.free.fr\/?p=147\">ici<\/a>.<\/p>\n\n\n\n<p><strong>Conclusion<\/strong><br>Avec la compl\u00e9tion vous n\u2019aurez plus d\u2019excuses pour avoir invent\u00e9 des noms de m\u00e9thodes ou propri\u00e9t\u00e9s farfelues. Si vous \u00eates un peu curieux vous pourrez explorer les composants d\u2019un objet, en action avec l\u2019aide vous d\u00e9couvrirez ainsi de nouvelles m\u00e9thodes et propri\u00e9t\u00e9s.<\/p>\n\n\n\n<p>La compl\u00e9tion fonctionne \u00e9galement avec vos biblioth\u00e8ques de fonctions, proc\u00e9dures et classes ainsi qu\u2019avec les contr\u00f4les, propri\u00e9t\u00e9s et m\u00e9thodes des formulaires et \u00e9tats.<br>La compl\u00e9tion ne fonctionne pas dans les cas suivants :<br>\u2022&nbsp;Quand il y a une erreur identifi\u00e9e (ligne en rouge) non corrig\u00e9e.<br>\u2022&nbsp;L\u2019objet que vous utilisez n\u2019existe pas (biblioth\u00e8que non r\u00e9f\u00e9renc\u00e9e, nom farfelu\u2026)<br>\u2022&nbsp;L\u2019objet n\u2019est pas typ\u00e9 pr\u00e9cis\u00e9ment (<a href=\"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/2025\/06\/13\/vba-early-ou-late-binding-quest-ce-que-cest-comment-choisir\/\" target=\"_blank\" rel=\"noreferrer noopener\">Late Binding<\/a>) c\u2019est le cas pour <strong>Variant <\/strong>et <strong>Object <\/strong>par exemple.<\/p>\n\n\n\n<p>Notez que dans ce dernier cas vous pouvez utilisez la m\u00e9thode \u00ab <a href=\"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/2025\/06\/13\/vba-early-ou-late-binding-quest-ce-que-cest-comment-choisir\/\" target=\"_blank\" rel=\"noreferrer noopener\">Early Binding<\/a> \u00bb durant la conception, puis le transformer en \u00ab <a href=\"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/2025\/06\/13\/vba-early-ou-late-binding-quest-ce-que-cest-comment-choisir\/\" target=\"_blank\" rel=\"noreferrer noopener\">Late Binding<\/a> \u00bb par la suite. Cette technique est d\u00e9crite dans le billet traitant du Binding.<br><br>La compl\u00e9tion est donc essentielle pour \u00e9viter les fautes de frappe et l\u2019utilisation de propri\u00e9t\u00e9s ou m\u00e9thodes inexistantes mais \u00e9galement dans le perfectionnement de votre apprentissage d\u2019une biblioth\u00e8que.<\/p>\n\n\n\n<p>Bon utilisation !<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dans cette s\u00e9rie de billets nous allons d\u00e9livrer des conseils, d\u00e9tailler des techniques et mettre en pratique le d\u00e9bogage au travers d\u2019exemples simples. Introduction Le d\u00e9bogage est l&rsquo;action de suivre le d\u00e9roulement du code pour en observer le comportement et &hellip; <a href=\"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/2025\/06\/15\/debogage-vba-les-bonnes-pratiques-1\/\">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-132","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\/132","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=132"}],"version-history":[{"count":5,"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/posts\/132\/revisions"}],"predecessor-version":[{"id":268,"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/posts\/132\/revisions\/268"}],"wp:attachment":[{"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/media?parent=132"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/categories?post=132"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/tags?post=132"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}