J'ai aménagé la macro
Const sep = ";"
Sub csv2xlsx()
Dim chemin$, Rep As FileDialog
' choix du répertoire
Set Rep = Application.FileDialog(msoFileDialogFolderPicker)
Application.FileDialog(msoFileDialogFolderPicker).Title = "Choix du répertoire des fichiers ..."
Rep.Show
If Rep.SelectedItems.Count = 0 Then Exit Sub
chemin = Rep.SelectedItems(1) & "\"
importCSV chemin
End Sub
Sub importCSV(chemin As String)
Dim wb As Workbook, ws As Worksheet
Dim fichier$, T() As String, D, ligne&, i%, ContenuLigne$, nItems%, ff
fichier = Dir(chemin & "*.csv")
Do While fichier <> ""
Set wb = Workbooks.Add
Set ws = wb.Worksheets(1)
ff = FreeFile
Open chemin & fichier For Input As #ff
ligne = 0
Do While Not EOF(1)
Line Input #ff, ContenuLigne
tbl = Split(ContenuLigne, Chr(10))
For i = LBound(tbl) To UBound(tbl)
ligne = ligne + 1
T = Split(Utf8_Decode(tbl(i)) & sep, sep)
ws.Cells(ligne, 1).Resize(1, UBound(T)) = T
Next
Loop
Close #ff
wb.SaveAs chemin & Replace(fichier, ".csv", ".xlsx")
wb.Close
fichier = Dir
Loop
End Sub
Function Utf8_Decode(ByVal txt As String) As String
Dim ln As Long, s As String, i As Integer, j As Integer, K As Integer
For ln = 1 To Len(txt)
i = Asc(Mid(txt, ln, 1))
If i > 127 Then
If Not i And 32 Then
j = Asc(Mid(txt, ln + 1, 1))
s = s & ChrW$(((31 And i) * 64 + (63 And j)))
ln = ln + 1
Else
j = Asc(Mid(txt, ln + 1, 1))
K = Asc(Mid(txt, ln + 2, 1))
s = s & ChrW$(((i And 15) * 16 * 256) + ((j And 63) * 64) + (K And 63))
ln = ln + 2
End If
Else
s = s & Chr$(i)
End If
Next ln
Utf8_Decode = s
End Function