Aucun upload, 100 % local, sans compte

Article

Pourquoi Excel abîme vos fichiers CSV

Un identifiant patient qui commence par trois zéros. Un gène nommé SEPT2. Un numéro de compte à seize chiffres. Ouvrez n'importe lequel dans un tableur comme simple fichier CSV, et l'import Excel ne se contente pas de les afficher, il les réécrit : les zéros disparaissent, le nom du gène devient une date, et le numéro de compte perd ses derniers chiffres. Rien de tout cela n'est vraiment un bug, c'est ce qui se passe quand un devineur générique de nombres et de dates rencontre du texte qui ressemble seulement à un nombre ou une date. Voici ce qui arrive réellement à un fichier CSV dès qu'Excel l'ouvre, et comment l'empêcher avant que cela n'arrive.

Les zéros initiaux disparaissent

Tapez 02134 dans une cellule et le type de colonne par défaut d'Excel, Standard, le lit comme un nombre et retire le zéro initial : 2134. Cela touche tout code stocké sous forme de chiffres mais qui n'est pas vraiment une quantité : codes postaux américains, codes postaux français, numéros d'employé ou de facture, numéros de téléphone. Techniquement, rien n'est perdu dans le fichier CSV sous-jacent, le texte à côté de la cellule reste inchangé, jusqu'à ce que vous enregistriez le classeur, moment où Excel réécrit ce qu'il affichait, et les zéros disparaissent pour de bon. La solution consiste à dire à Excel que la colonne est du texte avant qu'il ait l'occasion de deviner : via Données > À partir d'un fichier texte/CSV (ou Obtenir des données > À partir d'un fichier), vous pouvez définir explicitement le type de données de chaque colonne, ou ajouter une apostrophe avant une valeur dans une seule cellule pour forcer le texte.

Le type de colonne Standard d'Excel lisant le texte 02134 comme un nombre et retirant le zéro initial pour afficher 2134

Le texte se transforme en dates sans prévenir

Le même devineur cherche aussi du texte qui ressemble à une date. Une cellule contenant MAR1 ou SEPT2, lue comme le 1er mars ou le 2 septembre, est silencieusement convertie en valeur de date et reformatée, sans aucun avertissement affiché. Ce n'est pas hypothétique : en 2020, le HUGO Gene Nomenclature Committee a renommé environ 27 symboles de gènes humains, dont SEPT2 et MARCH1, spécifiquement parce que les tableurs continuaient à les transformer en dates à chaque ouverture d'un jeu de données, un problème assez sérieux pour qu'une étude de 2016 sur des articles de génomique ait trouvé des erreurs d'autocorrection de ce type dans environ une publication sur cinq ayant fourni des fichiers Excel en annexe. La leçon dépasse les noms de gènes : tout code alphanumérique court qui ressemble à un jour et un mois est à risque dès que quelqu'un ouvre votre CSV dans un tableur, pas seulement le vôtre.

Les très longs nombres perdent leurs derniers chiffres

Excel stocke chaque nombre comme une valeur à virgule flottante avec une précision de 15 chiffres significatifs, une limite documentée directement par Microsoft. Un numéro de carte ou de compte à seize chiffres comme 4111111111111111 est arrondi pour tenir dans cette limite, donc le dernier chiffre ou les deux derniers se transforment silencieusement en zéro et la valeur n'est plus celle que vous avez tapée. Reformater la cellule ensuite ne fera pas revenir les chiffres manquants, parce que le nombre stocké en interne a déjà été arrondi ; la seule solution est d'importer la colonne comme du texte, ou de préfixer la valeur d'une apostrophe, avant qu'Excel ne la traite comme un nombre.

Excel ne conserve que 15 chiffres significatifs d'un nombre : la valeur à 16 chiffres 4111111111111111 est arrondie et son dernier chiffre devient zéro

Le texte accentué se transforme en charabia

L'encodage est un mode de défaillance distinct de l'autocorrection. Un fichier CSV sans marqueur d'ordre des octets n'est que des octets bruts ; s'il a été enregistré en UTF-8, Excel sous Windows l'ouvrira en général en supposant plutôt la page de code du système, donc les lettres accentuées, les symboles monétaires et les emoji ressortent en charabia, une chaîne comme café apparaissant sous une forme proche de café. La solution sûre quand vous produisez un CSV pour Excel est de l'enregistrer en CSV UTF-8 ou d'ajouter un marqueur d'ordre des octets UTF-8 ; la solution sûre quand vous en recevez un est de l'importer via Données > À partir d'un fichier texte/CSV, qui permet de choisir explicitement l'encodage source plutôt que de faire confiance à un double-clic pour deviner juste.

Transférer des données entre formats sans ouvrir Excel

Rien de tout cela n'est vraiment un bug Excel, c'est exactement ce que le devineur de nombres et de dates d'un tableur est conçu pour faire, et cela s'applique quel que soit le tableur qui ouvre le fichier, pas seulement Excel. Le moyen le plus sûr de retravailler un fichier CSV ou de vérifier qu'une colonne reste bien du texte avant qu'il n'atteigne un tableur est de le traiter directement : notre convertisseur de données analyse le CSV avec un analyseur standard sensible aux guillemets et ne réinterprète jamais le type d'une valeur, donc un code postal ou un nom de gène reste exactement le texte que vous avez fourni. Il tourne entièrement dans votre navigateur, rien de ce que vous collez n'est envoyé où que ce soit. Cela ne protège toutefois que l'étape de conversion : si le résultat finit quand même par être ouvert dans un tableur ensuite, marquez les colonnes sensibles comme du texte là aussi.

Outils mentionnés dans cet article

Questions fréquentes

Comment empêcher Excel de retirer les zéros initiaux d'un CSV ?

N'ouvrez pas le fichier par un double-clic. Importez-le plutôt via Données > À partir d'un fichier texte/CSV (ou Obtenir des données), qui affiche un sélecteur de type de données colonne par colonne ; réglez la colonne code postal, identifiant ou téléphone sur Texte avant de terminer l'import. Une solution rapide cellule par cellule consiste à taper une apostrophe avant la valeur, comme '02134, ce qui force le texte sans changer ce qui est affiché.

Pourquoi Excel a-t-il transformé mon identifiant ou mon code en date ?

Le type de colonne Standard d'Excel cherche activement du texte qui ressemble à une date, des motifs comme un mot court suivi d'un nombre, ou deux nombres séparés par un tiret ou une barre oblique, et convertit tout ce qui correspond, sans demander confirmation. C'est exactement ce qui a forcé le renommage de symboles de gènes comme SEPT2 et MARCH1 en 2020. Importez la colonne comme Texte, de la même façon que pour les zéros initiaux, pour empêcher la supposition avant qu'elle ne se produise.

Convertir mon CSV autrement évite-t-il entièrement ces problèmes ?

Cela les évite pour cette étape de conversion, pas pour toujours. Un analyseur qui traite chaque champ comme du texte brut, comme notre convertisseur de données, ne réécrira pas un code postal ou un nom de gène en transformant un CSV en JSON. Mais si le résultat finit quand même par être ouvert dans un tableur plus tard, par vous ou par son destinataire, l'import de ce programme a une nouvelle occasion de réinterpréter les valeurs, donc les colonnes sensibles doivent aussi y être marquées comme du texte.

Sources