VBA, conversion UTF 8 et caractères accentués
Bonjour à toutes et tous,
Je dois sauvegarder via macro excel une plage de cellules dans un fichier csv encodé en UTF 8 sans bom (en vue d'alimenter une table MySQL)
Après de nombreuses recherches, j'ai accouché péniblement du code suivant très largement pompé :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| Sub saveUTF8csv()
Dim oAdoS As Object
Set oAdoS = CreateObject("ADODB.Stream")
oAdoS.Charset = "UTF-8"
oAdoS.Mode = 3
oAdoS.Type = 2
oAdoS.Open
celultime = Cells.Find("*", , , , , xlPrevious).Row ' dernière ligne non vide
lRow = 1
lCol = 1
iii = 1
For iii = 1 To celultime
oAdoS.WriteText (Sheets("export").Cells(lRow, lCol).Text)
lCol = lCol + 1
For i = 1 To 26 'de la première à la dernière colonne
oAdoS.WriteText (";" & Sheets("export").Cells(lRow, lCol).Text)
lCol = lCol + 1
Next
oAdoS.WriteText (vbCrLf)
lCol = 1
lRow = lRow + 1
Next
oAdoS.SaveToFile ActiveWorkbook.Path & "\" & "temp_utf8.csv", 2 'nom du fichier temporaire
oAdoS.Close
'sans BOM
oAdoS.Open
oAdoS.Type = 1 ' binaire
oAdoS.LoadFromFile ActiveWorkbook.Path & "\" & "temp_utf8.csv" 'nom du fichier temporaire
oAdoS.Position = 3 ' shunte les 3 octets
Dim oAdoS2 As Object
Set oAdoS2 = CreateObject("ADODB.Stream")
oAdoS2.Open
oAdoS2.Type = 1 ' binaire
oAdoS.CopyTo oAdoS2
oAdoS2.SaveToFile ActiveWorkbook.Path & "\" & SupprimerAccents(nom) & Fix(distance) & ".csv", 2
oAdoS.Close
Set oAdoS = Nothing
oAdoS2.Close
'Set oAdoS2 = Nothing
Kill ActiveWorkbook.Path & "\" & "temp_utf8.csv" 'suppression du fichier temporaire
filname = SupprimerAccents(coursev) & Fix(distance) & ".csv"
MsgBox ("Exportation réussie dans le répertoire courant : " & filname)
End Sub |
Je parviens donc à exporter cette plage dans un fichier csv qui si j'en crois Notepad++ est bien encodé en UTF8 sans BOM.
Or, en fait les caractères accentués (é,à, ï...) présents dans la table n'ont absolument été convertis.
N'ai-je rien compris à l'encodage UTF 8 ? ou, où-je fais-je erreur dans le code ?
Merci d'avance à celles et ceux qui prendront le temps de se pencher sur mon problème
n.