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é :
Je parviens donc à exporter cette plage dans un fichier csv qui si j'en crois Notepad++ est bien encodé en UTF8 sans BOM.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
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.
Partager