{"id":12106,"date":"2024-09-09T06:41:47","date_gmt":"2024-09-09T04:41:47","guid":{"rendered":"https:\/\/www.auditsi.eu\/?p=12106"},"modified":"2024-09-07T21:10:14","modified_gmt":"2024-09-07T19:10:14","slug":"lancer-lexecution-dun-script-python-a-partir-dune-macro-vba","status":"publish","type":"post","link":"https:\/\/www.auditsi.eu\/?p=12106","title":{"rendered":"Lancer l&#8217;ex\u00e9cution d&#8217;un script Python \u00e0 partir d&#8217;une macro VBA"},"content":{"rendered":"<p style=\"text-align: justify;\">Le VBA est un <strong>langage de programmation<\/strong> fabuleux qui permet d&#8217;<strong>automatiser<\/strong> beaucoup de <strong>t\u00e2ches<\/strong>. Mais il n&#8217;est pas le seul, Python aussi ! Il peut arriver qu&#8217;il soit n\u00e9cessaire de faire cohabiter ces deux langages pour \u00e9tablir une<strong> cha\u00eene de t\u00e2ches totalement automatis\u00e9e<\/strong>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-12341\" src=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2023\/11\/Collecte-FEC-2024.png\" alt=\"Collecte FEC 2024\" width=\"807\" height=\"532\" srcset=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2023\/11\/Collecte-FEC-2024.png 807w, https:\/\/www.auditsi.eu\/wp-content\/uploads\/2023\/11\/Collecte-FEC-2024-300x198.png 300w, https:\/\/www.auditsi.eu\/wp-content\/uploads\/2023\/11\/Collecte-FEC-2024-768x506.png 768w, https:\/\/www.auditsi.eu\/wp-content\/uploads\/2023\/11\/Collecte-FEC-2024-730x481.png 730w\" sizes=\"auto, (max-width: 807px) 100vw, 807px\" \/><\/p>\n<p style=\"text-align: justify;\">Par exemple, j&#8217;ai d\u00e9velopp\u00e9 un module VBA qui collecte et met en forme les fichiers balances g\u00e9n\u00e9rales et les Fichiers des Ecritures Comptables (FEC) de l&#8217;ensemble des soci\u00e9t\u00e9s du groupe (environ 90 soci\u00e9t\u00e9s) en vue de leur traitement par mon programme d&#8217;analyse de donn\u00e9es (<a href=\"https:\/\/www.auditsi.eu\/?page_id=8535\">PADoCC_Ecritures<\/a>).<\/p>\n<p style=\"text-align: justify;\">Toutefois, la collecte de ces fichiers sur les serveurs passe par un script Python (pour la partie serveur sFTP : lire l&#8217;article <a href=\"https:\/\/www.auditsi.eu\/?p=12103\">Automatisation &amp; Python : se connecter \u00e0 un serveur sFTP et t\u00e9l\u00e9charger des fichiers<\/a>) ; t\u00e2che que VBA ne sait pas traiter (\u00e0 ma connaissance) d&#8217;o\u00f9 l&#8217;interaction n\u00e9cessaire entre le module VBA et le script Python.<\/p>\n<p>Extrait du code VBA qui lance l&#8217;ex\u00e9cution du script Python :<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"visualbasic\">'------------------------------------------------------------------------------------------------------------------------------\r\n'TELECHARGEMENT DES FICHIERS sFTP (balances, fiches tiers et FEC)\r\n'------------------------------------------------------------------------------------------------------------------------------\r\nSub Ex\u00e9cution_script_Python_sFTP()\r\n    Dim objShell As Object\r\n    \r\n    Set objShell = VBA.CreateObject(\"WScript.Shell\")\r\n    \r\n    'Ex\u00e9cution du script Python en utilisant la ligne de commande\r\n    objShell.Run \"python \"\"\" &amp; DossierDestinationPAD &amp; \"Connexion sFTP.py\"\"\", 1, True\r\nEnd Sub\r\n<\/pre>\n<p style=\"text-align: justify;\">La ligne VBA qui lance l&#8217;<strong>ex\u00e9cution du script Python<\/strong> est pr\u00e9c\u00e9d\u00e9e de la <strong>commande objShell.Run<\/strong> :<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"visualbasic\">objShell.Run \"python \"\"\" &amp; DossierDestinationPAD &amp; \"Connexion sFTP.py\"\"\", 1, True<\/pre>\n<p style=\"text-align: justify;\">Cette ligne VBA \u00e9quivaut \u00e0 la ligne de commande (console Windows) :<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">python \"C:\\Users\\COLDIR01\\Desktop\\DOSSIERS BR\\OUTILS\\PADoCC_Ecritures\\COLLECTE FEC &amp; BG\\Connexion sFTP.py\"<\/pre>\n<p style=\"text-align: justify;\">L&#8217;ex\u00e9cution du script Python d\u00e9clenche l&#8217;affichage de la fen\u00eatre de la console DOS :<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-12114\" src=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2023\/11\/Execution-Connexion-sFTP.py-dans-CMD.png\" alt=\"Ex\u00e9cution Connexion sFTP.py dans CMD\" width=\"979\" height=\"458\" srcset=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2023\/11\/Execution-Connexion-sFTP.py-dans-CMD.png 979w, https:\/\/www.auditsi.eu\/wp-content\/uploads\/2023\/11\/Execution-Connexion-sFTP.py-dans-CMD-300x140.png 300w, https:\/\/www.auditsi.eu\/wp-content\/uploads\/2023\/11\/Execution-Connexion-sFTP.py-dans-CMD-768x359.png 768w, https:\/\/www.auditsi.eu\/wp-content\/uploads\/2023\/11\/Execution-Connexion-sFTP.py-dans-CMD-730x342.png 730w\" sizes=\"auto, (max-width: 979px) 100vw, 979px\" \/><\/p>\n<p style=\"text-align: justify;\">Au passage, on notera qu&#8217;une fois automatis\u00e9es, ces t\u00e2ches, sans aucune valeur ajout\u00e9e mais hautement indispensables, ex\u00e9cut\u00e9es plusieurs fois par semaine font gagner \u00e9norm\u00e9ment de temps par rapport \u00e0 une collecte manuelle\u2026<\/p>\n<p style=\"text-align: justify;\">Tous les articles en rapport avec le <a href=\"https:\/\/www.auditsi.eu\/?tag=python\">langage Python<\/a> \/ le <a href=\"https:\/\/www.auditsi.eu\/?cat=215\">langage VBA<\/a><\/p>\n<p style=\"text-align: justify;\">___<\/p>\n<p style=\"text-align: justify;\">Pour approfondir le sujet :&nbsp;<a href=\"https:\/\/www.auditsi.eu\/?p=12059\">se former \u00e0 la programmation en langage Python pour automatiser ses t\u00e2ches<\/a> \/ <a href=\"https:\/\/www.auditsi.eu\/?page_id=11012\">formation gratuite \u00e0 l&#8217;analyse de donn\u00e9es et \u00e0 l&#8217;automatisation<\/a><\/p>\n<div id=\"sconnect-is-installed\" style=\"display: none;\">2.13.0.0<\/div>\n<div id=\"sconnect-is-installed\" style=\"display: none;\">2.13.0.0<\/div>\n<div id=\"sconnect-is-installed\" style=\"display: none;\">2.13.0.0<\/div>\n<div id=\"sconnect-is-installed\" style=\"display: none;\">2.13.0.0<\/div>\n<div id=\"sconnect-is-installed\" style=\"display: none;\">2.13.0.0<\/div>\n<div id=\"sconnect-is-installed\" style=\"display: none;\">2.13.0.0<\/div>\n<div id=\"sconnect-is-installed\" style=\"display: none;\">2.13.0.0<\/div>\n<div id=\"sconnect-is-installed\" style=\"display: none;\">2.13.0.0<\/div>\n<div id=\"sconnect-is-installed\" style=\"display: none;\">2.13.0.0<\/div>\n<div id=\"sconnect-is-installed\" style=\"display: none;\">2.13.0.0<\/div>\n<div id=\"sconnect-is-installed\" style=\"display: none;\">2.13.0.0<\/div>\n<div id=\"sconnect-is-installed\" style=\"display: none;\">2.13.0.0<\/div>\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=\"Lancer%20l%27ex%C3%A9cution%20d%27un%20script%20Python%20%C3%A0%20partir%20d%27une%20macro%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>Le VBA est un langage de programmation fabuleux qui permet d&#8217;automatiser beaucoup de t\u00e2ches. Mais il n&#8217;est pas le seul, Python aussi ! Il peut arriver qu&#8217;il soit n\u00e9cessaire de faire cohabiter ces deux langages pour \u00e9tablir une cha\u00eene de t\u00e2ches totalement automatis\u00e9e. Par exemple, j&#8217;ai d\u00e9velopp\u00e9 un module VBA qui collecte et met en &#8230;<\/p>\n<p><a href=\"https:\/\/www.auditsi.eu\/?p=12106\" class=\"more-link\">Continue reading &lsquo;Lancer l&#8217;ex\u00e9cution d&#8217;un script Python \u00e0 partir d&#8217;une macro 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=\"Lancer%20l%27ex%C3%A9cution%20d%27un%20script%20Python%20%C3%A0%20partir%20d%27une%20macro%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":[3087,215],"tags":[815,3272,3088,1641],"class_list":["post-12106","post","type-post","status-publish","format-standard","hentry","category-python","category-vba","tag-automatisation","tag-objshell-run","tag-python","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\/12106","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=12106"}],"version-history":[{"count":10,"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=\/wp\/v2\/posts\/12106\/revisions"}],"predecessor-version":[{"id":12553,"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=\/wp\/v2\/posts\/12106\/revisions\/12553"}],"wp:attachment":[{"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=12106"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=12106"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=12106"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}