Le WordPress d'aujourd'hui, décodé pour les développeurs

Extensions

Exporter une facturation associative au format FEC, sans module comptable

Générer un fichier des écritures conforme demande surtout de respecter un format texte strict, pas un moteur comptable complet.

Par Clément Hadrot • 23 juillet 2026 • 5 min de lecture • Aucun commentaire
Exporter une facturation associative au format FEC, sans module comptable

Un fichier des écritures comptables, ou FEC, ne demande pas un moteur comptable complet pour être généré correctement : il exige surtout un respect scrupuleux d’un format texte strict, défini par l’administration fiscale française, avec dix-huit colonnes obligatoires et un ordre précis. Pour une association qui facture des adhésions et des prestations via une extension WordPress maison, produire ce fichier à la demande, sans dépendre d’un logiciel comptable tiers, reste tout à fait accessible.

Cette recette détaille la génération d’un export FEC à partir des données de facturation déjà stockées par l’extension, sans aborder la comptabilité générale de l’association dans son ensemble, qui reste du ressort du trésorier ou d’un expert-comptable.

Le problème : un format texte à respecter au caractère près

Le format FEC impose un fichier texte, encodé de préférence en UTF-8 ou en ISO-8859-15, avec les colonnes séparées par une tabulation, une ligne d’en-tête obligatoire portant le nom exact de chaque colonne, et un ordre de colonnes qui ne souffre aucune variation : JournalCode, JournalLib, EcritureNum, EcritureDate, CompteNum, CompteLib, CompAuxNum, CompAuxLib, PieceRef, PieceDate, EcritureLib, Debit, Credit, EcritureLet, DateLet, ValidDate, Montantdevise, Idevise.

Étape 1 : structurer la requête sur les factures existantes

L'essentiel à retenir : Le format FEC impose un ordre de colonnes strict et un séparateur tabulation ; Chaque écriture doit respecter l'équilibre débit-crédit sur son journal ; La comptabilité générale de l'association reste hors du périmètre de cet export

La première étape consiste à récupérer, depuis la table personnalisée de facturation de l’extension, toutes les factures validées sur la période demandée, avec leur montant, leur date et leur numéro de pièce.

global $wpdb;

$factures = $wpdb->get_results(
    $wpdb->prepare(
        "SELECT numero_piece, date_facture, libelle, montant_ht, montant_tva
         FROM {$wpdb->prefix}assoc_factures
         WHERE statut = 'validee'
           AND date_facture BETWEEN %s AND %s
         ORDER BY date_facture ASC",
        $date_debut,
        $date_fin
    )
);

Étape 2 : générer une écriture équilibrée par facture

Chaque facture doit produire au moins deux lignes d’écriture équilibrées : une ligne au débit du compte client, et une ligne au crédit du compte de produit correspondant, la TVA éventuelle faisant l’objet d’une ligne séparée.

function generer_lignes_fec( $facture ) {
    $lignes   = array();
    $num_ecr  = 'ADH' . $facture->numero_piece;
    $date_ecr = str_replace( '-', '', $facture->date_facture ); // format AAAAMMJJ attendu

    $lignes[] = array(
        'JournalCode'  => 'VE',
        'JournalLib'   => 'Journal des ventes',
        'EcritureNum'  => $num_ecr,
        'EcritureDate' => $date_ecr,
        'CompteNum'    => '411000',
        'CompteLib'    => 'Clients adhérents',
        'PieceRef'     => $facture->numero_piece,
        'PieceDate'    => $date_ecr,
        'EcritureLib'  => $facture->libelle,
        'Debit'        => number_format( $facture->montant_ht + $facture->montant_tva, 2, ',', '' ),
        'Credit'       => '0,00',
    );

    $lignes[] = array(
        'JournalCode'  => 'VE',
        'JournalLib'   => 'Journal des ventes',
        'EcritureNum'  => $num_ecr,
        'EcritureDate' => $date_ecr,
        'CompteNum'    => '706000',
        'CompteLib'    => 'Prestations adhésions',
        'PieceRef'     => $facture->numero_piece,
        'PieceDate'    => $date_ecr,
        'EcritureLib'  => $facture->libelle,
        'Debit'        => '0,00',
        'Credit'       => number_format( $facture->montant_ht, 2, ',', '' ),
    );

    if ( $facture->montant_tva > 0 ) {
        $lignes[] = array(
            'JournalCode'  => 'VE',
            'JournalLib'   => 'Journal des ventes',
            'EcritureNum'  => $num_ecr,
            'EcritureDate' => $date_ecr,
            'CompteNum'    => '445710',
            'CompteLib'    => 'TVA collectée',
            'PieceRef'     => $facture->numero_piece,
            'PieceDate'    => $date_ecr,
            'EcritureLib'  => $facture->libelle,
            'Debit'        => '0,00',
            'Credit'       => number_format( $facture->montant_tva, 2, ',', '' ),
        );
    }

    return $lignes;
}

Le total des colonnes Débit doit toujours égaler le total des colonnes Crédit pour chaque numéro d’écriture : c’est le principe comptable de la partie double, et c’est aussi la première vérification que réalise un contrôleur ou un logiciel de lecture FEC à l’ouverture du fichier.

Étape 3 : écrire le fichier avec le bon séparateur et le bon encodage

Le fichier final doit utiliser une tabulation comme séparateur de colonnes, jamais une virgule ni un point-virgule, sous peine d’être rejeté par les outils de contrôle qui vérifient la conformité du format avant tout examen du contenu.

$colonnes = array( 'JournalCode', 'JournalLib', 'EcritureNum', 'EcritureDate', 'CompteNum', 'CompteLib', 'CompAuxNum', 'CompAuxLib', 'PieceRef', 'PieceDate', 'EcritureLib', 'Debit', 'Credit', 'EcritureLet', 'DateLet', 'ValidDate', 'Montantdevise', 'Idevise' );

$fichier = fopen( 'FEC_association_2026.txt', 'w' );
fputcsv( $fichier, $colonnes, "\t" );

foreach ( $toutes_les_lignes as $ligne ) {
    $ligne_complete = array_merge(
        array( 'CompAuxNum' => '', 'CompAuxLib' => '', 'EcritureLet' => '', 'DateLet' => '', 'ValidDate' => $ligne['EcritureDate'], 'Montantdevise' => '', 'Idevise' => '' ),
        $ligne
    );
    fputcsv( $fichier, array_values( $ligne_complete ), "\t" );
}

fclose( $fichier );

Variantes selon le contexte de l’association

  • Ajouter un journal de banque distinct (JournalCode « BQ ») si l’association encaisse aussi des dons hors facturation, avec ses propres comptes.
  • Adapter la numérotation des comptes au plan comptable associatif si celui-ci diffère du plan comptable général simplifié utilisé ici.
  • Prévoir un export incrémental par exercice comptable plutôt qu’un fichier unique cumulant plusieurs années.

Un fichier FEC qui s’ouvre sans erreur dans un tableur n’est pas encore un fichier FEC valide : seule la vérification de l’équilibre débit-crédit ligne par ligne, écriture par écriture, garantit sa conformité réelle.

En résumé

Générer un fichier FEC depuis une extension de facturation associative reste une question de rigueur sur le format, pas de complexité algorithmique. Le vrai travail se situe dans la structuration correcte des écritures équilibrées et le respect exact de l’ordre des colonnes, bien plus que dans un quelconque moteur comptable qu’il ne serait ici ni nécessaire ni raisonnable de reconstruire soi-même.

Partager :

À propos de l'auteur

Clément Hadrot

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi