Rechercher dans ce blog

Ce blog vous a été utile ?

Si les conseils et cas pratiques de ce blog vous ont rendu service, et si vous trouvez équitable d'encourager son auteur, il vous propose de vous rendre sur le site des éditions AO et d'y commander un livre de votre choix. Vous verrez, il y a de nombreux titres au catalogue – en plus des 100 conseils pour mieux utiliser Excel.

vendredi 6 novembre 2009

Foutus espaces

Avez-vous remarqué combien les informaticiens sont fâchés avec les espaces ? N'avez-vous pas été irrité lorsqu'ils usent et abusent des tirets bas (underscore) et autres points ou tirets, comme par exemple je_naime_pas_les_espaces ? Vous aurez constaté aussi qu'ils les excluent des noms de fichiers, en collant les mots, par exemple : maLettreDu15novembre.doc Les espaces n'existent pas non plus dans les noms de domaines ou dans les adresses e-mail.

Pour ma part, j'adore les espaces en typographie, en particulier ceux qui sont insécables pour éviter de renvoyer bêtement en début de ligne un point d'exclamation, un point d'interrogation ou un guillemet fermant.

Les typographes parlent d'espaces au féminin, une espace. Je resterai dans cet article sur le masculin, excusez-moi, car je ne suis ici qu'informaticien.

Un grand classique de bugs et de tourments est la présence d'espaces superflu(e)s à la fin de cellules Excel. J'ai vu des utilisateurs taper, en un réflexe venu d'on ne sait où, un espace à la fin de chaque saisie de cellule, ce qui peut donner d'étranges résultats. Jugez-en.


Considérez les deux cellules ci-dessus, aux contenus en apparence identiques. Testez leur égalité en demandant à Excel si AB2 (à ma gauche) est égale à AD2 (à ma droite). Réponse ?



FAUX. Tatoufaux, comme m'appelaient certains copains de classe. Tafforeau n'est pas égal à Tafforeau. Voici que je me dédouble, que j'acquiers un don d'ubiquité. On se calme. Entrons en saisie dans la cellule de droite :


Comme l'indique le curseur, décalé sur la droite, il y a un espace après le U. Voici pourquoi Excel ne peut considérer, dans sa grande sagesse, que la chaîne
“Tafforeau”
serait égale à la chaîne
“Tafforeau ”.
Vous imaginez les troubles immenses, les vertiges métaphysiques qui peuvent en résulter lors de traitements automatisés ?


Une anecdote récente vécue avec un client montre pourtant combien les espaces peuvent compliquer le maniement de données informatiques.

Imaginons que vous récupériez des données dans un classeur Excel à partir d'un système informatique extérieur. Parmi ces données vous disposez de codes EAN, vous savez, ces codes qui accompagnent les codes à barre. Ils comportent un grand nombre de chiffres, 13 le plus souvent.

Voici l'EAN récupéré. À première vue rien d'extraordinaire.



Premier test : pour voir s'il s'agit bien d'un nombre, en vue par exemple de tris, vous tentez d'ajouter 10. Flûte et zut : une erreur #VALEUR! indique qu'il s'agit selon toute vraisemblance de texte. La cause devrait en être la présence des espaces, qu'Excel ne reconnaît qu'au texte.
Attention : les espaces placés grâce à des formats d'affichage de cellule ne figurent pas dans le contenu brut de la cellule, ils sont ajoutés “pour faire joli”, mais ne perturbent évidemment pas les contenus.

Qu'à celà ne tienne ! Il suffit de prendre la valeur numérique du code pour récupérer un nombre, avec la fonction CNUM :

 
Encore une #VALEUR! Excel ne parvient pas à trouver la valeur numérique de cette suite de chiffres. Est-il bête ou tout simplement stupide ? Mais on connaît la parade : il suffit de substituer aux espaces un caractère vide, symbolisé par deux guillemets accolés, et, d'un coup d'un seul, tous les espaces seront supprimés. Allons-y :


Toujours rien ! Pourtant, c'est clair, du moins en langue Excel : “je te dis SUBSTITUE dans la cellule F2, à un espace " " une chaîne de caractères vide ""”. Eh ben non, le tableur reste sourd.

Nom d'un cachou ! Il se croit très fort, mais je le suis aussi. Initié à l'ésotérisme, je sais – et j'en suis fier – que le code ASCII de l'espace est le numéro 32. Dans la table des caractères, le A a le code 65, tout le monde le sait (ou presque). Le 13, c'est le retour chariot. Le 32, c'est l'espace. Donc…
Donc je demande – poliment – à Excel de remplacer les caractères de code 32 par rien du tout. Rien du tout ? Rien à faire !


À ce stade, plusieurs solutions sont envisageables :
1. Placer le fichier à la corbeille et l'effacer sauvagement.
2. Jeter l'ordinateur par la fenêtre pour voir s'il comprend la manière forte.
3. Tout laisser tomber et aller fumer une cigarette dehors, par une température de zéro degrés centigrade.


Il existe une quatrième solution.
Il joue les durs ? Il ne sait pas à qui il a affaire.

Ces espaces, là, ils ont forcément un code. Lequel ? On va bientôt le savoir.
Prenons par exemple le deuxième caractère de l'EAN, celui qui apparaît entre le 3 et le 1 de 168. La fonction STXT l'autorise. La syntaxe =STXT(J2;2;1) signifie : donne-moi 1 caractère (paramètre 3) à partir du deuxième (paramètre 2) dans J2 (paramètre 1). Résultat SVP ?



Rien du tout. Le vide. Nada. Normal : un espace ne se voit pas. Et vous, vous voyez que vous commencez à les détester, ces espaces. Y a-t-il quelque chose dans cette fichue cellule ? Nous allons le tester en encadrant notre fonction de deux signes, pour voir.

Souvenez-vous, le signe & symbolise la concaténation, en clair le collage de chaînes de caractères les unes avec les autres. Nous allons placer la lettre A avant et après ce truc bizarre qui ne veut pas s'afficher :



Ah, Ah ! ou Ha ! Ha ! suivant votre humeur. Il y a bien quelque chose entre le 3 et le 1. Certes. Mais quoi ? Eh bien nous allons le demander à Excel. Un exemple pour illustrer la méthode :



Nous avons sélectionné le deuxième caractère de la chaîne ABCD, qui est un B, là on le voit, et demandé son code ASCII, qui est le numéro 66 (A=65 donc B=66). Faisons de même avec l'EAN et son espace :



202. L'espace a été codé 202 ! D'où il sort, celui-là ? Le pire est que, si vous travaillez sur un PC sous Windows, vous aurez un code 160, car les tables ASCII Mac OS et Windows diffèrent partiellement. Peu importe, ce n'est pas un problème. Nous allons, enfin, pouvoir régler son compte à ce code, tout 160 ou 202 qu'il soit, en le remplaçant par rien. Pour tester le remplacement et l'illustrer, commençons par substituer aux caractères codés 202 le signe # par exemple :



Ça marche ! Les espaces ont été remplacés par des #. Passons aux choses sérieuses, si tant est que les “choses” aient été, jusqu'ici, drôles – je note une baisse d'attention de votre part.



Hé ! Hé ! Ou Oooooh ! Plus d'espaces, finis, envolés, dispersés “façon puzzle” dirait Bernard Blier. On a flingué les espaces, façon Tontons flingueurs !

Ne perdons pas le fil. On voulait quoi, déjà ? Que cet EAN devienne un nombre. Prenons sa valeur numérique à nouveau, comme on prend la température d'un malade (la fièvre monte) :



Tiens ? Vous avez remarqué ? L'EAN est désormais aligné à droite, signe qu'Exel a détecté un nombre. Apportons-en la preuve à tous les saint Thomas de l'informatique en lui ajoutant 10, comme au début de ce… roman :



Bingo ! 202 + 10 donne bien 212. Le 3168439189202 est désormais un nombre, soit 3168 milliards, 439 millions, 189 mille et 202 unités.
Rien ne vous empêche d'afficher ce nombre avec les espaces requis qui (quis-qui) seront alors non pas des espaces intégrés dans le contenu de cellule, mais seulement un affichage de cellule (son apparence) :



Nous demandons à notre cher tableur d'utiliser un séparateur de milliers pour faciliter la lecture du nombre.



Et l'affichage est, en apparence seulement, le même que dans la ligne du dessus, avec une différence radicale : il s'agit d'un nombre, susceptible de calculs et de tris, et non d'une chaîne de caractères, par essence stupide – informatiquement parlant, car, amoureux des mots et de l'écriture, je ne me permettrais pas de telles affirmations en dehors d'un blog d'informaticien fou (ou l'étant devenu à la suite de cet exercice de fou).

Repos, vous pouvez fumer !

1 commentaire:

Malika a dit…

C'est excellent!

Je suis impressionnée. Et je vais tacher de lire tout votre blog.
Merci beaucoup.