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

ce que je trouve bizarre dans tes fichiers c'est que tu as les codes 5C "\", 3F "?" alors que le code ANSI pour ¥ est A5
Si je met ce code dans un de tes fichier, je retrouve bien ¥ en ouvrant le csv sur excel.

Tu pourrais essayer de mettre ta colonne (avec les ¥) par .Value = .Text, le A5 sera conservé en .csv.
eric
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,
Dans notepad++ par défaut l'encoding est en UTF8 suivant la Provence il affiche ¥ ou?

Regards avec note pad ou Word pad ou passes notepad++ en AISSI!
Le ? N'est pas une conversion du ¥ mais bien une substitution d'un code ASCII non reconnu !
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 g.milano, le Forum.

Dans la ligne de code suivante tu as 3 erreurs.
VB:
2. Utilise NumberFormat au lieu de NumberFormatLocal


Pour savoir quoi mettre dans la propriete NumberFormat Monetaire, mieux vaut se fier a Excel qu'a nos intuitions.
Donc sur la feuille utilise Format de cellule et choisis Monetaire comme Format de nombre d'une cellule.
Ensuite va dans VBA pour recuperer la propriete Numberformat recommandee par Excel pour cette cellule.

[CODE]LeFormat = Cells(1, 1).NumberFormat
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 :rolleyes:
 

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