Importer fichiers csv par macro VBA [Fermé]

Signaler
Messages postés
1
Date d'inscription
mercredi 28 février 2018
Statut
Membre
Dernière intervention
28 février 2018
-
Messages postés
1941
Date d'inscription
lundi 3 mai 2010
Statut
Membre
Dernière intervention
23 août 2020
-
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

Messages postés
1941
Date d'inscription
lundi 3 mai 2010
Statut
Membre
Dernière intervention
23 août 2020
144
Bonjour,

(" & Chemin & Fichier & ") 

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

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


A+