Professional Documents
Culture Documents
AUDIT
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.
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.
43
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
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.
44
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.
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.
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
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
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 !
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
47