Dans de précédents articles, j’évoquais l’usage du langage VBA et de logiciels tels qu’EXCEL ou ACCESS dans nos missions d’audit en vue de faciliter la mise en forme et l’analyse de données. Cependant, d’autres langages de programmation structurés, tels DELPHI (déclinaison orientée objet du langage Pascal) ou le C++ (successeur du C également orienté objet) existent. A la différence du VBA qui est un langage interprété, DELPHI et C++ sont des langages compilés[1].
Indéniablement, la création d’applications, mettant en œuvre des formules pour lesquelles l’inaltérabilité et/ou la confidentialité doivent rester de mise (par exemple, calculatrices ou outils de calcul de primes, de RFA, d’impôts… à destination des clients et mettant en avant les compétences du cabinet), requière l’usage de langages de programmation compilés tels que ceux évoqués plus avant. En effet, l’utilisateur n’a pas accès au code-source du programme (contrairement aux développements en VBA) mais seulement à son exécutable (*.exe, *.com), il ne peut donc pas en modifier le fonctionnement (sauf à se lancer dans des opérations de décompilation fort ardues).
Les langages compilés assurent, de la même manière 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é de prendre le contrôle d’EXCEL, d’ouvrir des feuilles de calcul et de les modifier avec quelques lignes de codes. La liaison opérée entre les processus de traitements programmés et des tableurs ou SGBDR étendent de manière infinie le champ du possible en matière de traitement de données. C’est ce que je vous propose de découvrir avec l’exemple qui suit.
Pour résumer, les langages compilés offrent les avantages suivants par rapport aux langages compilés : rapidité d’exécution, sécurité et confidentialité des processus de traitement.
L’exemple ci-après reprend un extrait du code-source du logiciel d’audit des comptes sur lequel je travaille : cet extrait récupère les balances générales enregistrées dans différents onglets d’un classeur EXCEL (classeur intitulé ‘BG.xlsx’) et les reprend en comparatif N/N-1/N-2… Cet exemple montre comment à l’aide d’un langage évolué comme DELPHI, il est possible de traiter des données comptables ou financières issues de feuilles de calcul EXCEL. Ce code aurait pu être développé sous VBA, cependant il n’aurait pas offert les mêmes gages de sécurité et la même rapidité d’exécution. Au passage, l’on remarquera les similitudes de syntaxe des appels aux fonctions EXCEL entre DELPHI et VBA.
begin CheminFichier:='E:\Projets DELPHI\Lecture BG\'; //Ouverture d'une nouvelle session Excel SessionExcel:=createOleObject('Excel.Application'); //Session visible SessionExcel.Visible:=true; //Définition des variables de session ClasseursExcel:=SessionExcel.Workbooks; //Ouverture du classeur BG NomFichier:=CheminFichier+'BG.xlsx'; ClasseurExcel:=ClasseursExcel.open(NomFichier); //Préparation de la feuille de récapitulation des balances //---La feuille récapitulant toutes les balances est la plus à gauche du classeur BG FeuilleRécap:=ClasseurExcel.WorkSheets[1]; //---Vide la récap pluriannuelle //------Compte le nombre de lignes occupées... l:=FeuilleRécap.usedrange.rows.count; //------...et les efface feuillerécap.range['A'+inttostr(premlignebg)+':F'+inttostr(premlignebg+l)].rows.delete; //Lit les balances générales (en commençant par N) et les recopie dans l'onglet Récap //---Compte le nombre d'onglets du classeur j:=ClasseurExcel.WorkSheets.count; //---Lit les balances les unes après les autres if j>1 then //si nombre d'onglets > à un begin for i:=1 to j-1 do //de la balance N à... begin FeuilleBG:=ClasseurExcel.WorkSheets[i+1]; l:=0; //Numéro de ligne en cours de traitement de la BG l2:=0; //Numéro de ligne en cours de traitement de la récap repeat inc(l); //Lecture du numéro de compte s1:=feuillebg.cells[premlignebg+l-1,1].value; if s1<>'' then //si le numéro de compte est renseigné, alors lecture de la ligne begin //Convertit le numéro de compte sur 10 positions ; exemple 1013000 => 1013000000 s1:=convertitcompte10pos(s1); if i=1 then //balance N begin //Numéro de compte feuillerécap.cells[premlignebg+l-1,1].value:=s1; //Libellé de compte feuillerécap.cells[premlignebg+l-1,2].value:=feuillebg.cells[premlignebg+l-1,2].value; //Solde du compte feuillerécap.cells[premlignebg+l-1,3+(i-1)].value:=feuillebg.cells[premlignebg+l-1,3].value; end else begin //balances N-1... inc(l2); //Lecture du numéro de compte de la récap s2:=feuillerécap.cells[premlignebg+l2-1,1].value; if s1<s2 then //Compte inexistant en N => insertion d'une nouvelle ligne et du compte begin //Insertion ligne feuillerécap.rows[premlignebg+l2-1].insert; //Numéro de compte = s1 feuillerécap.cells[premlignebg+l2-1,1].value:=s1; //Libellé compte feuillerécap.cells[premlignebg+l2-1,2].value:=feuillebg.cells[premlignebg+l-1,2].value; end; //Solde du compte feuillerécap.cells[premlignebg+l2-1,3+(i-1)].value:=feuillebg.cells[premlignebg+l-1,3].value; end; end; until (s1='') or (l>10000) or (l2>10000); //si numéro de compte vide ou nb ligne > 10000 => on arrête end; end; //Sauvegarde et fermeture du classeur ClasseurExcel.save; ClasseurExcel.close; //Fermeture de la session Excel SessionExcel.Quit; SessionExcel:=unassigned; end;
[1] Les langages interprétés nécessitent une compilation (c’est-à-dire une conversion du code-source du programme en code-machine directement interprétable par le microprocesseur) à chaque utilisation du logiciel tandis que les langages compilés opèrent cette compilation une seule fois. L’opération de compilation, préalable à l’exécution des instructions, nécessite du temps processeur et rend donc l’exécution des programmes développés en langage interprété moins rapide que ceux rédigés en langage compilé.
Derniers articles parBenoît RIVIERE (voir tous)
- Les données de la facturation électronique - mercredi 9 octobre 2024
- VBA/SQL vs Power Query : deux solutions complémentaires - mercredi 2 octobre 2024
- L’IA dans les cabinets comptables : cas concrets - jeudi 26 septembre 2024
- EXCEL : insérer une image ou un logo dans une cellule - lundi 16 septembre 2024
- Lancer l’exécution d’un script Python à partir d’une macro VBA - lundi 9 septembre 2024
BON TRAVAIL
Excellent travail, je travaille dans une banque, je suis programmeuse, j’ai trouvé votre programme très intéressant. Je suis très motivée à percés dans mon projet.