Votre application Excel ou Access génère déjà des factures avec du code VBA ? Le passage au format Factur-X ne consiste pas à ajouter un simple export PDF : il faut structurer les données, générer un XML conforme, produire un PDF adapté et assembler l’ensemble dans un fichier exploitable.
De nombreuses entreprises disposent déjà d’un outil de facturation développé en VBA : classeur Excel avec macros, application Access, formulaires personnalisés, états de facturation ou procédures d’export PDF. Ces outils peuvent souvent être conservés, mais leur code doit évoluer pour répondre aux exigences de la facture électronique.
L’objectif n’est pas de réécrire toute l’application. Le travail consiste plutôt à identifier les points de sortie existants, isoler les données nécessaires, ajouter les contrôles indispensables et créer les routines techniques permettant de produire un fichier Factur-X.
Pourquoi modifier un code VBA existant est plus complexe qu’ajouter un export PDF ?
Dans une macro de facturation classique, le traitement est souvent linéaire : l’utilisateur saisit les informations, le code calcule les lignes, met en forme la facture puis exporte le résultat en PDF. Cette logique suffit pour produire un document lisible, mais elle ne suffit pas pour produire une facture Factur-X.
Une facture Factur-X doit réunir deux composants : une représentation visuelle de la facture et un fichier XML structuré contenant les données de facturation. Le code VBA doit donc gérer à la fois la sortie documentaire et la génération des données.
La modification d’un projet VBA existant suppose généralement de séparer plusieurs responsabilités qui étaient auparavant mélangées dans une seule macro : préparation des données, calcul des totaux, génération des lignes, ventilation de TVA, création du XML, production du PDF et assemblage final.
Comment analyser l’architecture actuelle du projet VBA ?
Avant de modifier le code, il faut comprendre comment l’application fonctionne aujourd’hui. Dans Excel, les données peuvent être réparties entre plusieurs feuilles : clients, articles, factures, lignes, TVA et paramètres. Dans Access, elles sont souvent stockées dans plusieurs tables reliées par des requêtes et exploitées par des états de facturation.
L’analyse porte notamment sur :
- la procédure qui déclenche actuellement la génération de la facture ;
- les cellules, tables ou requêtes contenant les données clients ;
- la manière dont les lignes de facture sont stockées ;
- les calculs de TVA et de totaux ;
- les règles de numérotation ;
- la procédure d’export PDF existante ;
- les contrôles déjà présents dans le code.
Cette étape permet de déterminer s’il faut adapter directement le code VBA ou créer une brique séparée qui récupère les données produites par l’application.
Comment isoler les données de facturation dans le code VBA ?
La première évolution consiste à isoler les données métiers utilisées par le futur fichier Factur-X. Le code doit pouvoir distinguer l’en-tête de facture, les informations du vendeur, les informations de l’acheteur, les lignes, la TVA, les remises éventuelles et les montants de contrôle.
Dans un projet VBA structuré, on évite de générer le fichier final directement depuis les cellules ou les contrôles de formulaire. Il est préférable de créer des procédures spécialisées, chacune responsable d’une partie du document.
| Bloc VBA | Rôle dans la génération Factur-X | Point de vigilance |
|---|---|---|
FX_Init |
Initialiser les collections, dictionnaires et variables nécessaires à la génération. | Éviter de conserver des données d’une facture précédente. |
FX_SetHeader |
Préparer l’en-tête, le vendeur, l’acheteur, les dates, les conditions de paiement et les identifiants. | Contrôler les dates, les devises, les SIRET, les adresses et les informations fiscales. |
FX_AddLine |
Ajouter une ligne de facture avec article, quantité, unité, prix, catégorie TVA et montant. | Gérer les unités, les remises, les exonérations et les lignes à TVA particulière. |
FX_AddGlobalAllowance |
Gérer une remise globale sur la facture. | Répartir correctement l’impact fiscal de la remise. |
FX_BuildXml |
Assembler les blocs et produire la structure XML finale. | Vérifier la cohérence entre lignes, TVA, total TTC et montant à payer. |
FX_SaveXml |
Enregistrer le XML dans un encodage compatible. | Éviter les problèmes d’encodage et de caractères spéciaux. |
Comment générer le XML Factur-X depuis VBA ?
La génération du XML est la partie la plus sensible. Il ne s’agit pas seulement d’écrire du texte dans un fichier : le code doit produire une structure cohérente, hiérarchisée et compatible avec les données attendues par Factur-X.
Dans une architecture saine, le code ne construit pas tout le XML en une seule procédure. Il appelle des fonctions spécialisées pour ajouter l’en-tête, les lignes, les taxes, les remises, les conditions de paiement et les montants de contrôle.
Un schéma simplifié peut ressembler à ceci :
Call FX_Init
Call FX_SetHeader(…)
Call FX_AddLine(…)
Call FX_AddGlobalAllowance(…)
xml = FX_BuildXml(…)
Cet extrait ne suffit évidemment pas à produire un fichier complet, mais il montre le principe : le projet VBA doit être organisé autour de blocs spécialisés, et non autour d’une macro unique qui ferait tout en même temps.
Les données à intégrer dans le XML peuvent être nombreuses : numéro de facture, date, type de document, devise, vendeur, acheteur, SIRET, TVA intracommunautaire, lignes de facture, unités, montants, catégories de TVA, remises, échéance, IBAN et conditions de règlement.
Pour comprendre le détail des données attendues, vous pouvez consulter notre guide consacré aux mentions obligatoires du XML Factur-X.
Comment produire le PDF/A-3 ?
Le PDF visible reste indispensable : il permet à l’utilisateur, au client ou au comptable de consulter la facture. Mais un export PDF classique produit par Excel ou Access n’est pas forcément suffisant pour générer un fichier Factur-X.
Le format Factur-X repose sur un PDF particulier, capable d’embarquer le fichier XML. Le code VBA doit donc être adapté pour produire ou piloter la création d’un document compatible avec cette logique.
Dans la pratique, cela peut nécessiter :
- la conservation de l’état ou de la feuille de facture existante ;
- la génération d’un PDF propre à partir d’Excel ou Access ;
- l’utilisation d’un composant ou d’un traitement externe pour obtenir le format attendu ;
- la préparation du fichier XML à intégrer ;
- l’assemblage final dans un fichier unique.
L’enjeu est de conserver le rendu de facture utilisé par l’entreprise tout en ajoutant les données structurées nécessaires à la facture électronique.
Comment assembler le PDF et le XML ?
Une fois le PDF généré et le XML produit, le projet VBA doit prévoir une étape d’assemblage. Cette étape consiste à intégrer le fichier XML dans le document final afin de produire une facture Factur-X exploitable.
Il ne suffit pas de déposer deux fichiers dans un dossier. Le document final doit être un fichier unique, dans lequel le PDF visible et les données XML sont associés correctement.
C’est souvent à ce niveau que les projets VBA deviennent plus complexes qu’un simple export : l’application doit piloter plusieurs traitements, gérer les chemins de fichiers, contrôler les erreurs, vérifier que le XML correspond bien à la facture affichée et produire un résultat final cohérent.
Quels contrôles ajouter dans le code VBA ?
La robustesse d’un moteur Factur-X dépend largement des contrôles intégrés dans le code. Une macro qui se contente de convertir les données sans les vérifier peut produire un fichier incohérent ou nécessitant des corrections.
Les contrôles doivent être placés à plusieurs niveaux du traitement : avant la génération du XML, lors de l’ajout des lignes, pendant la ventilation de TVA et avant la production du fichier final.
| Contrôle VBA | Pourquoi c’est important | Exemple de risque |
|---|---|---|
| Dates | Les dates doivent être cohérentes et utilisables dans le XML. | Date d’émission ou échéance absente, inversée ou mal formatée. |
| SIRET et identifiants | Les identifiants doivent être conservés comme du texte afin de préserver les zéros initiaux. | SIRET tronqué ou modifié par Excel. |
| Lignes de facture | Chaque ligne doit avoir une désignation, une quantité, une unité, un prix et un montant cohérent. | Ligne vide intégrée au XML ou montant de ligne incorrect. |
| Catégories de TVA | Les cas d’exonération, d’autoliquidation ou de TVA standard doivent être traités différemment. | Taux de TVA incohérent avec la catégorie fiscale. |
| Ventilation TVA | Une facture peut contenir plusieurs taux ou catégories de TVA. | Base taxable ou montant de taxe mal ventilé. |
| Montants de contrôle | Les totaux doivent être cohérents entre eux : lignes HT, TVA, TTC, acomptes et montant à payer. | Écart d’arrondi ou total TTC différent du total calculé. |
Ces contrôles sont particulièrement importants pour les cas particuliers : avoirs, remises globales, exonérations de TVA, autoliquidation, plusieurs taux de TVA sur une même facture ou paiements déjà enregistrés.
Vous souhaitez adapter vos macros sans déstabiliser votre application ?
Nous analysons votre code VBA existant, vos procédures de facturation et vos exports actuels afin d’identifier la meilleure façon d’intégrer la génération Factur-X.
Modifier directement Excel ou Access, ou créer une passerelle ?
Tous les projets VBA ne doivent pas être traités de la même manière. La bonne solution dépend de l’architecture existante et du niveau de contrôle que l’on possède sur le code source.
Lorsque l’application est modifiable, il est souvent pertinent d’ajouter directement les procédures nécessaires dans le projet VBA. C’est généralement le cas d’un classeur Excel ou d’une base Access développée sur mesure.
Lorsque le logiciel n’est pas modifiable, mais qu’il peut exporter des fichiers TXT, CSV ou Excel, une passerelle externe peut être plus adaptée. Elle récupère les données produites par le logiciel et génère le fichier Factur-X sans modifier l’application d’origine.
Pages complémentaires
Confiez l’adaptation de votre projet VBA à un spécialiste
Modifier un code VBA existant pour produire du Factur-X demande de maîtriser à la fois l’application existante, les règles de facturation, la structure des données et la génération du fichier final.
Dophis intervient sur vos fichiers Excel, applications Access et développements VBA pour identifier les données disponibles, structurer les routines nécessaires et intégrer les contrôles adaptés à votre fonctionnement.
L’objectif est de conserver votre outil lorsque c’est possible, sans bouleverser les habitudes de vos utilisateurs, tout en ajoutant la capacité de produire des factures Factur-X.
Sécurisez l’évolution de vos développements VBA internes
Nous analysons votre projet VBA existant et vous proposons une adaptation sur mesure pour générer des factures Factur-X à partir de vos outils actuels.

