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é."
Afficher la suite