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

  • Initiateur de la discussion Initiateur de la discussion Dudu2
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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.
 
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.
 
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

Bonjour @Hasco,
Cette fois j'ai vu ton message 😎
Merci à toi pour ce code et la formule.
Et merci à tous pour vos contributions salutaires
1647094745381.gif
 
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 👌
 
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 👌
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour