Automatiser l’élaboration du tableau des flux de trésorerie

Le tableau de flux de trésorerie (ou TFT) est un document comptable qui assure le lien entre le résultat comptable d’une entreprise (ou le résultat consolidé d’un groupe) et la variation de trésorerie de l’exercice. Cette analyse est très utile pour comprendre comment une entreprise ou un groupe finance ses activités.

Le TFT scinde l’analyse des flux de trésorerie en fonction de leur nature : activité (résultat, retraitement des opérations sans incidence sur la trésorerie, BFR), investissement (acquisitions et cessions d’immobilisations) et financement (emprunts hors découverts, augmentation ou réduction de capital, versement de dividendes…).

TFT

L’élaboration du TFT s’avère fastidieuse surtout dans un groupe comprenant de nombreuses filiales. Par ailleurs, une analyse régulière des événements comptables requière une mise à jour trimestrielle voire mensuelle de ces états.

Heureusement, la conception du TFT peut être automatisée (au même titre que le bilan ou que le compte de résultat) en partant comme source de données du Fichier des Ecritures Comptables (FEC). Toutefois, l’élaboration du TFT s’avère plus complexe car elle ne s’appuie pas seulement sur une affectation de comptes dans des postes d’états financiers. La difficulté repose essentiellement sur l’analyse des flux comptables. En effet, selon le sens de l’opération, celle-ci se verra affectée sur une ligne ou une autre du TFT. Ainsi une acquisition ou une cession d’immobilisation est portée sur une ligne différente alors que que ces transactions sont comptabilisées dans un même compte. C’est le sens (débiteur ou créditeur) de l’opération qui détermine l’affectation à telle ou telle ligne du TFT.

Pour ajouter à la complexité, certaines écritures comptables sont dépourvues de flux de trésorerie. Il en est ainsi par exemple de la mise en service d’une immobilisation. L’investissement est réalisé lors de la comptabilisation de l’immobilisation en cours (comptes 23x) au gré de l’exécution du chantier (construction d’un immeuble, déploiement d’un projet informatique…). La mise en service (qui solde le compte 23x et transfère le bien dans un compte d’immobilisation incorporelle (20x) ou corporelle (21x)) ne constitue qu’une opération de nature purement comptable et n’a aucune incidence en matière de trésorerie.

Seule une analyse approfondie des chaque transaction retranscrite en comptabilité permettra d’identifier avec précision les flux de trésorerie. Cette analyse repose en grande partie sur l’identification les schémas d’écritures comptables. C’est précisément l’une des tâches réalisées par le programme d’analyse de données PADoCC_Ecritures.

Exemple de flux pré-identifés par PADoCC_Ecritures sur les immobilisations corporelles :

TFT VAR VO IC

… et leurs amortissements :

TFT VAR DEPR IC

Exemple (extrait) de requête SQL mise en oeuvre par le programme d’analyse de données PADoCC_Ecritures pour calculer les flux liés aux comptes d’immobilisations et des dépréciations associées (amortissements et provisions) par nature (à-nouveau, emplois, ressources, virements internes) :

    'Création table FLUX_TFT
    NomReq = "ECRITUREStemp"
    NomTable = "X300_FLUX_TFT"
    If TableExiste(DB_Groupe_SUPERVISION, NomTable) Then
        If FEC_A_Traiter And (AnciennetéFEC <> 0) Then
            TexteReq = "DELETE FROM " & NomTable & " IN '" & dossier_Bases & NomBaseDestinationEnCours & "' WHERE CodeEntité=""" & EntitéEnCours & """;"
            ExéReq
        End If
        TexteReq = ""
        TexteReq = TexteReq & "INSERT INTO " & NomTable & " IN '" & dossier_Bases & NomBaseDestinationEnCours & "' "
    Else:
        TexteReq = ""
    End If
    TexteReq = TexteReq & "SELECT *"
    If Not (TableExiste(DB_Groupe_SUPERVISION, NomTable)) Then TexteReq = TexteReq & " INTO " & NomTable & " IN '" & dossier_Bases & NomBaseDestinationEnCours & "'"
    TexteReq = TexteReq & " FROM (SELECT CodeEntité, Montant, Cpte5, Cpte4, Cpte3, Cpte2, RubEF, FLUX"
    TexteReq = TexteReq & " FROM (SELECT [_ECRITURES].CodeEntité, "
    '---FLUX COMPTES 20/21/23/28/29x (+ et -)
    '------Montant : changement de signe en fonction du Cpte2 et du type de flux (1 ANV, 2 AUGM, 3 VIRT, 4 DIM°)
    TexteReq = TexteReq & " Sum(IIf((([_ECRITURES].Cpte2=""28"" Or [_ECRITURES].Cpte2=""29"") And (FLUX Like ""1*"" Or FLUX Like ""2*"" Or FLUX Like ""3*"")) Or (([_ECRITURES].Cpte2=""20"" Or [_ECRITURES].Cpte2=""21"") And (FLUX Like ""4*"")),-1,1)*[_ECRITURES].Solde) AS Montant,"
    '------
    TexteReq = TexteReq & " [_ECRITURES].Cpte5, [_ECRITURES].Cpte4, [_ECRITURES].Cpte3, [_ECRITURES].Cpte2, [_BG].RubEF, [_BG].EF_PosteLibellé, [_BG].EF_SPartiesLibellé, [_ECRITURES].TypeJournal, [_ECRITURES].SchémEcrit_Nature,"
    '------Flux 1.ANV, 2.AUGM, 3.VIRT et 4.DIM° en fonction TypeJournal ou SchémEcrit_Nature
    TexteReq = TexteReq & "  IIf([SchémEcrit_Nature]=""ANV"",""1.ANV"",IIf([_ECRITURES].TypeJournal=""ACHATS"" Or SchémEcrit_Nature Like ""*ACHATS*"" Or [SchémEcrit_Nature] Like ""*PROD*"" Or SchémEcrit_Nature Like ""*DOT*"" Or SchémEcrit_Nature Like ""*DEPR*"",""2.AUGM"",IIf([SchémEcrit_Nature] Like ""*VIRCAC*"" Or SchémEcrit_Nature Like ""IEC_MISE_SCE"",""3.VIR"",IIf([SchémEcrit_Nature] Like ""*SORTIE*"",""4.DIM°"",Null)))) AS FLUX"
    '------
    TexteReq = TexteReq & " FROM [" & dossier_Bases & BDD_Final & "].[_BG] INNER JOIN [" & dossier_Bases & BDD_Final & "].[_ECRITURES] ON ([_BG].CompteNum = [_ECRITURES].CompteNum) AND ([_BG].CodeEntité = [_ECRITURES].CodeEntité)"
    TexteReq = TexteReq & " WHERE ((([_ECRITURES].Cpte2) = ""20"" Or ([_ECRITURES].Cpte2) = ""21"" Or ([_ECRITURES].Cpte2) = ""23"" Or ([_ECRITURES].Cpte2) = ""28"" Or ([_ECRITURES].Cpte2) = ""29""))"
    TexteReq = TexteReq & " GROUP BY [_ECRITURES].CodeEntité, [_ECRITURES].Cpte5, [_ECRITURES].Cpte4, [_ECRITURES].Cpte3, [_ECRITURES].Cpte2, [_BG].RubEF, [_BG].EF_PosteLibellé, [_BG].EF_SPartiesLibellé, [_ECRITURES].TypeJournal, [_ECRITURES].SchémEcrit_Nature)"
    '---
    TexteReq = TexteReq & " UNION ALL"

[...]

    TexteReq = TexteReq & " GROUP BY CodeEntité, Cpte5, Cpte4, Cpte3, Cpte2, RubEF, FLUX);"
    If FEC_A_Traiter Then ExéReq

En substance, cette requête agrège les flux (l’instruction Sum additionne le contenu de champs de données, ici  des soldes comptables, dans le cadre d’une requête regroupement GROUP BY) de même nature  (même champ FLUX, même racine comptable (Cpte5, Cpte4…), de même poste comptable (RubEF)), et ce, au niveau de chaque entité du groupe (champ CodeEntité). Le champ FLUX est calculé à partir du type de mouvements comptables identifié par le système. Cette analyse s’opère à partir de règles de gestion déterminées selon le compte (20x, 28x…), le sens débit / crédit de la transaction, la nature du journal comptable (exemple TypeJournal=”ACHATS”…), le schéma d’écriture identifié (production immobilisée = *PROD*,  sortie d’actif = SORTIE*…).

___

Approfondir le sujet : Suivre le projet PADoCC… / Voir mes autres réalisations… / En savoir plus sur l’analyse de donnéesFEC News 

Share Button
The following two tabs change content below.
Après seize années passées en cabinet d’expertise-comptable et de commissariat aux comptes (où j’ai exercé comme expert-comptable et chef de mission audit), j’ai pris le poste de directeur comptable d’un groupe de distribution automobile en novembre 2014. Au cours de ma carrière, j’ai acquis une expérience significative en audit et en exploitation des systèmes d’information (analyse de données, automatisation des tâches, programmation informatique) au service de la production des comptes annuels et consolidés. C’est cette expérience personnelle et ma passion pour l’informatique que je partage sur ce blog. Mon CV / Réalisations personnelles et projets informatiques / Ma collection / Me contacter

2 commentaires

  1. Pingback: Automatiser l'élaboration du tableau des...

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.