{"id":70,"date":"2025-06-13T21:20:15","date_gmt":"2025-06-13T21:20:15","guid":{"rendered":"https:\/\/loufab.alwaysdata.net\/blogaccess\/?p=70"},"modified":"2025-08-18T20:13:57","modified_gmt":"2025-08-18T20:13:57","slug":"vba-early-ou-late-binding-quest-ce-que-cest-comment-choisir","status":"publish","type":"post","link":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/2025\/06\/13\/vba-early-ou-late-binding-quest-ce-que-cest-comment-choisir\/","title":{"rendered":"VBA : Early ou Late Binding : Qu&rsquo;est-ce que c&rsquo;est ? Comment choisir ?"},"content":{"rendered":"\n<p>Si vous utilisez des biblioth\u00e8ques externes \u00e0 <strong>MS Access<\/strong>, comprenez qui ne sont pas li\u00e9es automatiquement \u00e0 MS Access, cet article vous int\u00e9resse.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Earlybinding, vous l&rsquo;utilisez syst\u00e9matiquement sans le savoir.<\/h1>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/06\/EarlyLateBinding-1024x683.png\" alt=\"\" class=\"wp-image-393\" srcset=\"https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/06\/EarlyLateBinding-1024x683.png 1024w, https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/06\/EarlyLateBinding-300x200.png 300w, https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/06\/EarlyLateBinding-768x512.png 768w, https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/06\/EarlyLateBinding-450x300.png 450w, https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/06\/EarlyLateBinding.png 1536w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Pour utiliser une biblioth\u00e8que avec <strong>MS Access<\/strong>, habituellement on ouvre <strong>VBE<\/strong>, l&rsquo;\u00e9diteur de VBA, et on utilise <strong>Outils\/R\u00e9f\u00e9rences<\/strong>. La liste qui s&rsquo;affiche dans cette fen\u00eatre sont les biblioth\u00e8ques disponibles sur le poste. Il suffit de cocher la biblioth\u00e8que que l&rsquo;on souhaite utiliser.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"459\" height=\"373\" src=\"http:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/06\/references.jpg\" alt=\"\" class=\"wp-image-73\" srcset=\"https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/06\/references.jpg 459w, https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/06\/references-300x244.jpg 300w, https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/06\/references-369x300.jpg 369w\" sizes=\"auto, (max-width: 459px) 100vw, 459px\" \/><\/figure>\n\n\n\n<p>Dans ce cas on utilise le <strong>Earlybinding<\/strong> qu&rsquo;on peut traduire\u00a0approximativement par\u00a0liaison en amont. <strong>MS Access<\/strong> se comporte\u00a0alors de la mani\u00e8re suivante. Au\u00a0moment\u00a0de l&rsquo;ouverture de\u00a0l&rsquo;application et avant que la premi\u00e8re ligne de\u00a0code de l&rsquo;application ne \u00a0s&rsquo;ex\u00e9cute, <strong>MS Access<\/strong> va v\u00e9rifier que les biblioth\u00e8ques requises existent. Il va sans dire qu&rsquo;aucun contr\u00f4le n&rsquo;est possible durant cette phase.<\/p>\n\n\n\n<p>Cela occasionne des probl\u00e8mes lorsque la biblioth\u00e8que n&rsquo;est pas install\u00e9e sur le poste cible ou qu&rsquo;elle a une version diff\u00e9rente. Dans ce cas, un message d&rsquo;erreur s&rsquo;affiche et l&rsquo;application ne d\u00e9marre pas.<\/p>\n\n\n\n<p>Voici l&rsquo;exemple d&rsquo;un code en <strong>Earlybinding<\/strong> en relation avec la biblioth\u00e8que <strong>Microsoft Word x.xx Object Library<\/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=\"\">Dim wApp As Word.Application \nDim oDoc As Word.Document 'cr\u00e9e l'objet Word \nSet wApp = CreateObject(\"Word.Application\") \n\nwApp.Visible = False \nSet oDoc = wApp.Documents.Open(Chemin) \n\nWith oDoc \n   .MailMerge.OpenDataSource Name:=\"c:\\temp\\export.csv\" ...<\/pre>\n\n\n\n<p>On remarque que les objets sont fortement typ\u00e9s lors de leur d\u00e9claration.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>Latebinding<\/strong> ou comment contr\u00f4ler la pr\u00e9sence des biblioth\u00e8ques.<\/h1>\n\n\n\n<p>Heureusement, le langage <strong>VBA <\/strong>dispose de moyen de pr\u00e9venir l&rsquo;absence de la biblioth\u00e8que au moyen du <strong>Latebinding<\/strong> ou liaison tardive.<\/p>\n\n\n\n<p>Avec le <strong>LateBinding<\/strong> la biblioth\u00e8que n&rsquo;est plus d\u00e9clar\u00e9e avant, c&rsquo;est \u00e0 dire dans les r\u00e9f\u00e9rences, mais bel et bien dans le code au moment de son utilisation. Les objets ne sont plus fortement typ\u00e9s mais re\u00e7oivent le type g\u00e9n\u00e9rique <strong>Object<\/strong>. De m\u00eame \u00e9ventuelles constantes ne sont plus disponibles, il faudra donc les recr\u00e9er.<\/p>\n\n\n\n<p>Voici un\u00a0cas concret\u00a0d&rsquo;une transformation <strong>Early<\/strong> vers <strong>Late<\/strong> pour palier un probl\u00e8me de version d&rsquo;Office lors d&rsquo;une automation avec <strong>Word<\/strong>.<\/p>\n\n\n\n<p>On recr\u00e9e les constantes correspondantes \u00e0 la biblioth\u00e8que <strong>Microsoft Office x.xx Object Library.<\/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 \n\nConst wdDoNotSaveChanges = 0 \nConst wdExportFormatPDF = 17<\/pre>\n\n\n\n<p>Les objets sont typ\u00e9s de mani\u00e8re g\u00e9n\u00e9rique.<\/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=\"\">'Debug \n'Dim wApp As Word.Application \n'Dim oDoc As Word.Document \n\n'Exploitation \nDim wApp As Object \nDim oDoc As Object \n\nSet wApp = CreateObject(\"Word.Application\") \n\nwApp.Visible = False \nSet oDoc = wApp.Documents.Open(Chemin) \nWith oDoc .MailMerge.OpenDataSource Name:=\"C:\\export.csv\" ... \n.Close (wdDoNotSaveChanges)<\/pre>\n\n\n\n<p>Notez la mise en commentaires des lignes <strong>Earlybinding<\/strong> pour permettre une maintenance\/\u00e9volution facilit\u00e9.<\/p>\n\n\n\n<p>Cette technique permet, dans la limite de la compatibilit\u00e9 des biblioth\u00e8ques, de d\u00e9ployer l&rsquo;application sur n&rsquo;importe quel <strong>Office <\/strong>puisque le code n&rsquo;est plus attach\u00e9 \u00e0 une version unique de <strong>Word<\/strong>.<\/p>\n\n\n\n<p>Dans les r\u00e9f\u00e9rences on peut se passer de la d\u00e9claration comme on peut le voir&nbsp;ci-dessous.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"459\" height=\"370\" src=\"http:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/06\/referenceLate.jpg\" alt=\"\" class=\"wp-image-72\" srcset=\"https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/06\/referenceLate.jpg 459w, https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/06\/referenceLate-300x242.jpg 300w, https:\/\/loufab.alwaysdata.net\/blogaccess\/wp-content\/uploads\/2025\/06\/referenceLate-372x300.jpg 372w\" sizes=\"auto, (max-width: 459px) 100vw, 459px\" \/><\/figure>\n\n\n\n<p>Voici un cas concret d&rsquo;une v\u00e9rification de pr\u00e9sence de <strong>Word <\/strong>lors de l&rsquo;ouverture d&rsquo;un formulaire.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Robustesse du code par la pr\u00e9vention d&rsquo;erreur<\/h2>\n\n\n\n<p>En mode <strong>LateBinding <\/strong>il peut arriver que le composant soit absent du syst\u00e8me. C&rsquo;est pour cette raison qu&rsquo;il faut tester le composant avant son utilisation.<br>L&rsquo;exemple suivant montre comment tester un composant.<br><\/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=\"\">Public Function OpenWord() as Boolean\n\nOn Error GoTo ErrSub \nDim wApp As Object \nSet wApp = CreateObject(\"Word.Application\") \nSet wApp = Nothing \nExit Function\n\nErrSub: \nIf Err.Number = 429 Then \n   MsgBox \"Vous devez disposer de Word pour utiliser cette fonctionnalit\u00e9.\" \n   vComposant = False \nEnd If \n\nEnd Function<\/pre>\n\n\n\n<p>L&rsquo;<strong>erreur 429<\/strong> est remont\u00e9e lorsqu&rsquo;une biblioth\u00e8que est absente.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Conclusion<\/h1>\n\n\n\n<p>Si le <strong>LateBinding<\/strong> est pr\u00e9f\u00e9rable pour une application en exploitation, il n&rsquo;en va pas de m\u00eame lors du d\u00e9veloppement. En effet le <strong>Earlybinding <\/strong>donne acc\u00e8s \u00e0 <strong>l&rsquo;autocompl\u00e9tion<\/strong>, ce qui est un confort non n\u00e9gligeable dans cette phase du projet.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Si vous utilisez des biblioth\u00e8ques externes \u00e0 MS Access, comprenez qui ne sont pas li\u00e9es automatiquement \u00e0 MS Access, cet article vous int\u00e9resse. Earlybinding, vous l&rsquo;utilisez syst\u00e9matiquement sans le savoir. Pour utiliser une biblioth\u00e8que avec MS Access, habituellement on ouvre &hellip; <a href=\"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/2025\/06\/13\/vba-early-ou-late-binding-quest-ce-que-cest-comment-choisir\/\">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":[10,9,6],"tags":[11,7],"class_list":["post-70","post","type-post","status-publish","format-standard","hentry","category-access","category-astuce","category-code-vba","tag-access","tag-code-vba"],"_links":{"self":[{"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/posts\/70","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=70"}],"version-history":[{"count":4,"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/posts\/70\/revisions"}],"predecessor-version":[{"id":394,"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/posts\/70\/revisions\/394"}],"wp:attachment":[{"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/media?parent=70"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/categories?post=70"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/loufab.alwaysdata.net\/blogaccess\/index.php\/wp-json\/wp\/v2\/tags?post=70"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}