Importation de plusieurs feuilles Excel à partir d'un location sélectionnable

J'essaie de faire un button dans Excel pour triggersr un écran pour qu'un user puisse sélectionner un location de dossier et append tous ses files Excel dans des feuilles de travail.

Sub Getsheets() Path = GetFolder("N:\", "Select an Input Folder") Filename = Dir(Path & "*.xlsm") Do While Filename <> "" Workbooks.Open Filename:=Path & Filename, ReadOnly:=True For Each Sheet In ActiveWorkbook.Sheets Sheet.Copy After:=ThisWorkbook.Sheets(1) Next Sheet Application.DisplayAlerts = False Workbooks(Filename).Close Filename = Dir() Loop End Sub Function GetFolder(strPath As Ssortingng, fldSt As Ssortingng) As Ssortingng Dim fldr As FileDialog Dim sItem As Ssortingng Set fldr = Application.FileDialog(msoFileDialogFolderPicker) With fldr .Title = fldSt .AllowMultiSelect = False .InitialFileName = strPath If .Show <> -1 Then GoTo NextCode sItem = .SelectedItems(1) End With NextCode: GetFolder = sItem Set fldr = Nothing End Function 

C'est ce que j'ai jusqu'à présent, si je ne incorpore pas la fonction getfolder , je peux récupérer tous les files Excel dans un dossier désigné, mais une fois que j'ai mis la fonction, rien ne se passe. Comment résoudre ce problème?

Le journal des files renvoie un path sans "\" (dépendant de la plate-forme). Vous devez append manuellement le "\" à la search de "* .xlsm"

Donc, la 3ème ligne de code serait:

 Filename = Dir(Path & Application.PathSeparator & "*.xlsm") 

EDIT Il existe d'autres references à Path où le PathSeparator doit être ajouté.

En fait, il est préférable de faire une reference sur le classur lorsque vous l'ouvrez. Aussi, préférez déclarer les variables (utilisez "Option Explicit" sur la 1ère ligne du module pour l'appliquer).

Voici votre code, mis à jour pour correspondre aux pensées ci-dessus:

 Sub Getsheets() Dim Path As Ssortingng, Filename As Ssortingng, Sheet As Worksheet, wkBook As Workbook Path = GetFolder("N:\", "Select an Input Folder") & Application.PathSeparator Filename = Dir(Path & "*.xlsm") Do While Filename <> "" Set wkBook = Workbooks.Open(Filename:=Path & Filename, ReadOnly:=True) For Each Sheet In wkBook.Sheets Sheet.Copy After:=ThisWorkbook.Sheets(1) Next Sheet Application.DisplayAlerts = False wkBook.Close Filename = Dir() Loop End Sub 

J'ai testé ceci sur un dossier avec 5 files .xlsm; ça a bien fonctionné.