Dans le cadre de mon projet de développement d’un logiciel d’audit des comptes consolidés, je convertis en DELPHI des programmes que j’avais initialement rédigés en VBA et notamment le programme de calcul des pourcentages d’intérêt.
Cette opération de conversion se pratique de la même manière que la traduction d’un texte d’une langue à l’autre : elle nécessite la connaissance de la grammaire (la syntaxe) et du vocabulaire (les mots clefs). En matière informatique, la conversion nécessite la maîtrise approfondie des deux langages. En effet, si de prime abord la ressemblance de ces deux langages est frappante, des subtilités, véritables chausse-trapes, compliquent quelque peu la donne.
Je vais prendre pour exemple la procédure de calcul de la matrice inverse sous EXCEL extraite du programme de calcul des pourcentages d’intérêt. Cette procédure rédigée en VBA (cf extrait n°1) est convertie sous DELPHI (extrait n°2).
Extrait n°1 : procédure « AfficheMatrice » rédigée en VBA :
Sub AfficheMatrice() Dim détenteur As Integer Dim détenu As Integer classeurAppli.Sheets.Add after:=Worksheets(Worksheets.Count) With classeurAppli.Sheets(classeurAppli.Sheets.Count) .Cells(1, 1).Value = "Matrice I-M" For détenteur = 1 To Nbentités For détenu = 1 To Nbentités If détenteur = 1 Then .Cells(1, détenu + 1).Value = Entités(détenu) .Cells(3 + Nbentités, détenu + 1).Value = Entités(détenu) End If If détenu = 1 Then .Cells(détenteur + 1, 1).Value = Entités(détenteur) .Cells(détenteur + Nbentités + 3, 1).Value = Entités(détenteur) End If .Cells(détenteur + 1, détenu + 1).Value = MatriceImoinsDétentions(détenteur, détenu) Next détenu Next détenteur .Cells(3 + Nbentités, 1).Value = "Matrice (I-M)^-1" .Range("B" & 4 + Nbentités & ":" & RéfColonne(Nbentités) & Nbentités * 2 + 3).FormulaArray = "=minverse(B2:" & RéfColonne(Nbentités) & Nbentités + 1 & ")" 'FormulaArray équivaut à Ctrl+Maj+Entrée For détenu = 2 To Nbentités PourcentagesIntérêt(détenu) = Cells(4 + Nbentités, détenu + 1) Next détenu End With End Sub
Extrait n°2 : procédure « AfficheMatrice » rédigée sous DELPHI :
procedure AfficheMatrice; var detenteur : Integer; detenu : Integer; begin cellule:=classeurexcelresultat.sheets[feuilleresultat]; cellule.Cells[1, 1].Value := 'Matrice I-M'; For detenteur := 1 To Nbentites do begin For detenu := 1 To Nbentites do begin If detenteur = 1 Then begin cellule.Cells[1, detenu + 1].Value := Entites[detenu-1]; cellule.Cells[3 + Nbentites, detenu + 1].Value := Entites[detenu-1]; End; If detenu = 1 Then begin cellule.Cells[detenteur + 1, 1].Value := Entites[detenteur-1]; cellule.Cells[detenteur + Nbentites + 3, 1].Value := Entites[detenteur-1]; End; cellule.Cells[detenteur + 1, detenu + 1].Value := MatriceImoinsDetentions[detenteur-1, detenu-1]; end; end; cellule.Cells[3 + Nbentites, 1].Value := 'Matrice (I-M)^-1'; cellule.Range['B' + inttostr(4 + Nbentites) + ':' + RefColonne(Nbentites) + inttostr(Nbentites * 2 + 3)].FormulaArray := '=inversemat(B2:' + RefColonne(Nbentites) + inttostr(Nbentites + 1) + ')'; //FormulaArray équivaut à Ctrl+Maj+Entrée For detenu := 2 To Nbentites do begin PourcentagesInteret[detenu-2] := cellule.Cells[4 + Nbentites, detenu + 1]; end; End;
Au premier coup d’œil, on remarque la grande similitude des deux codes :
- Même architecture (langages structurés),
- Mots clefs semblables (boucles For To Next pour l’un, For To End pour l’autre…),
- Interactions avec EXCEL à l’aide de mots clefs identiques : .Cells, . Range…
Hormis quelques principes d’écriture différents (affectation d’une valeur à une variable à l’aide de = en VBA, := sous DELPHI, l’usage des parenthèses dans les variables tableaux en VBA et des crochets sous DELPHI…), l’on peut noter quelques subtilités à connaître pour le programmeur qui s’aventure dans la transposition de programmes et notamment :
- L’indice inférieur des variables tableaux est zéro en VBA alors qu’il est de un sous DELPHI (le lecteur attentif aura remarqué dans le code que la restitution de données contenues dans les variables tableaux en VBA est rédigée ainsi : Entités(détenu) alors qu’elle est retranscrite ainsi sous DELPHI : Entites[detenu-1]. L’instruction OPTION BASE 1 permet d’établir l’indice inférieur à un en VBA (toutefois cette option n’a pas été utilisée à l’origine).
- En VBA, les formules EXCEL sont rédigées à l’aide des instructions en version anglaise alors que sous DELPHI, on recourt au français, il en est ainsi par exemple pour le calcul de la matrice inverse :
– Code VBA : “=minverse(B2:” & RéfColonne(Nbentités) & Nbentités + 1 & “)”
– Code DELPHI : ‘=inversemat(B2:’ + RefColonne(Nbentites) + inttostr(Nbentites + 1) + ‘)’;
Il en est de même pour les formats de nombre sous EXCEL (la décimale notée par le point en VBA et la virgule sous DELPHI).
Pour résumer, la conversion de programmes d’un langage à l’autre ne pose pas de difficultés insurmontable mais nécessite rigueur et concentration.
Derniers articles parBenoît RIVIERE (voir tous)
- Projet IXP (v1.21beta) : nouvelle version en ligne - mardi 7 janvier 2025
- Excel : conserver les zéros non significatifs à gauche - dimanche 5 janvier 2025
- Excellente année 2025 ! - mercredi 1 janvier 2025
- Projet IXP (v1.21beta) : contrôles de cohérences et gestion MULTIFEC - lundi 30 décembre 2024
- Joyeuses fêtes de fin d’année ! - mardi 24 décembre 2024