XL 2016 VBA - Impossible: c <> Chr(Asc(c)) ! Unicode Character 'NARROW NO-BREAK SPACE'

Dudu2

XLDnaute Barbatruc
Bonjour,

D'une feuille récupérée de Google Sheets ou les nombres sont en String, j'essaie de les transformer en nombres.
Le blanc insécable Chr(160) est bien présent et pourtant je n'arrive pas à l'identifier dans un Instr().
De plus pour ce caractère c <> Chr(Asc(c)).

C'est le b.a. ba du VBA et je n'y comprends rien !
Une idée ? Merci.
 

Pièces jointes

  • FromGoogleSheets.xlsm
    24.2 KB · Affichages: 7

Dudu2

XLDnaute Barbatruc
Oui bien sûr, je sais bien que Asc et AscW donnent le même résultat sur un caractère ASCII.
C'est d'ailleurs parfaitement décrit dans la doc Microsoft.

Mais je ne vais utiliser AscW uniquement pour convertir le NNBSP en Chr(160) préalablement au traitement. Et dans le traitement je n'utilise ni Asc ni AscW.
Si je teste (c >=0 and c <= 9) Or (c = Application.ThousandsSeparator) , si c'est un caractère UNICODE autre que NNBSP, le résultat sera faux.
 

Dudu2

XLDnaute Barbatruc
Alors, je pourrais étendre l'acceptation du UNICODE aux autres caractères. Auquel cas je m'intéresserais effectivement à la différence entre Asc et AscW.
Mais je ne sais pas jusqu'où une fonction de conversion (ex. StrConv(x, vbFromUnicode) est capable de donner un résultat valide/correct. Cette même fonction n'étant pas capable de convertir le NNBSP.
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour le fil,

La formule ci-dessous ainsi que la macro, fonctionnent sur le tableau de chaînes de caractères du fichier du post#1 :
=CNUM(SUBSTITUE(C5;UNICAR(8239);""))
VB:
Sub Remplacer()
    Dim tbl As Variant
    Dim i As Integer, cpt As Integer
    tbl = Sheets("exemple").Range("C5:C8").Value
    cpt = UBound(tbl)
    For i = 1 To cpt
        tbl(i, 1) = Replace(Replace(tbl(i, 1), ChrW(8239), ""), ",", ".")
    Next i
'  Nouvelles valeur en colonne A pour exemple
    Sheets("exemple").Range("A5:A8") = tbl
End Sub

Cordialement
 

Pièces jointes

  • FromGoogleSheets - conversion.xlsm
    30.6 KB · Affichages: 9

Dudu2

XLDnaute Barbatruc
Bonjour @Hasco,
Cette fois j'ai vu ton message :cool:
Merci à toi pour ce code et la formule.
Et merci à tous pour vos contributions salutaires
1647094745381.gif
 

LammariOm

XLDnaute Nouveau
Bonjour le fil,

La formule ci-dessous ainsi que la macro, fonctionnent sur le tableau de chaînes de caractères du fichier du post#1 :

VB:
Sub Remplacer()
    Dim tbl As Variant
    Dim i As Integer, cpt As Integer
    tbl = Sheets("exemple").Range("C5:C8").Value
    cpt = UBound(tbl)
    For i = 1 To cpt
        tbl(i, 1) = Replace(Replace(tbl(i, 1), ChrW(8239), ""), ",", ".")
    Next i
'  Nouvelles valeur en colonne A pour exemple
    Sheets("exemple").Range("A5:A8") = tbl
End Sub

Cordialement
Merci beaucoup 👌
 

LammariOm

XLDnaute Nouveau
Bonjour le fil,

La formule ci-dessous ainsi que la macro, fonctionnent sur le tableau de chaînes de caractères du fichier du post#1 :

VB:
Sub Remplacer()
    Dim tbl As Variant
    Dim i As Integer, cpt As Integer
    tbl = Sheets("exemple").Range("C5:C8").Value
    cpt = UBound(tbl)
    For i = 1 To cpt
        tbl(i, 1) = Replace(Replace(tbl(i, 1), ChrW(8239), ""), ",", ".")
    Next i
'  Nouvelles valeur en colonne A pour exemple
    Sheets("exemple").Range("A5:A8") = tbl
End Sub

Cordialement
Merci beaucoup 👌
 

Statistiques des forums

Discussions
314 486
Messages
2 110 115
Membres
110 672
dernier inscrit
CHACHALUBAN