Types de caractères à l'ouverture d'un fichier csv
Le
jeanluc.laurent

Lorsque j'ouvre un fichier csv, les caractères accentués ne sont pas re=
connus correctement
Exemples :
Perpendicularité A
Diamètre
Comment faire pour les récupérés correctement ?
Merci d'avance
connus correctement
Exemples :
Perpendicularité A
Diamètre
Comment faire pour les récupérés correctement ?
Merci d'avance
Mets le code suivant dans un module standard. La macro à utiliser est
"LitUTF8"; il faut changer les chemins des fichiers en lecture et
écriture. Le résultat est un fichier codé ANSI ("normal").
Private Const CP_UTF8 = 65001
Private Declare Function MultiByteToWideChar Lib "kernel32" ( _
ByVal CodePage As Long, ByVal dwFlags As Long, _
ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, _
ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long
Public Function sUTF8ToUni(bySrc() As Byte) As String
' Converts a UTF-8 byte array to a Unicode string
Dim lBytes As Long, lNC As Long, lRet As Long
lBytes = UBound(bySrc) - LBound(bySrc) + 1
lNC = lBytes
sUTF8ToUni = String$(lNC, Chr(0))
lRet = MultiByteToWideChar(CP_UTF8, 0, VarPtr(bySrc(LBound(bySrc))),
lBytes, StrPtr(sUTF8ToUni), lNC)
sUTF8ToUni = Left$(sUTF8ToUni, lRet)
End Function
Private Function ConvertUTF8File(sUTF8File As String) As String
Dim iFile As Integer, bData() As Byte, sData As String, lSize As Long
' Get the incoming data size
lSize = FileLen(sUTF8File)
If lSize > 0 Then
ReDim bData(0 To lSize - 1)
' Read the existing UTF-8 file
iFile = FreeFile()
Open sUTF8File For Binary As #iFile
Get #iFile, , bData
Close #iFile
' Convert all the data to Unicode (all VB Strings are Unicode)
sData = sUTF8ToUni(bData)
Else
sData = ""
End If
ConvertUTF8File = sData
End Function
'La macro à exécuter pour copier les lignes du fichier est la suivante
:
Sub LitUTF8()
' charge le fichier UTF-8 dans une variable string Unicode
sFileBody =
ConvertUTF8File("C:UsersDanielDocumentsDonneesDanielExceltestUTF8.txt")
' Enlève le marqueur Unicode de tête (i.e. the &HFEFF sequence)
sFileBody = Mid$(sFileBody, 2)
Tabl = Split(sFileBody, vbCrLf)
Open
"C:UsersDanielDocumentsDonneesDanielmpfetestUTF8traduit.txt" For
Output As #1
For Each Item In Tabl
Print #1, Item
Next Item
Close #1
End Sub
Daniel
Au final, les csv seront détruits
Mais merci quand même :D