Sur cette page
Répondez de tête, puis ouvrez. Faire sortir les chiffres d'un document
1L'outil rend un tableau complet, au bon format. Les chiffres sont-ils justes ?
Pas forcément. Les éditeurs garantissent la forme, pas les valeurs : un chiffre mal lu ou inventé a la même forme qu'un juste. Seules des règles, ou une personne, le repèrent.
2Quelle règle aurait arrêté l'erreur de l'exemple ?
Total = hors taxe + TVA : 1 250,00 + 250,00 donne 1 500,00, et non le 1 580,00 lu.
- Un fichier de données est du texte avant d'être un tableau : le tableur ou le programme qui l'ouvre devine le séparateur, l'encodage et le type de chaque colonne. Chaque devinette peut abîmer une valeur, sans rien dire.
- Excel enlève les zéros de tête, coupe les nombres à 15 chiffres, lit « 1E5 » comme un nombre et change certains textes en dates ; depuis octobre 2023, ces conversions se coupent dans les options.
- Le cas d'école : une étude de 2016 trouve des noms de gènes changés en dates dans environ un cinquième des articles de génomique qui joignent des listes Excel.
- En 2020, près de 16 000 cas de Covid-19 n'ont pas été signalés en Angleterre : un ancien format Excel s'arrêtait vers 65 000 lignes, et les suivantes étaient laissées de côté.
- La parade : garder l'original intact, tout lire en texte, déclarer les types soi-même, et vérifier par des règles avant de calculer.
Problème
Un fichier de clients arrive, exporté d'un logiciel. Vous l'ouvrez dans Excel, il a l'air juste ; vous le donnez à un programme ou à une IA, qui le lit à son tour. Entre les deux, le code postal 01000 est devenu 1000, la ville Évry s'affiche « Évry », et un montant écrit 12,5E3 vaut maintenant 12 500. Rien ne l'a signalé.
Ce n'est pas une erreur de l'IA : c'est la façon dont les fichiers circulent. Un CSV n'a ni type ni encodage déclarés ; la norme elle-même parle de virgules, quand un tableur français sépare par des points-virgules. Le programme qui l'ouvre devine, et chaque devinette fausse se propage à tout ce qui suit : l'extraction, le calcul, la réponse de l'assistant.
Principe
Avant de regarder : dans la ligne « C-0042;Bourg-en-Bresse;01000;1250,50;03/04/2026 », combien de valeurs un tableur peut-il changer en l'ouvrant ?
Six pièges, et le réflexe contre chacun
- Le zéro de tête01000 devient 1000 : codes postaux, numéros de client, référencesla parade : texte
- Le nombre trop longau-delà de 15 chiffres, Excel arrondit ; les derniers deviennent des zérosla parade : texte
- La lettre E12,5E3 ou 1E5 lus comme des nombres en notation scientifiquela parade : texte
- La date devinéeun identifiant fait de lettres et de chiffres, ou 03/04 : le 3 avril ou le 4 mars ?la parade : AAAA-MM-JJ
- Le séparateurvirgule ou point-virgule, virgule décimale ou point : tout tient dans une seule colonnela parade : déclaré
- L'encodageun fichier en UTF-8 lu en Windows-1252 : « Évry » devient « Évry »la parade : UTF-8
Trois : le code postal perd son zéro ; le montant n'est un nombre que si la virgule est la virgule décimale attendue ; la date devient un jour ou un autre selon les réglages. Le principe tient en une phrase : tant qu'une valeur n'a pas été vérifiée, elle reste du texte.
Fonctionnement
Un même fichier fabriqué, lu de quatre façons par un petit programme Python, sans modèle d'IA : chaque lecture rate quelque chose, sauf la dernière, qui lit tout en texte et vérifie.
clients.csvcode_client;ville;code_postal;montant;date C-0042;Bourg-en-Bresse;01000;1250,50;03/04/2026 C-0043;Évry;91000;980,00;04/03/2026 C-0044;Saint-Étienne;42000;12,5E3;2026-04-05
lire.py"""Un même fichier, trois lectures. Fichier fabriqué : clients.csv, séparé par des points-virgules,
écrit en UTF-8 par un tableur français."""
import csv
brut = open("clients.csv", "rb").read()
print("1. Lu avec le mauvais encodage (Windows-1252 au lieu d'UTF-8) :")
print(" ", brut.decode("cp1252").splitlines()[2])
print("2. Lu avec la virgule comme séparateur :")
with open("clients.csv", encoding="utf-8", newline="") as f:
print(" ", next(csv.reader(f, delimiter=","))[:3], "...")
print("3. Lu comme il faut, puis converti sans précaution :")
with open("clients.csv", encoding="utf-8", newline="") as f:
for ligne in csv.DictReader(f, delimiter=";"):
cp = int(ligne["code_postal"]) # le zéro de tête disparaît
montant = float(ligne["montant"].replace(",", "."))
print(f" {ligne['code_client']} : code postal {cp}, montant {montant}, date {ligne['date']}")
print("4. Lu prudemment : tout en texte, puis vérifié par des règles :")
import re
with open("clients.csv", encoding="utf-8", newline="") as f:
for ligne in csv.DictReader(f, delimiter=";"):
alertes = []
if not re.fullmatch(r"\d{5}", ligne["code_postal"]):
alertes.append("code postal")
if not re.fullmatch(r"\d+(,\d{1,2})?", ligne["montant"]):
alertes.append("montant illisible : " + ligne["montant"])
if not re.fullmatch(r"\d{4}-\d{2}-\d{2}", ligne["date"]):
alertes.append("date ambiguë : " + ligne["date"])
print(f" {ligne['code_client']} {ligne['code_postal']} :", "; ".join(alertes) or "conforme")python3 lire.py1. Lu avec le mauvais encodage (Windows-1252 au lieu d'UTF-8) : C-0043;Évry;91000;980,00;04/03/20262. Lu avec la virgule comme séparateur : ['code_client;ville;code_postal;montant;date'] ...3. Lu comme il faut, puis converti sans précaution : C-0042 : code postal 1000, montant 1250.5, date 03/04/2026 C-0043 : code postal 91000, montant 980.0, date 04/03/2026 C-0044 : code postal 42000, montant 12500.0, date 2026-04-054. Lu prudemment : tout en texte, puis vérifié par des règles : C-0042 01000 : date ambiguë : 03/04/2026 C-0043 91000 : date ambiguë : 04/03/2026 C-0044 42000 : montant illisible : 12,5E3
Essayé le 9 octobre 2026 avec Python 3.12.7.
Ce que montre la sortie : l'encodage faux abîme chaque accent ; le mauvais séparateur met toute la ligne dans une colonne ; la conversion sans précaution efface le zéro de 01000 et transforme 12,5E3 en 12 500 ; la lecture prudente garde 01000, signale le montant illisible et les deux dates ambiguës, sans rien corriger d'office.
Exemple détaillé
Deux cas publics, et la réponse de Microsoft. Aucun ne tient à l'IA : ils tiennent aux fichiers, et touchent pareil un programme ou un assistant qui les lit.
- 2004 à 2015Des noms de gènes changés en datesLe défaut est décrit dès 2004 ; en 2016, des chercheurs passent au crible 35 175 fichiers Excel joints à des articles de dix-huit revues, de 2005 à 2015 : environ un cinquième des articles qui joignent des listes de gènes en Excel contiennent des noms convertis.
- Octobre 2020Des cas de Covid-19 laissés de côtéEn Angleterre, des résultats de tests passent par des modèles au format XLS, limité à environ 65 000 lignes ; chaque modèle tient environ 1 400 cas ; au-delà, les suivants sont laissés de côté. Près de 16 000 cas ne sont pas signalés à temps. Le format XLSX, en service depuis 2007, en aurait tenu seize fois plus.
- Octobre 2023Excel laisse couper ses conversionsMicrosoft rend réglables quatre conversions automatiques : les zéros de tête, les nombres au-delà de 15 chiffres, la notation scientifique autour de la lettre E, et les textes changés en dates.
Risques
- L'erreur silencieuse : ni le tableur ni le programme ne préviennent ; la valeur fausse a l'air d'une valeur juste.
- L'IA qui corrige d'elle-même : un assistant à qui l'on donne un tableau abîmé peut compléter ou « réparer » une valeur ; d'où des règles dans le programme, et la valeur d'origine gardée (faire sortir les chiffres d'un document).
- Le fichier réenregistré : ouvrir un CSV dans Excel puis l'enregistrer fige les conversions dans le fichier ; l'original est perdu s'il n'a pas été gardé.
- La date à double sens : 03/04/2026 est le 3 avril en France et le 4 mars aux États-Unis ; seule la forme AAAA-MM-JJ ne se lit que d'une façon.
- La limite de lignes : 1 048 576 lignes par feuille dans Excel ; au-delà, un tableur n'est plus l'outil.
Mise en place
Garder l'original, intact
Ce qu'on fait : le fichier reçu, rangé à part, jamais réenregistré ; on travaille sur une copie.
Importer plutôt qu'ouvrir
Excel : Données › À partir d'un fichier texte/CSV
Ce qu'on fait : l'import laisse choisir l'origine du fichier, le séparateur et le type de chaque colonne : Texte pour les codes et les identifiants.
Couper les conversions automatiques d'Excel
File › Options › Data › Automatic Data Conversion
Ce qu'on fait : les quatre cases décochées : zéros de tête, 15 chiffres, lettre E, dates ; libellés en anglais, tels que Microsoft les publie.
Dans un programme, tout lire en texte
Ce qu'on fait : le module csv de Python rend du texte ; on convertit ensuite, colonne par colonne, ce qui doit être un nombre ou une date.
Vérifier par des règles avant de calculer
Ce qu'on fait : cinq chiffres pour un code postal, une forme de montant, des dates AAAA-MM-JJ ; ce qui échoue est signalé, pas corrigé d'office.
Compter
Ce qu'on fait : le nombre de lignes reçues et lues, les totaux de contrôle : une ligne perdue se voit au compte.
Échanger en XLSX, en UTF-8, avec des dates AAAA-MM-JJ
Ce qu'on fait : et jamais en XLS, limité à environ 65 000 lignes.
Exercice
Un fichier fabriqué de cinq clients, déjà passé par un tableur. Repérez chaque valeur abîmée ou douteuse, et dites quelle règle l'aurait arrêtée.
clients-recus.csvcode_client;ville;code_postal;montant;date C-0101;Le Puy-en-Velay;43000;2 150,00;2026-03-12 C-0102;Ajaccio;20000;0,00;12/03/2026 C-0103;Châlons;51000;845,5;2026-02-30 C-0104;Bourg-en-Bresse;1000;1250,50;2026-04-01 C-0105;Saint-Malo;35400;1E4;2026-04-15
Voir la correction
C-0101« 2 150,00 » : une espace dans le montant ; selon le programme, elle bloque la conversion ou coupe le nombre. Règle : la forme du montant.
C-0102La date 12/03/2026 : le 12 mars ou le 3 décembre, selon le pays. Règle : les dates en AAAA-MM-JJ.
C-0103Le 30 février n'existe pas. Règle : une date valide au calendrier.
C-0104Le code postal 1000 a perdu son zéro de tête : 01000. Règle : cinq chiffres.
C-0105« 1E4 » : un montant en notation scientifique, lu 10 000. Règle : la forme du montant ; puis demander la valeur d'origine.
Vérification
1ComprendrePourquoi un fichier peut-il être abîmé sans que personne ne s'en aperçoive ?
Parce que le tableur ou le programme qui l'ouvre devine le séparateur, l'encodage et le type des colonnes, et convertit sans prévenir ; la valeur fausse a la forme d'une valeur juste.
2ComprendreQue fait Excel, par défaut, d'un code postal 01000 ?
Il le lit comme un nombre et enlève le zéro de tête : 1000 ; depuis 2023, cette conversion peut se couper dans les options.
3AppliquerUn fichier de commandes doit passer d'un logiciel à un autre par un programme. Quelles précautions ?
Garder l'original, tout lire en texte, convertir colonne par colonne, vérifier par des règles et compter les lignes ; échanger en UTF-8, avec des dates AAAA-MM-JJ.
Lectures suivantes
Pièges des fichiers de données
Les pages qui renvoient ici
Limites et sources
Les fichiers sont fabriqués ; le programme a tourné sur un poste de Meridal, sans modèle.
Les libellés des options d'Excel sont ceux de Microsoft en anglais ; la version française n'a pas été trouvée.
- Microsoft, conversions de données ; Microsoft, fichiers texte et CSV ; Genome Biology, 2016 ; BBC, 5 octobre 2020 ; RFC 4180.
- Le code :
apprendre/pages/construire/casse-fichier/code/.
Écrit par Meridal, avec l'aide de l'IA ; chaque fait vérifié à sa source et relu avant publication. Texte et schémas sous licence CC BY 4.0 : reprenez-les en citant Meridal. Le code sous licence MIT.
Ne plus recopier d'un logiciel à l'autre
1 100 € à 3 400 €, puis sur devis