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 : 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
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.