Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2010 Symbole monétaire changé en point d'interrogation dans fichier CSV

g.milano

XLDnaute Junior
Bonjour

Jusqu’à hier, je pouvais enregistrer des fichiers CSV avec le symbole monétaire yen (¥) ; mais aujourd'hui les symboles sont remplacés par des points d'interrogation. Je ne me souviens pas avoir trifouillé quoi que ce soit dans mes réglages.
J'ai ouvert un fichier ok créé hier (les ¥ y sont toujours) et je l'ai sauvegardé de nouveau : les "¥" sont devenus des "?" dans le nouveau fichier (donc c'est bien un problème logiciel/réglage)

Je vous joins les 2 fichiers, des fois que certains d'entre vous puissent y trouver un indice ou quelque chose.
タグリスト2020-05-20.1.csv (fichier d'hier ok)
タグリスト2020-05-20.1.1.csv (fichier d'hier réenregistrer aujourd'hui et buggé)

Pour information, le fichier CSV est utilisé pour imprimer des étiquettes (donc le prix en format "¥#,##0" est nécessaire) via un logiciel tier (le fichier y est glisser-déposé)

Merci pour votre aide m(_ _)m.

PS : tiens, on ne peut pas joindre de fichier CSV o0!? (je me suis permis de leur rajouter une extension ".xls" ; n'oubliez-pas de les renommer avant de les ouvrir)
 

Pièces jointes

  • タグリスト2020-05-19.1.csv.xls
    8.2 KB · Affichages: 31
  • タグリスト2020-05-20.1.1.csv.xls
    290 bytes · Affichages: 18

Docmarti

XLDnaute Occasionnel
Bonjour fanch55.

Sii tu choisis Japonais (Japon) dans les parametres regionaux et linguisitiques de Windows, il semble que le separateur de liste soit la virgule quand le parametre Local:=True
 

Docmarti

XLDnaute Occasionnel
fanch55


C'est facile de changer de languie.

1. Bouton de droite sur l'icone Demarrer de Windows.
2. Parametres
3. Heure et langue
4. Mise en forme de la date, de l'heure et region
5. Parametres de date, d'heure et regionaux supplementaires
6. Region
7. Dans la section Format: de la fenetre Region, selectionne la langue Japonais (Japon)
8 . Clic sur Appliquer (et non pas sur OK) afin de garder ouverte la fenetre Region pour revenir aisement a ta langue (region) locale personnelle.

EDIT - Avant de cliquer sur Appliquer, s'assurer que toutes les applications Excel sont fermees ou a tout le moins qu'il n'y ait aucun code VBA en mode execution ou en mode arret. Sinon le changement de langue ne sera pas pris en compte par les applications Excel ouvertes.
 
Dernière édition:

g.milano

XLDnaute Junior
Tout d'abord merci a tous pour vos réponses. j'ai tout testé mais rien de convaincant.
Je précise que je suis expatrie au Japon, et donc que mon ordinateur, OS, système, office, etc... est japonais. Ce qui explique les barres obliques que vous trouvez et que je n'ai pas.

Bonjour Eric,
Information intéressante. Dans mon excel, le code de "¥" est 92 (soit 5C en hexa), mais si j'affiche le caractère correspondant a A5 (165 en decimal), excel me retourne un "・" (formule =char("165") dans une cellule).
La fonction .text sur les cellules formatées en "¥#,##0" fait apparaître un nouveau symbole a la place du "¥" , le dièse "#" (et là je déprime)



Bonjour dysorthographie,
Au vu de ce que j'ai vu avec grâce a la remarque d'Eric, c'est effectivement une substitution. Ce qui me turlupine, c'est de comprendre pourquoi "¥" qui est on ne peut plus japonais, n'est pas reconnu par son propre systeme (excel japonais toussa)



Bonjour Docmarti,

Le passage de NumberFormatLocal a NumberFormat fait lui aussi apparaître des "#"
Merci pour le .NumberFormat qui m'a traumatisé : en appliquant un format "¥#,##0" via clic droit > propriété cellule, votre fonction VBA me retourne un format "$#,##0_);($#,##0" !!! Si vous avez une explication rationnelle sur ce fait, je suis preneur.


En conclusion, il semble avoir un gros sujet sur le formatage monétaire des cellules et aussi pas mal de choses incompatibles avec le format CSV (qui est un format texte, donc je comprends que les formatages déconnent). Peut-être qu'entre temps on trouvera ou comprendra quelque chose la-dedans...


Pour le moment, je dois avancer donc je truande en abandonnant le formatage en yen et en modifiant la valeur prix sans format en concaténant des chaines alphanumériques :
VB:
    For Each c In ActiveSheet.Range("D2:D" & ActiveSheet.UsedRange.Rows.Count)
        c.Value = "¥" & Left(c.Value, Len(c.Value) - 3) & "," & Right(c.Value, 3)
    Next c
La CSV obtenu garde bien le "¥", tant dans notepad qu'en le rouvrant avec excel. (enjoy)
Pas élégant mais efficace
 

jmfmarques

XLDnaute Accro
Bonjour à tous
Je vous invite à faire l'expérience suivante :
- copier le caractère ¥ dans le message 20
- le coller en A1
- exécuter ce code :
VB:
toto = AscW(Range("A1").Value)
titi = Asc(Range("A1").Value)
MsgBox toto & " ---> " & ChrW(toto)
MsgBox titi & " ---> " & Chr(titi)
 

Docmarti

XLDnaute Occasionnel
Bonjour Docmarti,

Le passage de NumberFormatLocal a NumberFormat fait lui aussi apparaître des "#"

Le probleme est dans cette ligne.

VB:
ActiveWorkbook.SaveAs ListDir & "タグリスト" & toujitsu & "." & i & ".csv", FileFormat:=xlCSV, AddToMru:=False

Dans le code ci-dessus, il manque le parametre Local:=True. Tu dois toujours mettre le parametre Local:=True sauf bien sur si tu desires obtenir des valeurs aux formats americains. Dans ce cas-la, il faut mettre Local:=False qui est la valeur par defaut.

Code:
[CODE=vb]ActiveWorkbook.SaveAs ListDir & "タグリスト" & toujitsu & "." & i & ".csv", FileFormat:=xlCSV, Local:=True, AddToMru:=False
[/CODE]
 

fanch55

XLDnaute Barbatruc
Salut à tous, je suis surpris qu'en excel 2010 on ne puisse spécifier le format xlCSVUTF8, mais effectivement j'ai vu dans plusieurs forums que cela aboutissait à une erreur 1004 .

Je propose une conversion par Adodb à tester :
VB:
Sub CsvUtf8()

Const Delim As String = ","   '<--  virgule ou point virgule

Dim Ash As Worksheet: Set Ash = ActiveSheet

Ash.Columns("D").NumberFormatLocal = "¥#,##0 " ' <-- Y mettre ce qu'il faut pour afficher le Yen Monétaire

Dim Rows As Long
    Rows = Ash.Cells.Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row

Dim Cols As Long
    Cols = Ash.Cells.Find(What:="*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
    
Dim FileName As String
FileName = ListDir & "\Sample.csv" '<--  file name

Dim I As Long, J As Long

Dim Adobj As Object
Set Adobj = CreateObject("ADODB.Stream")
   Adobj.Type = 2 'adTypeText'
   Adobj.Charset = "utf-8"
   Adobj.Open
    Dim Vcells() As Variant
    ReDim Vcells(1 To Cols)
    For I = 1 To Rows
       For J = 1 To Cols
           Vcells(J) = Ash.Cells(I, J).Text
       Next
       Adobj.WriteText Join(Vcells, Delim), 1 'adWriteLine
    Next
   Adobj.SaveToFile FileName, 2 'adSaveCreateOverWrite
Set Adobj = Nothing

MsgBox "Exporté dans " & FileName
End Sub
 

g.milano

XLDnaute Junior
Bonjour Docmarti. L'ajout de Local:=True change juste les "$" en "?".


Salut à tous, je suis surpris qu'en excel 2010 on ne puisse spécifier le format xlCSVUTF8, mais effectivement j'ai vu dans plusieurs forums que cela aboutissait à une erreur 1004 .

Je propose une conversion par Adodb à tester
bonjour et merci pour votre code fanch55. J'obtiens bien des "¥" dans le CSV, MAIS, les valeurs ont perdu leurs 000 et une nouvelle colonne de 0 s'est imbriqués avant la colonne suivante. Je pense qu'il s'agit du séparateur des milliers qui est le même que celui de votre délimiteur.
Et en choisissant des ";", mon excel empile les valeurs dans 2 colonnes (le séparateur des milliers faisant office de délimiteur). Dans le même ordre d’idée, je crains que même s'il est possible d'avoir une commande pour ouvrir le CSV en demandant a Excel de prendre le ";" pour séparer les données, le programme d'impression des étiquettes ne puisse pas digérer un CSV de ce type (je me renseignerai quand même)

PS : je vous joins pour infos les 2 csv obtenus par la votre macro (pour chaque délimiteur)
 

Pièces jointes

  • sample.csv.zip
    612 bytes · Affichages: 4

fanch55

XLDnaute Barbatruc
Bien, bien, on avance,
Je n'avais pas retenu que la virgule était votre séparateur de millier.
Sur la base des fichiers initiaux fournis :
VB:
Sub CsvUtf8()

Const Delim As String = ","   '<--  virgule ou point virgule
Const Mon As String = "¥"     '<-- Symbole du Yen dans le code local
Dim Ash As Worksheet: Set Ash = ActiveSheet

Ash.Columns("D").NumberFormatLocal = Mon & "#,##0" ' <-- D'après le premier fichier fourni

Dim Rows As Long
    Rows = Ash.Cells.Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row

Dim Cols As Long
    Cols = Ash.Cells.Find(What:="*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
   
Dim FileName As String
FileName = ListDir & "\Sample.csv" '<--  file name

Dim I As Long, J As Long

Dim Adobj As Object
Set Adobj = CreateObject("ADODB.Stream")
   Adobj.Type = 2 'adTypeText'
   Adobj.Charset = "utf-8"
   Adobj.Open
    Dim Vcells() As Variant
    ReDim Vcells(1 To Cols)
    For I = 1 To Rows
       For J = 1 To Cols
        Vcells(J) = Ash.Cells(I, J).Text
        If InStr(Vcells(J), Mon) _
        Then Vcells(J) = """" & Vcells(J) & """"
       Next
       Adobj.WriteText Join(Vcells, Delim), 1 'adWriteLine
    Next
   Adobj.SaveToFile FileName, 2 'adSaveCreateOverWrite
Set Adobj = Nothing

MsgBox "Exporté dans " & vbLf & FileName
End Sub
 
Dernière édition:
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…