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

Types de caractères à l'ouverture d'un fichier csv

3 réponses
Avatar
jeanluc.laurent
Lorsque j'ouvre un fichier csv, les caract=E8res accentu=E9s ne sont pas re=
connus correctement
Exemples :
Perpendicularit=C3=A9 A
Diam=C3=A8tre

Comment faire pour les r=E9cup=E9r=E9s correctement ?
Merci d'avance

3 réponses

Avatar
DanielCo
Bonjour,
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


Lorsque j'ouvre un fichier csv, les caractères accentués ne sont pas reconnus
correctement Exemples :
Perpendicularité A
Diamètre

Comment faire pour les récupérés correctement ?
Merci d'avance
Avatar
jeanluc.laurent
Merci pour ta réponse rapide :D
Avatar
jeanluc.laurent
J'ai regardé ta solution, mais elle est trop complexe en rapport à ce q ue je veux faire.
Au final, les csv seront détruits
Mais merci quand même :D