You are on page 1of 5

Synthse // Rflexion // Une entreprise/un homme // Rfrences

AUDIT

Le contrle des comptes laide du langage VBA dExcel


Laudit de donnes peut tre men laide de diffrents outils durant toutes les tapes de la mission du commissaire aux comptes : avec des logiciels spcialiss (Idea, ACL), laide de requtes SQL 1 ou encore avec des tableurs (Excel, Calc). Cest souvent cette dernire catgorie doutils qui a la prfrence des auditeurs. Ce sont en effet les outils les plus maniables et les plus flexibles qui soient. Gnralement, lauditeur met en uvre des fonctionnalits plus ou moins labores de son tableur: filtres, tris, formats conditionnels voire tableaux croiss dynamiques, liens intertables (requtes SQL, recherchev ) Une autre possibilit offerte par les tableurs modernes est toutefois frquemment nglige par mconnaissance : le VBA.

Par Benot-Ren RIVIRE Expert-comptable, COGEDIAC & Associs S.A. Caen

Pourtant le VBA (pour Visual Basic for Application) est un puissant langage de programmation qui accompagne toutes les applications de la suite Office de Microsoft. Ce langage de programmation tend linfini les capacits de traitement de linformation et danalyse de donnes de ces logiciels et notamment dExcel. Il permet dautomatiser des traitements comme lanalyse de donnes et de les reproduire de manire identique voire de les systmatiser sur lensemble des dossiers. Cet article sefforcera de dmontrer lintrt que la profession peut tirer de cet outil de dveloppement au travers dun exemple simple mais efficace.

Le VBA, un langage de programmation la porte de tous


Le langage VBA, bas sur le Basic 2, est assez facile prendre en main. Il tend les capacits de traitement des logiciels htes et assure principalement deux fonctions : ajout de nouvelles fonctions utilisables directement dans les formules des feuilles de calcul Excel 3, cration dapplications laide de procdures. Ce sont plus spcifiquement les procdures qui font lobjet de cet article. La prise en main du module Visual Basic ncessite : de dcouvrir lenvironnement de dveloppement VBA : ce module, semblable sur lensemble des applications de la suite Office, assure ldition des programmes VBA, de matriser les mots-clefs et la syntaxe du langage : ce langage sassimile trs rapidement, tant les termes (quoique en anglais) sont peu nombreux, de comprendre la logique de programmation. La littrature spcialise est trs fournie et de nombreux sites anims par des passionns forment une riche mine dinformation sur ce sujet 4. Cet article se veut une initiation et, ce titre, prsente une dmarche de mise en uvre concrte illustre dune application danalyse de donnes. A lissue, le lecteur matrisera les principales syntaxes de programmation du VBA (boucles, tests) et saura effectuer les principaux types de manipulations proposs par Excel : ouvrir un nouvel onglet dans un classeur, le renommer,

manipuler des cellules : les lire, y crire des donnes y compris des formules de

1. Cf. ce sujet larticle intitul Contrle des comptes par le commissaire aux comptes laide de lanalyse de donnes, Revue franaise de comptabilit n 433 de juin 2010 et http://www.auditsi.eu/?p=400. Cet article se proposait de mettre en avant lintrt du langage de requtes SQL dans lanalyse de donnes tandis que le prsent article tente de dmontrer lintrt du VBA, langage plus gnraliste et plus puissant encore. 2. Extrait de lencyclopdie Wikipedia (URL: http://fr.wikipedia.org/wiki/BASIC) : En programmation, Basic est un acronyme pour Beginners All-purpose Symbolic Instruction Code, qui dsigne une famille de langages de programmations de haut niveau. Le Basic a t conu la base en 1963 [] pour permettre aux tudiants qui ne travaillaient pas dans des filires scientifiques dutiliser les ordinateurs. En effet, lpoque, lutilisation des ordinateurs ncessitait lemploi dun langage de programmation rput rserv aux seuls spcialistes, en gnral un langage dassemblage ou Fortran. Le Basic est indissociable de lapparition, dans les annes 1980, de la micro-informatique grand public. En effet, la plupart des microordinateurs vendus durant cette priode taient fournis avec un interprte Basic []. 3. Le tutoriel Excel : Crer une fonction en VBA (http://www.auditsi.eu/?p=513) prsente la dmarche suivre pour crer une fonction Excel. 4. Le lecteur se rfrera aux sites internet http://vb.developpez.com/ et http://www.vbfrance.com/ pour plus dinformation ainsi quaux ouvrages VBA Excel 2007 - Matrisez la programmation sous Excel (Editions ENI) et VBA pour Office 2007 (Micro-Application) afin dapprofondir le sujet.

Rsum de larticle
Laudit de donnes prend une part de plus en plus importante dans les travaux daudit du commissaire aux comptes. Pour laider remplir cette tche, le commissaire aux comptes dispose dune palette complte doutils. Lun de ces outils est le VBA (Visual Basic for Application). Il est souvent ignor par la profession alors quil est prsent sur tous nos ordinateurs. Facile matriser et mettre en uvre, il nattend quune seule chose : dmontrer aux professionnels que nous sommes les formidables capacits de traitement de donnes quil est en mesure dapporter Excel.

Revue Franaise de Comptabilit // N445 Juillet-Aot 2011 //

43

Synthse // Rflexion // Une entreprise/un homme // Rfrences


AUDIT
Figure 1 : Etat du stock et bouton de lancement des tests (onglet STOCKS) ventaire et crer un nouvel onglet (intitul Rsultat) 6. Lapplication gnre un second onglet nomm RESULTAT qui comprend le rsultat des tests. Les calculs ne prennent que quelques instants.

Tests effectus par le programme


Lapplication effectue les contrles suivants : analyse de la cohrence des quantits (quantits ngatives) et des prix unitaires (PU ngatifs ou nul avec quantit renseigne), contrle du total de la ligne (quantit x PU) En fonction des carts relevs, le programme colorise les anomalies en rouge (PU ngatifs par exemple) et attire lattention de lauditeur sur de potentielles anomalies (PU nuls) en colorisant certaines cellules en jaune.

Rsultat obtenu
calcul, les formater (couleur, type numrique), activer les filtres automatiques. sont frquemment composs de milliers de lignes. Une revue manuelle des tats papier ou informatique savre rapidement fastidieuse et repose obligatoirement sur des sondages. Lanalyse automatise de donnes saffranchit de ces contraintes et permet mme des tests exhaustifs. Lexemple propos prsente un tat de stock sur Excel (onglet STOCK). Cet tat comprend une rfrence, une dsignation, une quantit, un prix unitaire et un total. Lutilisateur colle ltat dinventaire auditer dans cet onglet puis clique sur le bouton Lancer le test (figure 1). Le code source VBA va raliser une srie de tests automatiquement sur ltat dinLe rsultat des tests (cf. figure 2) permet lauditeur de se focaliser, dans un premier temps, sur les anomalies relles et potentielles releves par le programme

Un exemple pour dmontrer lintrt du VBA pour le commissaire aux comptes


Pour dmontrer lintrt du VBA pour le commissaire aux comptes, rien ne vaut un exemple concret : laudit des tats de stocks 5. La difficult laquelle se trouve souvent confront lauditeur est le volume de donnes analyser en des temps rduits : les tats dinventaire

5. Diffrentes manires danalyser la cohrence des stocks coexistent notamment laide de requtes SQL, titre de comparaison cf. larticle http://www.auditsi.eu/?p=560. 6. Un autre exemple de fonction et de procdure en VBA de retraitement de donnes ( Audit de donnes et VBA : automatisation du formatage des donnes numriques ) est consultable ici : http://www.auditsi.eu/?p=520.

Figure 2 : Rsultat des tests (onglet RESULTAT)

44

// N445 Juillet-Aot 2011 // Revue Franaise de Comptabilit

AUDIT
(celles-ci tant mises en vidence laide de couleurs). Pour ce faire, lauditeur a toute latitude pour filtrer les donnes par couleur de cellule et/ou en fonction des donnes chiffres. La lisibilit du code-source est amliore par : lajout de commentaires (les commentaires sont prcds dune apostrophe ; ce signe signale linterprteur VBA de ne pas excuter la ligne) expliquant le fonctionnement du programme ; le texte du code est dcal en marge en fonction de la progression dans les boucles et procdures. Cette mise en forme est purement conventionnelle ; le fait de ne pas la respecter na aucune incidence sur lexcution du code mais rduit sensiblement sa comprhension par un programmeur. Le tableau 1 fournit des extraits comments du code-source du programme. Des conseils complmentaires et quelques sources derreurs communes sont rsums dans lencadr 2.

Explication pas pas du code-source


Le code-source du programme prsent ci-avant dans larticle est dtaill dans les grandes lignes dans la prsente partie 7. Il est compos de seulement 140 lignes.

7. Le code-source reprsente un volume trop important pour tre reproduit en intgralit dans la revue ; le lecteur se reportera sur le site www.auditsi.eu afin den tlcharger lintgralit.

Tableau 1 : Extraits comments du code-source de lapplication


Code VBA Commentaires

Option Explicit Sub TestStocks() Cette procdure teste la cohrence dun tat de stock Option Explicit Cette clause est facultative; elle oblige le programmeur dclarer toutes ses variables => en cas derreur de saisie sur le nom dune variable, le programmeur dtectera plus facilement lerreur Sub NomProcdure Dlimite une procdure; la procdure TestStocks() est composes dun ensemble dinstructions [] cohrentes qui effectuent des actions dtermines. End Sub Indique linterprteur VBA de ne pas excuter la ligne (ce qui permet de documenter le code source avec des commentaires explicatifs). Dim db, fin As Variant 1re et dernire lignes utilises Dim dbanalyse As Boolean tant que FALSE : lanalyse nest pas commence Dim variable as type Dclaration des variables utilisateur. Les variables permettent de stocker, le temps de lexcution du programme, des donnes de toute nature rsultant de calculs, de saisie, de lecture de fichiers... Type de variable: Boolean: boolen, type binaire (Vrai ou Faux) Single: rel (maxi: 3,402823E38) Double: rel (maxi: 1,79769313486232E308) Integer: nombre entier (jusqu 32767) Long: nombre entier (jusqu 2 147 483647) String: chane de caractres Variant: reprsente nimporte quel type de variable Sheets(1).Select la feuille n1 (la plus gauche) contient le dtail du stock ActiveSheet.UsedRange.Select db = Selection.Cells(1, 1).Row fin = Selection.Cells.Rows.Count + db - 1 Cre une FT additionnelle qui contiendra le rsultat de lanalyse Sheets.Add FT_Rsultat = RESULTAT & Hour(Now) & - & Minute(Now) & - & Second(Now) ActiveSheet.Name = FT_Rsultat Sheets(FT_Rsultat).Move After:=Sheets(2) Sheets (index ou nom).select Indique sur quel onglet du classeur travailler; longlet est prcis laide dun index (indiquant sa position, 1 tant le plus gauche) ou de son nom. Par exemple, Sheets(1) ou Sheets(STOCK) reprsentent ici la mme feuille de travail.

Sheets.add Now Hour(), Minute(), Second() Activesheet. Activesheet.Name= .Move After:=Sheets(2) UsedRange. ActiveSheet.UsedRange.Select Variable =

Cre une nouvelle feuille de travail (onglet) Cette fonction renvoie la date et lheure du systme; correspond la fonction MAINTENANT() dExcel. Ces fonctions renvoient respectivement lheure, les minutes et les secondes contenues dans la date/heure renseigne. Reprsente la feuille de travail slectionne Change le nom de la feuille active (ici, la feuille prend le nom RESULTAT ainsi que lheure laquelle elle a t gnre. Dplace la feuille mentionne aprs la feuille 2. Reprsente la plage de cellules utilise par une feuille de travail Slectionne la plage de cellules utilises dans la feuille active Attribue une valeur une variable, par exemple: a = 1
Revue Franaise de Comptabilit // N445 Juillet-Aot 2011 //

45

Synthse // Rflexion // Une entreprise/un homme // Rfrences


AUDIT
Code VBA db = Selection.Cells(1, 1).Row Commentaires Cells(1,1) reprsente la cellule ligne 1, colonne 1 de la slection; Row fournit le numro de la range (ligne), Column celui de la colonne Par exemple: si la slection = $B12:$H25, Cells(1,1) est situe en $B$12, Selection.Cells(1,1). Row renvoie 12 Ici les variables db et fin reprsentent les premires et dernires utilises par le tableau Excel

Titre feuille de calcul ligneencours = ligneencours + 1 With Range(A & ligneencours) .Value = TESTS SUR LE STOCK .Font.Size = 18 .Font.Bold = True End With ligneencours = ligneencours + 1 With End With

Range (rf cellules) .Value .Formula .FormulaLocal .Value = TESTS SUR LE STOCK

.Interior.Color = vbYellow .HorizontalAlignment = xlCenter .Font.Size = 18 .Font.Bold = True .Font.Italic = True .NumberFormat = # ##0.00 Reprise des info de ltat de stock ligneencours = ligneencours + 1 For j = 1 To 5 Sheets(FT_Rsultat).Cells(ligneencours, j).Value = Sheets(1).Cells(i, j).Value If j > 2 Then Sheets(FT_Rsultat).Cells(ligneencours, j).NumberFormat = # ##0.00 Next j For var = db To fin Next var Les instructions For To font prendre successivement les valeurs de db fin la variable var tout en excutant les instructions comprises jusque linstruction Next. Lorsque Next est atteinte, linterprteur VBA retourne sur linstruction For, incrmente la variable var de 1 et recommence lexcution des instructions jusqu ce que var soit gal fin. La suite dinstructions forme par For To Next sappelle une boucle. For i = 1 to 5 Next: excute les instructions cinq fois Sheets(FT_Rsultat).Cells(ligneencours, La partie situe gauche du signe gal dsigne une cellule (Cells en anglais) de la feuille (Sheets) j).Value = Sheets(1).Cells(i, j).Value codifie FT_Rsultat qui prendra la valeur (=) dune cellule de la feuille 1. If Then ElseIf End If Test conditionnel: Si condition1 alors action1 sinon si condition2 alors action2 If a<0 then dette=-a else creance=a: si a est ngatif alors la variable dette = -a sinon crance=a Analyse des totaux => anomalie si < 0 ou si qt * PU <> totaux If (Sheets(1).Range(E & i).Value < 0) Or (Round Sheets(1).Range(C & i).Value * Sheets(1).Range(D & i).Value, 2) <> Round Sheets(1).Range(E & i).Value, 2) Then Sheets(FT_Rsultat).Range(E & ligneencours).Interior.Color = vbRed Sheets(FT_Rsultat).Range(F & ligneencours).Value = Sheets(1).Range(C & i).Value * Sheets(1).Range(D & i).Value Sheets(FT_Rsultat).Range(G & ligneencours).Value = Sheets(FT_Rsultat).Range(F & ligneencours).Value - Sheets(1).Range(E & i).Value Sheets(FT_Rsultat).Range(F & ligneencours & : & G & ligneencours).NumberFormat = # ##0.00 With Sheets(FT_Rsultat).Range(J & ligneencours) .Value = X .HorizontalAlignment = xlCenter End With End If Analyse de lextrait du programme ci-dessus Si le total est infrieur zro ou si qt x PU diffrent du total: Le total est color en rouge (colonne E), Le total calcul est prsent en colonne F, Lcart de totalisation est prsent en colonne G, Une croix est mentionne en colonne J (colonne des anomalies sur totalisation). Filtres automatiques Sheets(FT_Rsultat).Range(A & lignefiltre).AutoFilter .AutoFilter Applique le filtre automatique la plage de cellules slectionne

Augmente la valeur de la variable ligneencours de 1 Permet de travailler sur un objet tout en vitant de devoir le rpter chaque ligne de programme. Ainsi With Range signale que les lignes de code suivantes qui commencent par un point . font rfrence la cellule rfrence par Range (lobjet). Le code source suivant, bien que plus lourd, est quivalent: Range(A & ligneencours).Value = TESTS SUR LE STOCK Range(A & ligneencours).Font.Size = 18 Range(A & ligneencours).Font.Bold = True Dsigne une plage de cellules Renvoie : la valeur dune cellule La formule Excel (en anglais) La formule Excel (dans la langue Excel) Formula et FomulaLocal permettent de lire les formules de calcul dun tableau mais galement de les modifier. La cellule dsigne comprend le texte dsign entre guillemets. En Basic, les guillemets entourent systmatiquement des caractres non numriques. Colore la cellule dsigne en jaune Centre le contenu des cellules dsignes (horizontalement) Met les caractres: en taille 18 en caractres gras en italique (= False pour enlever litalique) Formate les nombre avec deux dcimales et sparateurs de milliers

46

// N445 Juillet-Aot 2011 // Revue Franaise de Comptabilit

AUDIT Attacher le code-source un bouton


Pour faciliter lexcution du programme, il est possible de lassocier un bouton : Encadr 2 : Ecueils viter et conseils de programmeur Rcursivit des procdures et fonctions : la rcursivit est la dmarche qui consiste pour une procdure ou fonction sappeler elle-mme. Dans ce cas, si le programmeur na pas t suffisamment attentif, le programme risque de tourner en rond sans fin jusqu ce que le programme sarrte inopinment pour dpassement de pile. Boucles sans fin (do loop while et for to next) : une boucle sans fin est une boucle qui de par la dfinition des critres de sortie dfinis par le codeur ne peut jamais sarrter. Lissue des boucles sans fin est gnralement la mme que celle dune rcursivit mal gre. Erreur dans les tests conditionnels if then elseif end if : les conditions numres par le programmeur doivent tre rdiges avec soin. Il est en effet frquent que des conditions mal rdiges aient pour consquence des rsultats non conformes. Lusage de la clause Option explicit est vivement recommand en dbut de programme. En effet, elle oblige le programme dclarer lensemble de ses variables. Ainsi toute erreur saisie dans les variables lui sera instantanment signale. Documentation du code : il est conseill de commenter les lignes de code afin den comprendre le sens plusieurs mois aprs sans pour autant se replonger dans la lecture du code

Abstract
Data analysis is becoming increasingly important in audits carried out by statutor y auditors. An extensive range of tools exist to support auditors in this task including VBA (Visual Basic for Application). Although often ignored by the profession, VBA is present in all our computers and is simple to understand and use. Ready and waiting therefore to demonstrate to professionals the incredible data management capacities it can bring to Excel.

Pour ce faire, dessiner un bouton (par exemple avec une des formes proposes dans le menu Insertion). Puis, faire un clic droit dessus et slectionner Affecter une macro, choisir la macro adquate et le tour est jou !

Pour conclure sur le sujet


Aprs ce tour dhorizon, lauditeur connat maintenant les bases du VBA. Il na plus qu se lapproprier, lutiliser au quotidien et en faire un outil daudit pour que VBA deviennent VB for Audit. Lauditeur aura compris que les traitements offerts par le VBA sont infinis, rapides et scurisent les calculs dans la mesure o ceux-ci ne dpendent pas des formules de calcul de la feuille de calcul mais du programme. Donc plus de risques lis des formules effaces ou non dupliques par lutilisateur. Encadr 1 : Et les autres langages ? Le VBA nest pas le seul langage disponible. Dautres langages plus gnralistes existent : Delphi/TurboPascal, C++, Visual Basic Toutefois, le VBA est un langage attach une application donne (Excel, Access) et de ce fait est plus ais mettre en uvre mme sil est tout fait possible dinteragir sur des feuilles Excel avec des langages tels que Delphi. Cependant, le VBA prsente linconvnient de ne pas tre compil, cest--dire que le programme est modifiable par lutilisateur et est moins rapide dexcution quun programme compos dans un langage compil (lopration de compilation rendant toute modification par lutilisateur impossible) 8.

Bibliographie et change avec le lecteur


Mmoire Extraction et exploitation des donnes du systme dinformation dans le cadre du commissariat aux comptes : mthodologie & outils, mmoire dexpertise comptable de Benot-Ren Rivire, tlchargeable sur le site bibliotique et sur le site internet : www.auditsi.eu. Sites internet http://vb.developpez.com/ et http:// www.vbfrance.com/. Ouvrages VBA Excel 2007 - Matrisez la programmation sous Excel (Editions ENI) et VBA pour Office 2007 (Micro-Application).

8. Larticle Les langages de programmation compils allis Excel : outils puissants de traitement de donnes disposition de la profession comptable accessible sur http:// www.auditsi.eu/?p=543 approfondit ce sujet.

Blog ddi laudit et aux systmes dinformation www.auditsi.eu. Espaces dchanges ouverts tous sur www. pacioli.fr : Audit & Systmes dInformation et Le Cercle des Dveloppeurs.

Code de dontologie
Le Code de dontologie des professionnels de lexpertise comptable, adopt par dcret du 27 septembre 2007, fixe dans le droit positif les devoirs et obligations qui fondent lexercice de la profession. Il aborde ainsi successivement : les devoirs gnraux, les devoirs envers les clients ou adhrents, les devoirs de confraternit, les devoirs envers lOrdre. Ce texte caractre obligatoire sapplique tous les membres de lOrdre, quils soient personnes physiques ou morales.

http://boutique.experts-comptables.com

10,00

Revue Franaise de Comptabilit // N445 Juillet-Aot 2011 //

47

You might also like