Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Ouvrir un csv en UTF-8

12 réponses
Avatar
Laurent
Bonjour,
J'ai un problème avec des CSV créé en UTF-8, connaissez vous une solution
qui permet de les ouvrir correctement avec Excel ?
Lorsque je les ouvre, j'ai des problèmes d'accents.
J'ai testé en renommant en txt, l'assistant me permet de choisir le format,
mais le fichier s'ouvre mal (j'ai des retours chariots dans les
enregistrements).

Merci d'avance si vous avez une solution autre que de l'ouvrir avec le
notepad et de le réenregistrer dans le bon format.

Laurent

2 réponses

1 2
Avatar
michdenis
Et comment penses-tu excel fait pour évaluer ces constances
que j'ai utilisé dans les 2 procédures suggérées... `a défaut
d'utiliser la constante texte, il est vrai que tu peux les substituer
par leur valeur numérique et seulement dans ce cas, tu peux
te passer de la bibliothèque... Encore faut-il que tu l'aies chargée
le temps de consulter l'explorateur objet pour y trouver la
valeur numérique correspondante.

.SaveToFile Dest, adSaveCreateOverWrite
La valeur numérique de : Const adSaveCreateOverWrite = 2

T = .ReadText(adReadLine)
La valeur numérique de Const adReadLine = -2 'OU (&HFFFFFFFE)





"Laurent" a écrit dans le message de groupe de
discussion :
Pour info :
Pour éviter d'avoir a cocher la bibliothèque adéquat (différente d'une
version d'Excel à l'autre) :
...
Dim Strm As Object
...
dans ce cas il va chercher tout seul la bonne bibliothèque sans la déclarer
dasn les références.

Laurent

"michdenis" a écrit :

| les retour à la ligne dans mes enregistrements posent problème

Il y a beaucoup d'autres choses qui posent problème !
je ne crois pas qu'on puisse automatiser son ouverture.

Je t'offre une macro qui va copier tout ton fichier originale
vers une destination que tu vas définir. Cette macro va
s'occuper de tes caractères accentués et tu vas pouvoir
ouvrir ton nouveau fichier par la suite dans excel. Il te
restera a en faire une présentation acceptable !

Requiert la bibliothèque "Microsoft activex data objects 2.x library"
'-------------------------------------
Sub Modifier_Accents()
Dim Strm As New Stream
Dim Source As String, Dest As String

Source = "C:TonCheminRapportTabulaire.csv"
Dest = "C:TonCheminNouveau_RapportTabulaire.csv"

Set Strm = CreateObject("ADODB.Stream")
With Strm
.Charset = "utf-8"
.Type = 2
.Open
If Dir(Source) <> "" Then
.LoadFromFile Source
.SaveToFile Dest, adSaveCreateOverWrite
Else
MsgBox "Fichier introuvable"
End If
.Close
End With
End Sub
'-------------------------------------


"Laurent" a écrit dans le message de groupe de
discussion :
Bonjour,
Merci michdenis mais désolé mais ni l'une ni l'autre des macros ne
fonctionnent sur mon fichier, les retour à la ligne dans mes enregistrements
posent problème (fichier : http://cjoint.com/?bvn4T26Ulj)
Je regarde quand même si j'arrive à adpater ce code.

Laurent


"michdenis" a écrit :

> As-tu essayé quelque chose comme ceci :
>
> La fonction Split() requiert excel 2000 ou plus récent.
>
> Tu dois charger la bibliothèque suivante dans la fenêtre
> de l'éditeur de code : Barre de menu / outils / référence
> et tu coches :
> "Microsoft activex data object 2.x librairy"
>
> '--------------------------------------------------
> Sub test()
>
> Dim Con As New ADODB.Connection
> Dim Rst As New Recordset, C As Variant
> Dim Strm As Stream, T As String
> Dim X As Long, S As String, D As Integer
> Dim Fichier As String, Lig As Long
> Dim Rg As Range, Sep As String
>
> '******************************************
> 'à définir
> Fichier = "C:UsersPowerUserGrosTest.csv"
> 'Séparateur dans le fichier csv
> Sep = ";" 'à définir
>
> With Worksheets("Feuil1") 'à définir
> Set Rg = .Range("A1") 'à définir
> End With
> '******************************************
>
> Set Strm = CreateObject("adodb.stream")
>
> With Strm
> .Charset = "utf-8" '"iso-8859-1"
> .Type = 2
> .Open
> .LoadFromFile Fichier
> T = .ReadText
> Application.ScreenUpdating = False
> Do
> D = X + 1
> X = InStr(D, T, Chr(10), vbTextCompare)
> If X = 0 Then Exit Do
> S = ""
> If X = 0 Then Exit Do
> S = Mid(T, D, X - D)
> C = Split(S, Sep)
> Lig = Lig + 1
> Rg(Lig).Resize(, UBound(C)) = C
> Lig = Lig + 1
> Loop Until X = 0
> .Close
> End With
>
> End Sub
> '--------------------------------------------------
>
>
>
>
>
> "Laurent" a écrit dans le message de groupe de
> discussion :
> Bonjour,
> J'ai un problème avec des CSV créé en UTF-8, connaissez vous une solution
> qui permet de les ouvrir correctement avec Excel ?
> Lorsque je les ouvre, j'ai des problèmes d'accents.
> J'ai testé en renommant en txt, l'assistant me permet de choisir le format,
> mais le fichier s'ouvre mal (j'ai des retours chariots dans les
> enregistrements).
>
> Merci d'avance si vous avez une solution autre que de l'ouvrir avec le
> notepad et de le réenregistrer dans le bon format.
>
> Laurent
>


Avatar
Laurent
Effectivement, j'ai remplacé la constante par sa valeur (donc le 2) et je
n'ai pas de problème de fonctionnement.
Mon problème était que j'ai des utilisateurs en Office 2003 et Office 2007.

Il me restait des caractères bizarre dans mon fichier, j'ai donc substitué
les CHR(13), chr(11) et chr(9) par un espace.

Laurent

"michdenis" a écrit :

Et comment penses-tu excel fait pour évaluer ces constances
que j'ai utilisé dans les 2 procédures suggérées... `a défaut
d'utiliser la constante texte, il est vrai que tu peux les substituer
par leur valeur numérique et seulement dans ce cas, tu peux
te passer de la bibliothèque... Encore faut-il que tu l'aies chargée
le temps de consulter l'explorateur objet pour y trouver la
valeur numérique correspondante.

.SaveToFile Dest, adSaveCreateOverWrite
La valeur numérique de : Const adSaveCreateOverWrite = 2

T = .ReadText(adReadLine)
La valeur numérique de Const adReadLine = -2 'OU (&HFFFFFFFE)





"Laurent" a écrit dans le message de groupe de
discussion :
Pour info :
Pour éviter d'avoir a cocher la bibliothèque adéquat (différente d'une
version d'Excel à l'autre) :
...
Dim Strm As Object
...
dans ce cas il va chercher tout seul la bonne bibliothèque sans la déclarer
dasn les références.

Laurent

"michdenis" a écrit :

> | les retour à la ligne dans mes enregistrements posent problème
>
> Il y a beaucoup d'autres choses qui posent problème !
> je ne crois pas qu'on puisse automatiser son ouverture.
>
> Je t'offre une macro qui va copier tout ton fichier originale
> vers une destination que tu vas définir. Cette macro va
> s'occuper de tes caractères accentués et tu vas pouvoir
> ouvrir ton nouveau fichier par la suite dans excel. Il te
> restera a en faire une présentation acceptable !
>
> Requiert la bibliothèque "Microsoft activex data objects 2.x library"
> '-------------------------------------
> Sub Modifier_Accents()
> Dim Strm As New Stream
> Dim Source As String, Dest As String
>
> Source = "C:TonCheminRapportTabulaire.csv"
> Dest = "C:TonCheminNouveau_RapportTabulaire.csv"
>
> Set Strm = CreateObject("ADODB.Stream")
> With Strm
> .Charset = "utf-8"
> .Type = 2
> .Open
> If Dir(Source) <> "" Then
> .LoadFromFile Source
> .SaveToFile Dest, adSaveCreateOverWrite
> Else
> MsgBox "Fichier introuvable"
> End If
> .Close
> End With
> End Sub
> '-------------------------------------
>
>
> "Laurent" a écrit dans le message de groupe de
> discussion :
> Bonjour,
> Merci michdenis mais désolé mais ni l'une ni l'autre des macros ne
> fonctionnent sur mon fichier, les retour à la ligne dans mes enregistrements
> posent problème (fichier : http://cjoint.com/?bvn4T26Ulj)
> Je regarde quand même si j'arrive à adpater ce code.
>
> Laurent
>
>
> "michdenis" a écrit :
>
> > As-tu essayé quelque chose comme ceci :
> >
> > La fonction Split() requiert excel 2000 ou plus récent.
> >
> > Tu dois charger la bibliothèque suivante dans la fenêtre
> > de l'éditeur de code : Barre de menu / outils / référence
> > et tu coches :
> > "Microsoft activex data object 2.x librairy"
> >
> > '--------------------------------------------------
> > Sub test()
> >
> > Dim Con As New ADODB.Connection
> > Dim Rst As New Recordset, C As Variant
> > Dim Strm As Stream, T As String
> > Dim X As Long, S As String, D As Integer
> > Dim Fichier As String, Lig As Long
> > Dim Rg As Range, Sep As String
> >
> > '******************************************
> > 'à définir
> > Fichier = "C:UsersPowerUserGrosTest.csv"
> > 'Séparateur dans le fichier csv
> > Sep = ";" 'à définir
> >
> > With Worksheets("Feuil1") 'à définir
> > Set Rg = .Range("A1") 'à définir
> > End With
> > '******************************************
> >
> > Set Strm = CreateObject("adodb.stream")
> >
> > With Strm
> > .Charset = "utf-8" '"iso-8859-1"
> > .Type = 2
> > .Open
> > .LoadFromFile Fichier
> > T = .ReadText
> > Application.ScreenUpdating = False
> > Do
> > D = X + 1
> > X = InStr(D, T, Chr(10), vbTextCompare)
> > If X = 0 Then Exit Do
> > S = ""
> > If X = 0 Then Exit Do
> > S = Mid(T, D, X - D)
> > C = Split(S, Sep)
> > Lig = Lig + 1
> > Rg(Lig).Resize(, UBound(C)) = C
> > Lig = Lig + 1
> > Loop Until X = 0
> > .Close
> > End With
> >
> > End Sub
> > '--------------------------------------------------
> >
> >
> >
> >
> >
> > "Laurent" a écrit dans le message de groupe de
> > discussion :
> > Bonjour,
> > J'ai un problème avec des CSV créé en UTF-8, connaissez vous une solution
> > qui permet de les ouvrir correctement avec Excel ?
> > Lorsque je les ouvre, j'ai des problèmes d'accents.
> > J'ai testé en renommant en txt, l'assistant me permet de choisir le format,
> > mais le fichier s'ouvre mal (j'ai des retours chariots dans les
> > enregistrements).
> >
> > Merci d'avance si vous avez une solution autre que de l'ouvrir avec le
> > notepad et de le réenregistrer dans le bon format.
> >
> > Laurent
> >


1 2