
Import CSV pour QR codes en masse : préparer, vérifier, générer
Mille deux cents étiquettes d'équipement sont revenues de l'imprimeur et ont été posées sur des machines réparties sur quatre sites. Trois semaines plus tard, un technicien signale qu'une étiquette de compresseur ouvre une page cassée, puis une autre. Au total, quarante et une étiquettes défectueuses, toutes issues du même bloc de lignes du tableau, toutes avec une URL tronquée d'un caractère.
La cause était une virgule. Quelqu'un avait saisi dans un champ une note de localisation indiquant "Bâtiment 4, Travée 2", le fichier a été enregistré en CSV, et l'analyseur à l'autre bout a lu cette virgule comme une fin de colonne. Tout ce qui suivait s'est décalé d'une place vers la gauche.
La génération en masse est un problème de données déguisé en problème graphique. Presque toutes les défaillances à grande échelle remontent au tableau.
Concevoir le tableau avant tout export
La règle de base tient en une phrase : une ligne par code, un code par ligne. Tout ce qui rend un tableur agréable à lire pour un humain se retourne ici contre vous, donc pas de cellules fusionnées, pas de ligne de totaux en bas, pas de ligne vide glissée entre deux lots pour aérer la lecture, et pas de colonne de commentaires en texte libre.
Les colonnes qui valent la peine :
- Un identifiant que vous attribuez et ne modifiez jamais. Pas le numéro de ligne, et rien qui bouge quand le tableau est retrié. C'est la clé à laquelle tous les autres systèmes font référence, y compris les noms de fichiers de votre imprimeur.
- L'URL de destination, complète, avec son schéma.
- Un libellé ou un nom conforme à la convention de nommage que vous utilisez.
- Les métadonnées dont vous aurez besoin plus tard : site, emplacement, responsable, lot d'impression, date.
Donnez au fichier une ligne d'en-tête avec des noms courts et lisibles par une machine. Évitez les espaces et la ponctuation dans les en-têtes, car certains importateurs les gèrent mal et d'autres les renomment en silence.
L'habitude la plus destructrice est la renumérotation. Vous triez le tableau, vous régénérez des identifiants séquentiels, et chaque référence dans chaque autre système pointe désormais vers le mauvais objet alors que les étiquettes sont déjà vissées sur les machines.
Les pièges du séparateur et des guillemets
Le CSV n'a pas de schéma et seulement des conventions faibles. Ce qui casse :
- Les virgules à l'intérieur des valeurs. Un champ entre guillemets gère cela correctement, mais seulement si l'outil qui a écrit le fichier a bien mis les guillemets. Les exports de tableur le font généralement. Les fichiers modifiés à la main et les scripts rapides, souvent pas.
- Les guillemets à l'intérieur d'un champ entre guillemets, qui doivent être doublés. Un nom de produit contenant un symbole pouce suffit à faire dérailler une ligne.
- Les sauts de ligne à l'intérieur d'un champ. Quelqu'un colle une adresse sur plusieurs lignes dans une cellule de libellé, une ligne en devient deux, et la seconde a perdu la plupart de ses colonnes.
- Un nombre de colonnes incohérent d'une ligne à l'autre, que les importateurs traitent différemment et acceptent parfois sans broncher.
Deux défenses. Exportez depuis le tableur plutôt que de composer le CSV à la main. Et si l'outil l'accepte, utilisez plutôt des valeurs séparées par des tabulations, car une tabulation n'apparaît presque jamais dans une URL ou un libellé, là où les virgules sont partout.
Ajoutez une colonne de validation qui signale tout champ texte contenant une virgule, un guillemet ou un saut de ligne, et vérifiez-la avant l'export. La détecter dans le tableau ne coûte rien. La détecter après un tirage, si. Ce contrôle appartient à la même routine que l'étape de génération en masse elle-même.
L'encodage est le piège que personne ne cherche
Un fichier CSV ne déclare pas son propre encodage, alors le lecteur devine.
Enregistrez en UTF-8. Si les libellés contiennent des caractères accentués, des écritures non latines ou des symboles monétaires, un fichier écrit dans une page de code ancienne arrive en charabia, et ce charabia se retrouve encodé dans les codes eux-mêmes. Ce qui finit à l'intérieur du symbole dépend de détails au niveau des octets, invisibles dans le tableur : c'est le terrain de l'encodage des caractères et de l'ECI.
Surveillez aussi la marque d'ordre des octets en début de fichier. Elle apparaît sous forme de caractères parasites collés au premier nom d'en-tête, ce qui casse discrètement le mappage de la première colonne.
Si un libellé ou une URL contient des caractères non ASCII, générez un code, décodez-le et relisez la chaîne avant de lancer le reste. Le non-ASCII consomme aussi plus de capacité que l'ASCII simple, ce qui compte sur les codes denses. Les limites sont détaillées dans combien de données contient un QR code.
Ce que les tableurs font à vos données sans rien demander
C'est là que vit la corruption silencieuse, parce que rien de tout cela ne produit de message d'erreur.
- Les zéros initiaux disparaissent. L'identifiant 00742 devient 742 dès que la colonne est traitée comme un nombre.
- Les longs nombres passent en notation scientifique. Un numéro de série à douze chiffres s'affiche et s'exporte en 1.23457E+11.
- Au-delà de quinze chiffres, les nombres perdent leur fin à cause de la virgule flottante et sont irrécupérables.
- Les valeurs qui ressemblent à des dates deviennent des dates. Un code écrit 12-3 se transforme en une date de décembre ou de mars selon la locale.
- La correction automatique transforme les guillemets droits et les traits d'union en versions typographiques. Une apostrophe courbe dans un libellé est cosmétique. Un trait d'union typographique dans une URL est fatal, et à l'écran il ressemble presque au vrai.
- Le copier-coller depuis une page web embarque des espaces insécables et des espaces de fin avec le texte.
Correctifs par ordre de fiabilité : passez le format de colonne en Texte avant d'y coller quoi que ce soit ; à l'import, choisissez explicitement Texte pour les colonnes d'identifiant et d'URL au lieu d'accepter la valeur par défaut ; désactivez la correction automatique dans tout tableau qui contient des URL. Reformater une colonne après coup ne restaure pas ce qui a été perdu, cela change seulement l'affichage de la valeur abîmée.
Valider les destinations avant de générer
Exécutez ces contrôles sur le tableau, pas sur les visuels finis.
- Chaque URL s'analyse correctement et possède un schéma. Les lignes commençant par "www." sont les coupables habituels.
- Chaque URL répond. Notez le statut et l'adresse finale après redirections.
- Signalez tout ce qui n'est pas un succès direct. Une destination qui redirige aujourd'hui est une destination qui renverra 404 un jour.
- Signalez les URL en double qui devraient être uniques, et les URL uniques qui auraient dû être en double.
- Vérifiez la longueur. Les URL de suivi très longues produisent des codes denses qui se scannent mal en petit format, et les raccourcir maintenant est bien plus simple qu'après impression. Une URL courte derrière le code est la voie habituelle.
- Comparez le nombre de lignes de votre tableau avec le nombre annoncé par le générateur. Un écart est le signal le plus rapide possible que l'analyse a mal tourné.
Le contrôle qualité : décoder un échantillon, comparer à la ligne
Après la génération et avant l'impression, choisissez l'échantillon délibérément plutôt qu'au hasard.
Prenez la première ligne, la dernière ligne, chaque ligne contenant un caractère non ASCII, chaque ligne avec une virgule ou un guillemet dans un champ quelconque, et cinq pour cent au hasard du reste. C'est dans ces catégories que les erreurs se concentrent.
Décodez chaque image retenue avec un lecteur et comparez la chaîne décodée à sa ligne source, caractère par caractère. Faites la comparaison avec une formule ou un script plutôt qu'à l'œil. La relecture humaine de longues URL avec paramètres de suivi a un taux de détection médiocre, et le mode de défaillance est un seul mauvais caractère au milieu.
Imprimez ensuite une épreuve à la taille finale sur le matériau réel et scannez-la sur papier. Le décodage à l'écran prouve que les données sont bonnes. Le papier prouve que le code est utilisable, et les deux échouent pour des raisons complètement différentes, ce qui explique que les tests d'impression ne remplacent ni l'un ni l'autre.
Et en France ?
Deux pièges reviennent dans presque tous les fichiers préparés en France.
Les numéros de téléphone. Excel prend « 0612345678 » pour un nombre et supprime le zéro initial. Pour des vCards ou des codes d'appel, formatez la colonne en texte, ou mieux, saisissez les numéros au format international : +33 6 12 34 56 78, sans le zéro après l'indicatif. Ce format fonctionne aussi pour les touristes étrangers qui scannent le code.
Le séparateur. Un Excel réglé en français exporte le CSV avec des points-virgules. Vérifiez ce qu'attend votre générateur avant l'import, et enregistrez le fichier en UTF-8 pour conserver les accents des noms et des adresses.
Conserver le tableau comme trace de ce qui a été imprimé
Le tirage terminé, verrouillez le fichier et rangez-le avec le dossier de production plutôt que de le laisser traîner dans un répertoire de travail. C'est cette copie figée qui vous dira, deux ans plus tard, quelle ligne du tableau a donné quelle étiquette, et c'est la seule pièce capable de répondre à cette question une fois les étiquettes parties sur le terrain.
Indiquez la date d'export, les réglages du générateur utilisés, l'imprimeur et le numéro de commande, la quantité produite et la destination du matériel. Nommez le fichier avec l'identifiant du lot pour qu'on puisse le retrouver à partir de n'importe quelle étiquette isolée.
Dans deux ans, un technicien envoie la photo d'une étiquette illisible sur laquelle le numéro d'inventaire est encore visible. Si le tableau est archivé, répondre est une simple recherche. Sinon, répondre est une supposition.
Figez votre prochain export avant qu'il ne parte chez l'imprimeur, et ajoutez l'étape de décodage et de comparaison à la checklist de production, avant la signature de validation.
