Lu76Fer
XLDnaute Occasionnel
Les chiffres Unicode
C'est en manipulant des caractères Unicode simple que je me suis aperçu que le symbole affiché dans une cellule n'était pas le bon. En creusant, je me suis aperçu qu'en affectant certain Unicode à une cellule Excel ceux-ci se changeait en code Ascii. En faite, c'est le format qui bascule de "Standard" vers un format Nombre quand le symbole Unicode est considéré comme un chiffre.
Pour une raison pratique, les chiffres sont toujours manipulés avec des codes Ascii de 48("0") à 57("9") du coup un symbole Unicode chiffré est converti en symbole Ascii mais pour afficher ce nombre selon la langue ou la zone territoriale un préfixe est ajouté au format nombre; par exemple : [$-pa-IN,600] pour l'Inde.
En cherchant de la documentation sur le Net, j'ai trouvé très peu d'élément sur le sujet, du coup je partage ma synthèse de tout cela :
- La correspondance entre région et format d'après Boby :
- Comment gérer les nombres thaïlandais dans Excel et Power BI par Sira Ekabut
Voici une synthèse des données réunies avec tous les formats, les langues et les chiffres Unicode :
Pour avoir le tableau complet des chiffres Unicode, ce petit bout de code permet de scanner tous les codes en testant chacun pour savoir s'il change de code. A exécuter depuis une feuille vierge (je ne parle pas de feuille A4 😉).
VB:
'Permet de scanner tous les Unicodes pour savoir quelles sont les symboles interprétés
'en tant que chiffre à partir d'une feuille vierge
Sub ScanUnicode() 'Durée #1 minutes
Dim sChr$, yChr(1) As Byte, iCode%, iCharset%, £crt As Range
Dim y() As Byte, iCrtCharset%, iPos%
Set £crt = [B1]
For iCharset = 0 To 255
yChr(1) = iCharset
For iCode = 0 To 255
yChr(0) = iCode: sChr = yChr
[A1] = sChr: DoEvents
sChr = [A1]: y = sChr
If sChr <> "" Then
If y(1) <> iCharset Or y(0) <> iCode Then
If iCrtCharset <> iCharset Then Set £crt = £crt.Offset(1): iPos = 0: £crt = iCharset: iCrtCharset = iCharset
iPos = iPos + 1: £crt.Offset(, iPos) = iCode & " (" & CStr(y(1) * 256 + y(0) - 48) & ")" 'y(0)
[A1].NumberFormat = "General"
End If
End If
Next iCode
Next iCharset
[A1] = "": [B1] = "Charset": [C1] = "Codes"
End Sub
J'ajoute également le classeur Excel contenant le tableau avec les chiffres formatés ainsi qu'un tableau avec les cellules au format texte(@) comportant directement chaque symbole Unicode.
Pièces jointes
Dernière édition: