{"id":543,"date":"2011-03-22T23:41:08","date_gmt":"2011-03-22T21:41:08","guid":{"rendered":"http:\/\/www.auditsi.eu\/?p=543"},"modified":"2015-01-25T00:13:17","modified_gmt":"2015-01-24T22:13:17","slug":"delphi-excel-les-langages-de-programmation-compiles-allies-a-excel-outils-puissants-de-traitement-de-donnees-a-disposition-des-auditeurs","status":"publish","type":"post","link":"https:\/\/www.auditsi.eu\/?p=543","title":{"rendered":"DELPHI, EXCEL \/ Les langages de programmation compil\u00e9s alli\u00e9s \u00e0 EXCEL : outils puissants de traitement de donn\u00e9es \u00e0 disposition de la profession comptable"},"content":{"rendered":"<p style=\"text-align: justify;\">Dans de pr\u00e9c\u00e9dents articles, j\u2019\u00e9voquais l\u2019usage du langage VBA et de logiciels tels qu\u2019EXCEL ou ACCESS dans nos missions d\u2019audit en vue de faciliter la mise en forme et l\u2019analyse de donn\u00e9es. Cependant, d\u2019autres langages de programmation structur\u00e9s, tels DELPHI (d\u00e9clinaison orient\u00e9e objet du langage Pascal) ou le C++ (successeur du C \u00e9galement orient\u00e9 objet) existent. A la diff\u00e9rence du VBA qui est un langage interpr\u00e9t\u00e9, DELPHI et C++ sont des langages compil\u00e9s<a href=\"http:\/\/www.auditsi.eu\/wp-includes\/js\/tinymce\/plugins\/paste\/pasteword.htm?ver=327-1235#_ftn1\">[1]<\/a>.<\/p>\n<p style=\"text-align: justify;\">Ind\u00e9niablement, la cr\u00e9ation d\u2019applications, mettant en \u0153uvre des formules pour lesquelles l\u2019inalt\u00e9rabilit\u00e9 et\/ou la confidentialit\u00e9 doivent rester de mise (par exemple, calculatrices ou outils de calcul de primes, de RFA, d\u2019imp\u00f4ts\u2026 \u00e0 destination des clients et\u00a0mettant en avant les comp\u00e9tences du cabinet), requi\u00e8re l\u2019usage de langages de programmation compil\u00e9s tels que ceux \u00e9voqu\u00e9s plus avant. En effet, l\u2019utilisateur n\u2019a pas acc\u00e8s au code-source du programme (contrairement aux d\u00e9veloppements en VBA) mais seulement \u00e0 son ex\u00e9cutable (*.exe, *.com), il ne peut donc pas en modifier le fonctionnement (sauf \u00e0 se lancer dans des op\u00e9rations de d\u00e9compilation fort ardues).<\/p>\n<p style=\"text-align: justify;\">Les langages compil\u00e9s assurent, de la m\u00eame mani\u00e8re que le VBA, des passerelles avec des applications tierces, telles EXCEL, ACCESS ou WORD (mais la liste est beaucoup plus longue). Ainsi, il est ais\u00e9 de prendre le contr\u00f4le d\u2019EXCEL, d\u2019ouvrir des feuilles de calcul et de les modifier avec quelques lignes de codes. La liaison op\u00e9r\u00e9e entre les processus de traitements programm\u00e9s et des tableurs ou SGBDR \u00e9tendent de mani\u00e8re infinie le champ du possible en mati\u00e8re de traitement de donn\u00e9es. C\u2019est ce que je vous propose de d\u00e9couvrir avec l\u2019exemple qui suit.<\/p>\n<p style=\"text-align: justify;\"><em><strong>Pour r\u00e9sumer, les langages compil\u00e9s offrent les avantages suivants par rapport aux langages compil\u00e9s\u00a0: rapidit\u00e9 d\u2019ex\u00e9cution, s\u00e9curit\u00e9 et confidentialit\u00e9 des processus de traitement.<\/strong><\/em><\/p>\n<p style=\"text-align: justify;\">L\u2019exemple ci-apr\u00e8s reprend un extrait du code-source du logiciel d\u2019audit des comptes sur lequel je travaille\u00a0: cet extrait r\u00e9cup\u00e8re les balances g\u00e9n\u00e9rales enregistr\u00e9es dans diff\u00e9rents onglets d\u2019un classeur EXCEL (classeur intitul\u00e9 \u2018BG.xlsx\u2019) et les reprend en comparatif N\/N-1\/N-2\u2026 Cet exemple montre comment \u00e0 l\u2019aide d\u2019un langage \u00e9volu\u00e9 comme DELPHI, il est possible de traiter des donn\u00e9es comptables ou financi\u00e8res issues de feuilles de calcul EXCEL. Ce code aurait pu \u00eatre d\u00e9velopp\u00e9 sous VBA, cependant il n\u2019aurait pas offert les m\u00eames gages de s\u00e9curit\u00e9 et la m\u00eame rapidit\u00e9 d\u2019ex\u00e9cution. Au passage, l\u2019on remarquera les similitudes de syntaxe des appels aux fonctions EXCEL entre DELPHI et VBA.<\/p>\n<pre class=\"lang:default decode:true  \">begin\r\n\r\n  CheminFichier:='E:\\Projets DELPHI\\Lecture BG\\';\r\n\r\n  \/\/Ouverture d'une nouvelle session Excel\r\n\r\n  SessionExcel:=createOleObject('Excel.Application');\r\n\r\n  \/\/Session visible\r\n\r\n  SessionExcel.Visible:=true;\r\n\r\n  \/\/D\u00e9finition des variables de session\r\n\r\n  ClasseursExcel:=SessionExcel.Workbooks;\r\n\r\n  \/\/Ouverture du classeur BG\r\n\r\n  NomFichier:=CheminFichier+'BG.xlsx';\r\n\r\n  ClasseurExcel:=ClasseursExcel.open(NomFichier);\r\n\r\n  \/\/Pr\u00e9paration de la feuille de r\u00e9capitulation des balances\r\n\r\n  \/\/---La feuille r\u00e9capitulant toutes les balances est la plus \u00e0 gauche du classeur BG\r\n\r\n  FeuilleR\u00e9cap:=ClasseurExcel.WorkSheets[1];\r\n\r\n  \/\/---Vide la r\u00e9cap pluriannuelle\r\n\r\n  \/\/------Compte le nombre de lignes occup\u00e9es...\r\n\r\n  l:=FeuilleR\u00e9cap.usedrange.rows.count;\r\n\r\n  \/\/------...et les efface\r\n\r\n  feuiller\u00e9cap.range['A'+inttostr(premlignebg)+':F'+inttostr(premlignebg+l)].rows.delete;\r\n\r\n  \/\/Lit les balances g\u00e9n\u00e9rales (en commen\u00e7ant par N) et les recopie dans l'onglet R\u00e9cap\r\n\r\n  \/\/---Compte le nombre d'onglets du classeur\r\n\r\n  j:=ClasseurExcel.WorkSheets.count;\r\n\r\n  \/\/---Lit les balances les unes apr\u00e8s les autres\r\n\r\n  if j&gt;1 then \/\/si nombre d'onglets &gt; \u00e0 un\r\n\r\n  begin\r\n\r\n    for i:=1 to j-1 do \/\/de la balance N \u00e0...\r\n\r\n    begin\r\n\r\n      FeuilleBG:=ClasseurExcel.WorkSheets[i+1];\r\n\r\n      l:=0;  \/\/Num\u00e9ro de ligne en cours de traitement de la BG\r\n\r\n      l2:=0; \/\/Num\u00e9ro de ligne en cours de traitement de la r\u00e9cap\r\n\r\n      repeat\r\n\r\n        inc(l);\r\n\r\n        \/\/Lecture du num\u00e9ro de compte\r\n\r\n        s1:=feuillebg.cells[premlignebg+l-1,1].value;\r\n\r\n        if s1&lt;&gt;'' then \/\/si le num\u00e9ro de compte est renseign\u00e9, alors lecture de la ligne\r\n\r\n        begin\r\n\r\n          \/\/Convertit le num\u00e9ro de compte sur 10 positions ; exemple 1013000 =&gt; 1013000000\r\n\r\n          s1:=convertitcompte10pos(s1);\r\n\r\n          if i=1 then \/\/balance N\r\n\r\n          begin\r\n\r\n            \/\/Num\u00e9ro de compte\r\n\r\n            feuiller\u00e9cap.cells[premlignebg+l-1,1].value:=s1;\r\n\r\n            \/\/Libell\u00e9 de compte\r\n\r\n            feuiller\u00e9cap.cells[premlignebg+l-1,2].value:=feuillebg.cells[premlignebg+l-1,2].value;\r\n\r\n            \/\/Solde du compte\r\n\r\n            feuiller\u00e9cap.cells[premlignebg+l-1,3+(i-1)].value:=feuillebg.cells[premlignebg+l-1,3].value;\r\n\r\n          end\r\n\r\n            else\r\n\r\n          begin \/\/balances N-1...\r\n\r\n            inc(l2);\r\n\r\n            \/\/Lecture du num\u00e9ro de compte de la r\u00e9cap\r\n\r\n            s2:=feuiller\u00e9cap.cells[premlignebg+l2-1,1].value;\r\n\r\n            if s1&lt;s2 then \/\/Compte inexistant en N =&gt; insertion d'une nouvelle ligne et du compte\r\n\r\n            begin\r\n\r\n              \/\/Insertion ligne\r\n\r\n              feuiller\u00e9cap.rows[premlignebg+l2-1].insert;\r\n\r\n              \/\/Num\u00e9ro de compte = s1\r\n\r\n              feuiller\u00e9cap.cells[premlignebg+l2-1,1].value:=s1;\r\n\r\n              \/\/Libell\u00e9 compte\r\n\r\n              feuiller\u00e9cap.cells[premlignebg+l2-1,2].value:=feuillebg.cells[premlignebg+l-1,2].value;\r\n\r\n            end;\r\n\r\n            \/\/Solde du compte\r\n\r\n            feuiller\u00e9cap.cells[premlignebg+l2-1,3+(i-1)].value:=feuillebg.cells[premlignebg+l-1,3].value;\r\n\r\n          end;\r\n\r\n        end;\r\n\r\n      until (s1='') or (l&gt;10000) or (l2&gt;10000);  \/\/si num\u00e9ro de compte vide ou nb ligne &gt; 10000 =&gt; on arr\u00eate\r\n\r\n    end;\r\n\r\n  end;\r\n\r\n  \/\/Sauvegarde et fermeture du classeur\r\n\r\n  ClasseurExcel.save;\r\n\r\n  ClasseurExcel.close;\r\n\r\n  \/\/Fermeture de la session Excel\r\n\r\n  SessionExcel.Quit;\r\n\r\n  SessionExcel:=unassigned;\r\n\r\nend;<\/pre>\n<hr size=\"1\" \/>\n<p style=\"text-align: justify;\"><a href=\"http:\/\/www.auditsi.eu\/wp-includes\/js\/tinymce\/plugins\/paste\/pasteword.htm?ver=327-1235#_ftnref1\">[1]<\/a> <em>Les langages interpr\u00e9t\u00e9s n\u00e9cessitent une compilation (c\u2019est-\u00e0-dire une conversion du code-source du programme en code-machine directement interpr\u00e9table par le microprocesseur) \u00e0 chaque utilisation du logiciel tandis que les langages compil\u00e9s op\u00e8rent cette compilation une seule fois. L\u2019op\u00e9ration de compilation, pr\u00e9alable \u00e0 l\u2019ex\u00e9cution des instructions, n\u00e9cessite du temps processeur et rend donc l\u2019ex\u00e9cution des programmes d\u00e9velopp\u00e9s en langage interpr\u00e9t\u00e9 moins rapide que ceux r\u00e9dig\u00e9s en langage compil\u00e9.<\/em><\/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=\"DELPHI%2C%20EXCEL%20%2F%20Les%20langages%20de%20programmation%20compil%C3%A9s%20alli%C3%A9s%20%C3%A0%20EXCEL%20%3A%20outils%20puissants%20de%20traitement%20de%20donn%C3%A9es%20%C3%A0%20disposition%20de%20la%20profession%20comptable\";<\/script><script type=\"text\/javascript\" src=\"https:\/\/static.hupso.com\/share\/js\/counters.js\"><\/script><!-- Hupso Share Buttons --><\/div>","protected":false},"excerpt":{"rendered":"<p>Dans de pr\u00e9c\u00e9dents articles, j\u2019\u00e9voquais l\u2019usage du langage VBA et de logiciels tels qu\u2019EXCEL ou ACCESS dans nos missions d\u2019audit en vue de faciliter la mise en forme et l\u2019analyse de donn\u00e9es. Cependant, d\u2019autres langages de programmation structur\u00e9s, tels DELPHI (d\u00e9clinaison orient\u00e9e objet du langage Pascal) ou le C++ (successeur du C \u00e9galement orient\u00e9 objet) &#8230;<\/p>\n<p><a href=\"https:\/\/www.auditsi.eu\/?p=543\" class=\"more-link\">Continue reading &lsquo;DELPHI, EXCEL \/ Les langages de programmation compil\u00e9s alli\u00e9s \u00e0 EXCEL : outils puissants de traitement de donn\u00e9es \u00e0 disposition de la profession comptable&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=\"DELPHI%2C%20EXCEL%20%2F%20Les%20langages%20de%20programmation%20compil%C3%A9s%20alli%C3%A9s%20%C3%A0%20EXCEL%20%3A%20outils%20puissants%20de%20traitement%20de%20donn%C3%A9es%20%C3%A0%20disposition%20de%20la%20profession%20comptable\";<\/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":[39,40,218,6,470],"tags":[166,281,173,268,273,249,278,277,265,255,267,1642,17,254,1633,52,271,270,266,272,275,276,258,274,259,263,269,264,280,222,253,260,262,261,1641,257,256],"class_list":["post-543","post","type-post","status-publish","format-standard","hentry","category-cas-pratiques","category-controle-des-comptes","category-delphi","category-mission-du-commissaire-aux-comptes","category-techniques-daudit","tag-analyse-de-donnees","tag-audit-des-comptes","tag-balance-generale","tag-begin-end","tag-boucles","tag-cells","tag-commissaire-aux-comptes","tag-compilation","tag-count","tag-createoleobject","tag-delete","tag-delphi","tag-demarche-daudit","tag-edi","tag-excel","tag-exploitation-des-donnees","tag-for-to","tag-if-then-else","tag-insert","tag-inttostr","tag-langage-compile","tag-langage-interprete","tag-open","tag-programmation","tag-quit","tag-range","tag-repeat-until","tag-rows","tag-securite-des-traitements","tag-tests-conditionnels","tag-turbopascal","tag-unassigned","tag-usedrange","tag-value","tag-vba","tag-visible","tag-worksheets"],"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\/543","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=543"}],"version-history":[{"count":2,"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=\/wp\/v2\/posts\/543\/revisions"}],"predecessor-version":[{"id":5769,"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=\/wp\/v2\/posts\/543\/revisions\/5769"}],"wp:attachment":[{"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=543"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=543"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=543"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}