Importer fichiers csv par macro VBA

Fermé
Bobbfr Messages postés 1 Date d'inscription mercredi 28 février 2018 Statut Membre Dernière intervention 28 février 2018 - Modifié le 28 févr. 2018 à 12:17
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 - 1 mars 2018 à 16:10
Bonjour,

Je cherche à importer plusieurs fichiers csv, chacuns dans un onglet d'un même fichier Excel. Pouvez-vous m'aider ?
Je suis développeur mais je ne m'y connais pas en VBA. J'ai donc enregistré une macro où j'importe un fichier csv donc voici le code :
Sub Importer_csv()
'
' Importer_csv Macro
'
ActiveWorkbook.Queries.Add Name:="sdl_ext_acti_admi", Formula:= _
"let" & Chr(13) & "" & Chr(10) & " Source = Csv.Document(File.Contents(""d:\Profiles\jb\Desktop\Cass\Interface\toExcel\sdl_ext_acti_admi.csv""),[Delimiter="";"", Columns=3, Encoding=1252, QuoteStyle=QuoteStyle.None])," & Chr(13) & "" & Chr(10) & " #""Type modifié"" = Table.TransformColumnTypes(Source,{{""Column1"", type text}, {""Column2"", type text}, {""Column3"", type text}})," & Chr(13) & "" & Chr(10) & " #""E" & _
"n-têtes promus"" = Table.PromoteHeaders(#""Type modifié"", [PromoteAllScalars=true])," & Chr(13) & "" & Chr(10) & " #""Type modifié1"" = Table.TransformColumnTypes(#""En-têtes promus"",{{""Champ"", type text}, {""Valeur"", type text}, {""Table"", type text}})" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & " #""Type modifié1"""
Sheets.Add After:=ActiveSheet
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
"OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=sdl_ext_acti_admi;Extended Properties=""""" _
, Destination:=Range("$A$1")).QueryTable
MsgBox (sdl_ext_acti_admi)
.CommandType = xlCmdSql
.CommandText = Array("SELECT * FROM [sdl_ext_acti_admi]")
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = False
.ListObject.DisplayName = "sdl_ext_acti_admi"
.Refresh BackgroundQuery:=False
End With
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False
Sheets("Feuil2").Select
Sheets("Feuil2").Name = "acti_admi"
End Sub


Et j'ai essayé de l'intégrer dans une boucle où je récupère tous les fichiers csv :
Sub BoucleFichiers()
Dim Chemin As String, Fichier As String

'Définit le répertoire contenant les fichiers
Chemin = "d:\Profiles\jb\Desktop\Cass\Interface\toExcel\"
Fichier = Dir(Chemin & "*.csv")

Do While Len(Fichier) > 0
Tableau = Split(Fichier, ".")
Nom = Tableau(0)
Test = "Chemin & Fichier"

'
' Importer_csv Macro
'
ActiveWorkbook.Queries.Add Name:=Nom, Formula:= _
"let" & Chr(13) & "" & Chr(10) & " Source = Csv.Document(File.Contents(" & Chemin & Fichier & "),[Delimiter="";"", Columns=3, Encoding=1252, QuoteStyle=QuoteStyle.None])," & Chr(13) & "" & Chr(10) & " #""Type modifié"" = Table.TransformColumnTypes(Source,{{""Column1"", type text}, {""Column2"", type text}, {""Column3"", type text}})," & Chr(13) & "" & Chr(10) & " #""E" & _
"n-têtes promus"" = Table.PromoteHeaders(#""Type modifié"", [PromoteAllScalars=true])," & Chr(13) & "" & Chr(10) & " #""Type modifié1"" = Table.TransformColumnTypes(#""En-têtes promus"",{{""Champ"", type text}, {""Valeur"", type text}, {""Table"", type text}})" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & " #""Type modifié1"""
Sheets.Add After:=ActiveSheet
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
"OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=" & Nom & ";Extended Properties=""""" _
, Destination:=Range("$A$1")).QueryTable
.CommandType = xlCmdSql
.CommandText = Array("SELECT * FROM " & Nom)
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = False
.ListObject.DisplayName = Nom
.Refresh BackgroundQuery:=False
End With
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False
Sheets("Feuil2").Select

Fichier = Dir()
Loop
End Sub


J'ai essayé de le modifier un peu dans différents sens mais j'obtiens toujours des erreurs. Avec ce code là j'ai "Le nom "Source" n'a pas été reconnu. Veuillez vérifier qu'il est correctement orthographié."

1 réponse

Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
1 mars 2018 à 16:10
Bonjour,

(" & Chemin & Fichier & ") 

ne m'a pas l'air net.
Essaie peut-être
(Chemin & Fichier)

ou
("""" & Chemin & Fichier & """")


A+
0