La communication du Fichier des Ecritures Comptables (FEC) à l’administration fiscale lors d’une vérification de comptabilité (contrôle fiscal) est une obligation introduite pour les exercices ouverts à compter du 1er janvier 2014. Le FEC est une extraction normalisée qui reprend l’ensemble des écritures comptables d’un contribuable. Cette obligation est une opportunité pour l’entreprise. En effet, la normalisation de cette extraction de données favorise l’usage de l’analyse des données comptables.
L’article A 47 A-1 du Livre des procédures fiscales modifié par l’arrêté du 29 juillet 2013 définit le contenu du Fichier des Ecritures Comptables (FEC). Les champs de données sont les suivants :
INFORMATION | NOM DU CHAMP | TYPE DE CHAMP |
---|---|---|
1. Le code journal de l’écriture comptable | JournalCode | Alphanumérique |
2. Le libellé journal de l’écriture comptable | JournalLib | Alphanumérique |
3. Le numéro sur une séquence continue de l’écriture comptable | EcritureNum | Alphanumérique |
4. La date de comptabilisation de l’écriture comptable | EcritureDate | Date |
5. Le numéro de compte, dont les trois premiers caractères doivent correspondre à des chiffres respectant les normes du plan comptable français | CompteNum | Alphanumérique |
6. Le libellé de compte, conformément à la nomenclature du plan comptable français | CompteLib | Alphanumérique |
7. Le numéro de compte auxiliaire (à blanc si non utilisé) | CompAuxNum | Alphanumérique |
8. Le libellé de compte auxiliaire (à blanc si non utilisé) | CompAuxLib | Alphanumérique |
9. La référence de la pièce justificative | PieceRef | Alphanumérique |
10. La date de la pièce justificative | PieceDate | Date |
11. Le libellé de l’écriture comptable | EcritureLib | Alphanumérique |
12. Le montant au débit | Debit | Numérique |
13. Le montant au crédit | Credit | Numérique |
14. Le lettrage de l’écriture comptable (à blanc si non utilisé) | EcritureLet | Alphanumérique |
15. La date de lettrage (à blanc si non utilisé) | DateLet | Date |
16. La date de validation de l’écriture comptable | ValidDate | Date |
17. Le montant en devise (à blanc si non utilisé) | Montantdevise | Numérique |
18. L’identifiant de la devise (à blanc si non utilisé) | Idevise | Alphanumérique |
Si les informations ” débit ” et ” crédit ” ne sont pas présentes dans le système informatisé comptable de l’entreprise, les informations 12 et 13 peuvent être respectivement remplacées par ” montant ” et ” sens “, sur le modèle suivant :
INFORMATION | NOM DU CHAMP | TYPE DE CHAMP |
---|---|---|
12. Le montant | Montant | Numérique |
13. Le sens | Sens | Alphanumérique |
L’application VBA qui suit propose d’exploiter le FEC à des fin d’analyse sous Excel. A cette fin, cette application convertit le FEC du format texte vers un classeur Excel créé à cet effet et effectue quelques ajouts facilitant les travaux d’analyse de données.
'ANA_FEC v1.0, 02/2016 'Programmé par Benoît RIVIERE Sub ExploitationFEC() Dim NomFichier As Variant 'composé du lecteur+chemin+fichier+ext Dim oFSO As Scripting.FileSystemObject 'permet de lire le détail d'un nom de fichier Dim NbLignes As Long 'Sélection du fichier à importer NomFichier = Application.GetOpenFilename("Fichiers Texte (*.txt),*.txt,Tous les fichiers (*.*),*.* ", 1, "Sélectionnez le Fichier des Ecritures Comptables (FEC) à importer", , False) '---si l'utilisateur annule l'importation => sortie de la procédure If NomFichier = False Then Exit Sub 'Ouverture du fichiers des écritures (format texte) et conversion des colonnes Workbooks.OpenText Filename:=NomFichier, Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar:="|", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 4), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1), Array(15, 1), Array(16, 1), Array(17, 1), Array(18, 1)), TrailingMinusNumbers:=True 'Nombre de lignes d'écritures (y compris la ligne d'entête) NbLignes = Range("A1", Selection.End(xlDown)).Cells.Count 'Remplacement des espaces dans les champs Débit/Crédit (FEC TIGRE) Columns("L:M").Select Selection.Replace What:=" ", Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False 'Ajout de champs additionnels '---Solde de la ligne d'écriture Range("S1").Formula = "Solde" Range("S2").FormulaR1C1 = "=RC[-7]-RC[-6]" '------Duplication de la formule jusqu'à la dernière ligne Range("S2").AutoFill Destination:=Range("S2:S" & NbLignes) '---aaaa/mm Range("T1").Formula = "aaaamm" Range("T2").FormulaR1C1 = "=LEFT(RC[-16],4)&""/""&LEFT(RIGHT(RC[-16],4),2)" Range("T2").AutoFill Destination:=Range("T2:T" & NbLignes) '---Cpte1, Cpte2 et Cpte3 Range("U1").Formula = "Cpte1" Range("V1").Formula = "Cpte2" Range("W1").Formula = "Cpte3" Range("U2").FormulaR1C1 = "=LEFT(RC[-16],1)" Range("V2").FormulaR1C1 = "=LEFT(RC[-17],2)" Range("W2").FormulaR1C1 = "=LEFT(RC[-18],3)" Range("U2:W2").AutoFill Destination:=Range("U2:W" & NbLignes) 'Mise en place des filtres de données automatiques Range("A1").AutoFilter 'Insertion des sous.totaux de filtres sur champs D/C/solde '---Insertion d'une ligne vierge Range("A1").EntireRow.Insert '---Formule de calcul sur le champ Débit... Range("L1").FormulaR1C1 = "=SUBTOTAL(9,R[2]C:R[" & NbLignes + 1 & "]C)" '---...Puis duplication de la formule sur les champs Crédit et Solde Range("L1").Copy Range("M1").Select ActiveSheet.Paste Range("S1").Select ActiveSheet.Paste 'Formatage '---Formatage des champs D/C et solde Range("L:M,S:S").NumberFormat = "#,##0.00" '---Ajustement des colonnes à leur contenu Cells.Columns.AutoFit 'Sauvegarde du classeur au format Excel Set oFSO = New Scripting.FileSystemObject ActiveWorkbook.SaveAs Filename:=oFSO.GetBaseName(NomFichier), FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False End Sub
Quelques explications du code-source de l’application :
'Sélection du fichier à importer NomFichier = Application.GetOpenFilename("Fichiers Texte (*.txt),*.txt,Tous les fichiers (*.*),*.* ", 1, "Sélectionnez le Fichier des Ecritures Comptables (FEC) à importer", , False) '---si l'utilisateur annule l'importation => sortie de la procédure If NomFichier = False Then Exit Sub
Cette ligne permet à l’utilisateur du programme de sélectionner un fichier FEC (format texte) et de récupérer le nom du fichier (arborescence comprise) dans la variable NomFichier. La commande .GetOpenFilename réalise cette opération. Si l’utilisateur ne sélectionne pas de fichier (annulation en appuyant sur la touche Echap), la variable NomFichier prendra la valeur booléenne False. L’expression If NomFichier = False Then Exit Sub permet de sortir de la procédure en cours sans réaliser les instructions qui suivent (en l’occurrence l’importation du FEC).
'Ouverture du fichiers des écritures (format texte) et conversion des colonnes Workbooks.OpenText Filename:=NomFichier, Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar:="|", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 4), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1), Array(15, 1), Array(16, 1), Array(17, 1), Array(18, 1)), TrailingMinusNumbers:=True
La macro VBA ouvre le FEC (commande .OpenText), l’importe dans Excel dès la première ligne (StartRow:=1). Les dix-huit champs de données définis par la Loi sont retranscrits dans les colonnes A à R. Les deux séparateurs prévus par la réglementation sont la tabulation (Tab:=True) et le signe | (OtherChar:=”|”).
Range("U2").FormulaR1C1 = "=LEFT(RC[-16],1)"
Ajout de champs additionnels : par exemple, ressortir le chiffre le plus à gauche (LEFT) du numéro de compte (classe)…
'Mise en place des filtres de données automatiques Range("A1").AutoFilter
Met en place des filtres automatiques (.AutoFilter, équivalent au menu Données / Filtrer).
Range("A1").EntireRow.Insert
Insère (.Insert) une ligne avant la ligne une (A1).
Range("L1").FormulaR1C1 = "=SUBTOTAL(9,R[2]C:R[" & NbLignes + 1 & "]C)"
La commande SUBTOTAL(fonction,plage de cellules) calcule la somme des montants non filtrés (fonction n° 9). Cette commande correspond à SOUS.TOTAL(fonction; plage de cellules) d’Excel.
Range("L1").Copy Range("M1").Select ActiveSheet.Paste
Cette partie du code copie (.Copy) le contenu de la cellule L1 puis le colle en M1 (.Paste), automatisant ainsi le copier/coller.
Range("L:M,S:S").NumberFormat = "#,##0.00"
Formate les colonnes L, M et S au format numérique (.NumberFormat) avec séparateur de milliers et deux décimales.
Cells.Columns.AutoFit
Ajuste automatiquement la largeur des colonnes à leur contenu (.AutoFit).
Dim oFSO As Scripting.FileSystemObject 'permet de lire le détail d'un nom de fichier [...] 'Sauvegarde du classeur au format Excel Set oFSO = New Scripting.FileSystemObject ActiveWorkbook.SaveAs Filename:=oFSO.GetBaseName(NomFichier), FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
La fonction oFSO.GetBaseName(NomFichier) renvoie le nom du fichier compris dans la chaîne NomFichier. La commande .SaveAs équivaut au menu Fichier / Enregistrer sous… d’Excel ; le paramètre FileFormat:=xlOpenXMLWorkbook permet d’enregistrer le classeur au format *.xlsx.
La fonction .GetBaseName fait partie de la bibliothèque Microsoft Scripting Runtime. Cette bibliothèque doit être activée avant de lancer le programme (Menu Outils / Références… de l’EDI VBA).
Points d’amélioration :
- ajout de contrôles de cohérence (équilibre des écritures, des lettrages…) avec les fonctions SOMME.SI et SOMME.SI.ENS (respectivement sumif et sumifs en VBA) ; ces contrôles gagneraient à être matérialisés par des formats conditionnels (FormatConditions en VBA) et des filtres par couleur.
- ajouter un bouton pour lancer l’exécution de la macro.
Cette application ne teste pas la validité du FEC. La DGFiP propose en libre téléchargement un logiciel permettant de tester la validité du FEC.
Afin d’approfondir le sujet, le lecteur est invité à lire le guide pratique intitulé Le fichier des écritures comptables et l’archivage des comptabilités informatisées (Ordre des Experts-Comptables) disponible en téléchargement.
Tous savoir sur le Fichier des Ecritures Comptables (FEC)… / la conversion de fichier (Texte <-> Excel) / l’analyse de données
Approfondir le sujet : Programmer en VBA / Découvrir la série d’articles Maîtriser Excel
Derniers articles parBenoît RIVIERE (voir tous)
- Nouveautés de l’interpréteur de formules de calcul (v1.1) - dimanche 3 novembre 2024
- Dématérialisation de la facturation : nouvelles mentions obligatoires - lundi 28 octobre 2024
- Interpréteur de formules de calcul en Python - dimanche 13 octobre 2024
- Les données de la facturation électronique - mercredi 9 octobre 2024
- VBA/SQL vs Power Query : deux solutions complémentaires - mercredi 2 octobre 2024
c’est un excellent travail .
bon courage
Pingback: VBA, EXCEL : analyser le Fichier des Ecritures ...
Bonjour Mr RIVIERE
C’est tellement passionnant de lire vos publications car l’analyse des données que vous aviez su valorisé par vos différents travaux ouvrent des opportunités sans limite.
Je souhaiterai svp avoir votre avis d’expert concernant mon parcours.
j’ai 37 ans et Comptable général avec 8 ans d’expériences en entreprise et utilise intensément Excel et avec une expérience en liasse fiscale et de consolidation et je suis entrai de finaliser mon DSCG.
Je souhaiterai intégrer un cabinet comptable dès janvier 2017 à la fin de mon CDD.
Ma question est de savoir quel est le positionnement d’un comptable général confirmé lors de l’intégration dans le cabinet comptable ( collaborateur junior, mis à jour des connaissances? est-il valorisé ? bien qu’ayant pas de vécu ” cabinet COMPTABLE”.
mon projet c’est d’entrer en stage d’expertise comptable dès l’année prochaine.
Merci de vos commentaires et me serons très utiles.
Iram NZINZI
Bonjour Monsieur RIVIERE
Pourriez vous SVP m’envoyer le fichier excel contenant cette macro ?
Mon mail : chraverdy@gmail.com
Merci par avance
Bonjour,
je travaille dans cabinet d’expertise comptable, ça fait un bon moment que je cherche à transférer une feuille de caisse sous forme (date, espèces, chèques, carte bleu, autres) en écritures comptables avec les comptes du plan comptable 580000, 5111000, 5112000, 5113000 en débit et les compte de classe 7 et la tva en crédit. on ma dit qu’on pouvait le faire avec EXCEL autrement dit avec un macro et un fichier VBA.
SOS j’aimerais bien que quelqu’un pourrait m’aider à le faire
cordialement
Bonsoir Iram,
Merci beaucoup pour votre message d’encouragement.
Il n’y a aucune raison que vous ne puissiez valoriser votre expérience pour intégrer un cabinet. Vos compétences et votre passion pour le métier vous aideront à vous distinguer des autres et à réussir.
Bonne continuation,
Bien cordialement,
Benoît RIVIERE
Bonjour M. Rivière,
chez moi la macro semble KO
le type “oFSO As Scripting.FileSystemObject” n’est pas défini
Une proposition de correction ?
Merci
Amaury
Bonsoir Amaury,
Il faut activer la référence qui manque, cf https://www.auditsi.eu/?p=6521.
Bien cordialement,
Benoît