{"id":7504,"date":"2018-08-10T02:15:33","date_gmt":"2018-08-10T00:15:33","guid":{"rendered":"https:\/\/www.auditsi.eu\/?p=7504"},"modified":"2018-08-10T02:15:33","modified_gmt":"2018-08-10T00:15:33","slug":"sgbdr-access-programmer-des-requetes-sql-dans-des-macros-vba","status":"publish","type":"post","link":"https:\/\/www.auditsi.eu\/?p=7504","title":{"rendered":"SGBDR ACCESS : Programmer des requ\u00eates SQL dans des macros VBA"},"content":{"rendered":"<p style=\"text-align: justify;\">Les requ\u00eates SQL remplissent de nombreuses t\u00e2ches concourant \u00e0 l&#8217;analyse de donn\u00e9es. Ces requ\u00eates peuvent \u00eatre utilement programm\u00e9es en VBA. Cette pratique permet \u00e0 la fois d&#8217;automatiser l&#8217;ex\u00e9cution&nbsp;successive de plusieurs&nbsp;requ\u00eates et de modifier les requ\u00eates \u00e0 la vol\u00e9e pour les adapter en fonction des circonstances pr\u00e9cises (dates, comptes, entit\u00e9s&#8230;).<\/p>\n<pre class=\"lang:vb decode:true \">'Mouvements sur comptes cessions immo\r\nNomReq = \"MvtCessImmo\"\r\nTexteReq = \"SELECT * FROM \" &amp; NomTableEcritures &amp; \" WHERE LEFT(Compte,3)='675' OR LEFT(Compte,3)='775' ORDER BY Affaire, DateEcriture\"\r\nEx\u00e9Req<\/pre>\n<p style=\"text-align: justify;\"><em>Dans le cadre d\u2019un projet d\u2019analyse d\u2019\u00e9critures comptables (mise en \u0153uvre d\u2019un programme de supervision des comptabilit\u00e9s d\u2019un groupe de soci\u00e9t\u00e9s), je suis en train de r\u00e9fl\u00e9chir \u00e0 la&nbsp;d\u00e9finition de traitements automatis\u00e9s&nbsp;\u00e0 l&#8217;aide d&#8217;&nbsp;Access en remplacement d&#8217;Excel (ce projet&nbsp;reprend les grandes lignes du programme d&#8217;analyse d&#8217;\u00e9critures <a href=\"https:\/\/www.auditsi.eu\/?page_id=4194\">M\/ATAC<\/a> programm\u00e9 en VBA sur Excel). En effet, le volume d\u2019\u00e9critures comptables du groupe d\u00e9passe all\u00e8grement le million de lignes (limite actuelle d\u2019Excel) pour atteindre environ cinq millions de lignes annuelles. Access appara\u00eet donc comme une solution plus adapt\u00e9e pour traiter de tels volumes de donn\u00e9es (sa limite \u00e9tant pour sa part&nbsp;de 2 Gigaoctets&nbsp;par base de donn\u00e9es).<\/em><\/p>\n<p style=\"text-align: justify;\">A titre d&#8217;exemple, le programme ci-apr\u00e8s, lanc\u00e9 \u00e0 partir de&nbsp;la proc\u00e9dure Export_XL, ex\u00e9cute des <a href=\"https:\/\/www.auditsi.eu\/?p=6899\">requ\u00eates SQL<\/a> (proc\u00e9dure Ex\u00e9Req) sur des \u00e9critures comptables extraites du DMS&nbsp;DCSnet&nbsp;et envoie leur r\u00e9sultat dans des onglets d&#8217;un classeur Excel (Export_Req.xlsx).<\/p>\n<p style=\"text-align: justify;\">Ainsi, la requ\u00eate intitul\u00e9e &#8220;MvtCessImmo&#8221; s\u00e9lectionne (<em>SELECT<\/em>) tous les champs (*) de la table Ecritures (<em>FROM &#8221; &amp; NomTableEcritures<\/em>) pour lesquels les num\u00e9ros de compte commencent pas 675x (<em>WHERE LEFT(Compte,3)=&#8217;675&#8242;<\/em>) ou 775x. Le r\u00e9sultat de cette requ\u00eate est tri\u00e9 par soci\u00e9t\u00e9 et par date d&#8217;\u00e9criture (<em>ORDER BY Affaire, DateEcriture<\/em>).<\/p>\n<pre class=\"lang:vb decode:true\">Option Compare Database\r\n\r\nOption Explicit\r\n\r\nDim NomClasseurXL As String\r\nDim NomReq As String\r\nDim TexteReq As String\r\n\r\nConst NomTableEcritures = \"EcrituresDCS\"\r\nConst Chemin = \"C:\\Users\\COLDIR01\\Desktop\\DOSSIERS BR\\COMPTES\\ANALYSE DES COMPTES\\ESSAI IMPORT EXPORT\\\"\r\nConst DossierSource = \"Source DCS EXPORT 2018 AU 20072018\\\"\r\n\r\nSub Ex\u00e9Req()\r\n    Dim qd As QueryDef\r\n    'Si la requ\u00eate existe d\u00e9j\u00e0, on l'efface\r\n    If ReqExiste(CurrentDb, NomReq) Then DoCmd.DeleteObject acQuery, NomReq\r\n    'Cr\u00e9ation de la requ\u00eate\r\n    Set qd = CurrentDb.CreateQueryDef(NomReq, TexteReq)\r\n    'Transfert du r\u00e9sultat de la requ\u00eate vers Excel\r\n    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, NomReq, Chemin &amp; NomClasseurXL\r\n    'Suppression de la requ\u00eate\r\n    DoCmd.DeleteObject acQuery, NomReq\r\nEnd Sub\r\n\r\nSub Export_XL()\r\n    NomClasseurXL = \"Export_Req.xlsx\"\r\n\r\n    'Mouvements sur comptes 10x -&gt; hors A_NOUVEAUX\r\n    NomReq = \"Mvt10x\"\r\n    TexteReq = \"SELECT * FROM \" &amp; NomTableEcritures &amp; \" WHERE LEFT(Compte,3)='106' AND [Type de compte]='GENERAUX' AND [Type de journal]&lt;&gt;'N'\"\r\n    Ex\u00e9Req\r\n\r\n    'Mouvements sur comptes p\u00e9nalit\u00e9s\r\n    NomReq = \"MvtP\u00e9nalit\u00e9s\"\r\n    TexteReq = \"SELECT * FROM \" &amp; NomTableEcritures &amp; \" WHERE LEFT(Compte,4)='6712'\"\r\n    Ex\u00e9Req\r\n\r\n    'Mouvements sur comptes cessions immo\r\n    NomReq = \"MvtCessImmo\"\r\n    TexteReq = \"SELECT * FROM \" &amp; NomTableEcritures &amp; \" WHERE LEFT(Compte,3)='675' OR LEFT(Compte,3)='775' ORDER BY Affaire, DateEcriture\"\r\n    Ex\u00e9Req\r\nEnd Sub<\/pre>\n<p style=\"text-align: justify;\">Explications sur le code-source :<\/p>\n<ul>\n<li style=\"text-align: justify;\">La proc\u00e9dure Export_XL d\u00e9finit les requ\u00eates (variable TexteReq) \u00e0 ex\u00e9cuter successivement par la proc\u00e9dure Ex\u00e9Req ;<\/li>\n<li>La proc\u00e9dure Ex\u00e9Req effectue les t\u00e2ches suivantes :\n<ul>\n<li>teste si la <a href=\"https:\/\/www.auditsi.eu\/?p=7492\">requ\u00eate existe d\u00e9j\u00e0<\/a> dans la base de donn\u00e9es et dans ce cas <a href=\"https:\/\/www.auditsi.eu\/?p=7498\">l&#8217;efface&nbsp;(<em>DeleteObject<\/em>)<\/a> ;<\/li>\n<li><a href=\"https:\/\/www.auditsi.eu\/?p=7498\">cr\u00e9e la requ\u00eate (<em>CreateQueryDef<\/em>)<\/a> ;<\/li>\n<li>transf\u00e8re le r\u00e9sultat de la requ\u00eate dans un <a href=\"https:\/\/www.auditsi.eu\/?p=7509\">classeur Excel (<em>TransferSpreadsheet<\/em>)<\/a>.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Approfondir le sujet : <a href=\"https:\/\/www.auditsi.eu\/?tag=access\">Ma\u00eetriser ACCESS<\/a> \/&nbsp;<a href=\"https:\/\/www.auditsi.eu\/?cat=1569\">Ma\u00eetriser le langage VBA<\/a> \/&nbsp;<a href=\"https:\/\/www.auditsi.eu\/?cat=1820\">Ma\u00eetriser le langage de requ\u00eate SQL<\/a>&nbsp;\/ <a href=\"https:\/\/www.auditsi.eu\/?cat=50\">Analyse de donn\u00e9es<\/a><\/p>\n<div style=\"padding-bottom:20px; padding-top:10px;\" class=\"hupso-share-buttons\"><!-- Hupso Share Buttons - https:\/\/www.hupso.com\/share\/ --><a class=\"hupso_counters\" href=\"https:\/\/www.hupso.com\/share\/\"><img decoding=\"async\" src=\"https:\/\/static.hupso.com\/share\/buttons\/lang\/fr\/share-small.png\" style=\"border:0px; padding-top:2px; float:left;\" alt=\"Share Button\"\/><\/a><script type=\"text\/javascript\">var hupso_services_c=new Array(\"twitter\",\"facebook_like\",\"facebook_send\",\"email\",\"print\",\"linkedin\");var hupso_counters_lang = \"fr_FR\";var hupso_image_folder_url = \"\";var hupso_twitter_via=\"BenoitRiviere14\";var hupso_url_c=\"\";var hupso_title_c=\"SGBDR%20ACCESS%20%3A%20Programmer%20des%20requ%C3%AAtes%20SQL%20dans%20des%20macros%20VBA\";<\/script><script type=\"text\/javascript\" src=\"https:\/\/static.hupso.com\/share\/js\/counters.js\"><\/script><!-- Hupso Share Buttons --><\/div>","protected":false},"excerpt":{"rendered":"<p>Les requ\u00eates SQL remplissent de nombreuses t\u00e2ches concourant \u00e0 l&#8217;analyse de donn\u00e9es. Ces requ\u00eates peuvent \u00eatre utilement programm\u00e9es en VBA. Cette pratique permet \u00e0 la fois d&#8217;automatiser l&#8217;ex\u00e9cution&nbsp;successive de plusieurs&nbsp;requ\u00eates et de modifier les requ\u00eates \u00e0 la vol\u00e9e pour les adapter en fonction des circonstances pr\u00e9cises (dates, comptes, entit\u00e9s&#8230;). &#8216;Mouvements sur comptes cessions immo NomReq &#8230;<\/p>\n<p><a href=\"https:\/\/www.auditsi.eu\/?p=7504\" class=\"more-link\">Continue reading &lsquo;SGBDR ACCESS : Programmer des requ\u00eates SQL dans des macros VBA&rsquo; &raquo;<\/a><\/p>\n<div style=\"padding-bottom:20px; padding-top:10px;\" class=\"hupso-share-buttons\"><!-- Hupso Share Buttons - https:\/\/www.hupso.com\/share\/ --><a class=\"hupso_counters\" href=\"https:\/\/www.hupso.com\/share\/\"><img src=\"https:\/\/static.hupso.com\/share\/buttons\/lang\/fr\/share-small.png\" style=\"border:0px; padding-top:2px; float:left;\" alt=\"Share Button\"\/><\/a><script type=\"text\/javascript\">var hupso_services_c=new Array(\"twitter\",\"facebook_like\",\"facebook_send\",\"email\",\"print\",\"linkedin\");var hupso_counters_lang = \"fr_FR\";var hupso_image_folder_url = \"\";var hupso_twitter_via=\"BenoitRiviere14\";var hupso_url_c=\"\";var hupso_title_c=\"SGBDR%20ACCESS%20%3A%20Programmer%20des%20requ%C3%AAtes%20SQL%20dans%20des%20macros%20VBA\";<\/script><script type=\"text\/javascript\" src=\"https:\/\/static.hupso.com\/share\/js\/counters.js\"><\/script><!-- Hupso Share Buttons --><\/div>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"ngg_post_thumbnail":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[50,1569,282,215],"tags":[60,166,1923,1925,283,1643,1926,1641],"class_list":["post-7504","post","type-post","status-publish","format-standard","hentry","category-audit-de-donnees","category-programmer-en-vba","category-sql","category-vba","tag-access","tag-analyse-de-donnees","tag-createquerydef","tag-deleteobject","tag-select-from-where-order-by","tag-sql","tag-transferspreadsheet","tag-vba"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_likes_enabled":false,"_links":{"self":[{"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=\/wp\/v2\/posts\/7504","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=7504"}],"version-history":[{"count":11,"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=\/wp\/v2\/posts\/7504\/revisions"}],"predecessor-version":[{"id":7526,"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=\/wp\/v2\/posts\/7504\/revisions\/7526"}],"wp:attachment":[{"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=7504"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=7504"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=7504"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}