La scène
Fin de mois. Chaque agence, chaque service ou chaque fournisseur envoie son fichier. Douze fichiers, un par entité, avec chacun ses habitudes : une colonne en plus, un intitulé différent, une ligne de total au milieu, des dates au format américain dans deux d’entre eux.
Quelqu’un ouvre les douze, copie, colle, harmonise à la main, recalcule. Trois heures. Le total ne tombe pas. On cherche. On trouve une ligne dupliquée. On recommence.
Et le mois prochain, tout est à refaire à l’identique.
Ce qui rend l’opération fragile
Ce n’est pas le volume, c’est l’hétérogénéité. Chaque fichier a sa logique, et la personne qui consolide en tient compte de tête. Ce savoir n’est écrit nulle part — et il part avec elle.
C’est la raison pour laquelle cette tâche résiste : elle paraît triviale, et elle repose sur des dizaines de micro-décisions invisibles.
Ce qu’on automatise
La récupération. Les fichiers sont pris à leur emplacement habituel : dossier partagé, pièces jointes d’une boîte dédiée, espace en ligne. Les manquants sont signalés — et ce signalement est souvent le premier bénéfice visible.
L’harmonisation. Les colonnes sont ramenées à un nom canonique via une table de correspondance. Les formats de date, les séparateurs décimaux, les montants écrits en texte sont normalisés.
Les contrôles. Doublons, lignes vides, totaux intermédiaires pris pour des données, montants aberrants, périodes hors bornes, entités inconnues.
La fusion et le calcul.
Le rapport d’écarts. Ce qui a été écarté, pourquoi, et ce qui demande un arbitrage humain. C’est la partie qui rend le résultat utilisable : un chiffre sans rapport d’écarts n’est pas vérifiable.
Comment ça marche techniquement — pour qui veut le détail
La lecture. Python avec pandas et openpyxl couvre l’essentiel : xlsx, xls anciens, csv avec encodages variés. Le piège classique des fichiers français est l’encodage windows-1252 et le point-virgule comme séparateur — à détecter plutôt qu’à supposer.
La détection d’en-têtes. Les tableurs réels ont rarement leur ligne d’en-tête en première position : logo, titre, ligne vide, puis les colonnes. On cherche la première ligne dont la majorité des cellules correspondent à des intitulés connus, plutôt que de fixer un numéro de ligne.
La correspondance de colonnes. Une table explicite variantes → nom canonique, complétée par une comparaison de chaînes tolérante pour proposer les variantes inconnues. Le système ne devine jamais seul : il propose, et la table est validée par vous.
Les types. Les dates sont le principal piège. Un tableur stocke une date comme un nombre de jours depuis 1899, et une date lue en texte peut être interprétée à l’envers — 03/04 est le 3 avril ou le 4 mars selon la locale. On fixe explicitement le format attendu par source plutôt que de laisser deviner.
Les montants. Espaces insécables, symboles monétaires, virgule décimale, parenthèses pour les négatifs dans les exports anglo-saxons. Tout cela se normalise, et ce qui ne se normalise pas est écarté et signalé.
Les contrôles. Somme des lignes contre total déclaré, unicité des clés, valeurs dans une plage plausible, complétude des entités attendues. Chaque contrôle échoué produit une ligne de rapport, pas une exception silencieuse.
Le résultat. Un fichier consolidé écrit avec ses formats, plus un onglet « contrôles » contenant le rapport. L’ancienne version est archivée avec sa date, jamais écrasée.
La traçabilité. Empreinte SHA-256 de chaque source, horodatage, version du script. C’est ce qui permet de répondre, six mois plus tard, à « d’où vient ce chiffre ».