1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
| Option Explicit
Sub ImporterOngletsDossiers()
Dim wbA As Workbook, wbB As Workbook, wSh As Worksheet
Dim sChemin As String, sNomFich As String, kR As Long
Set wbA = ActiveWorkbook
'--- supprime toutes les feuilles existantes
'--- sauf la première (il faut en garder au moins une)
Application.DisplayAlerts = False
Sheets.Add Before:=Sheets(1) '--- ajout feuille vide temporaire
For Each wSh In wbA.Worksheets
If wSh.Index > 1 Then wSh.Delete
Next wSh
Application.DisplayAlerts = True
'--- liste tous les fichiers *.xls* (dans dossier et sous-dossiers)
GetFolder
'--- trie la liste des fichiers
With wbA.Worksheets(1).Sort
.SetRange Range("A:A")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'--- charge les onglets des fichiers
Application.ScreenUpdating = False
kR = 1
With wbA.Sheets(1)
Do While .Cells(kR, 1) <> ""
If .Cells(kR, 1) <> wbA.Name Then
Debug.Print kR, .Cells(kR, 1)
Set wbB = Workbooks.Open(.Cells(kR, 1))
'--- copie tous les onglets du dossier Excel ouvert
For Each wSh In wbB.Worksheets
wSh.Copy After:=wbA.Sheets(wbA.Sheets.Count)
kR = kR + 1
.Rows(kR).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
.Cells(kR, 2) = wbA.Sheets(wbA.Sheets.Count).Name
Next wSh
wbB.Close SaveChanges:=False
End If
kR = kR + 1
Loop
End With
'wbA.Sheets(1).Delete '--- supprime la feuille vide temporaire
Application.ScreenUpdating = True
MsgBox "Travail terminé."
End Sub
'--- http://buffalobi.com/excel/excel-vba-list-files-folders-subfolders/
Sub GetFolder()
Cells.ClearContents
Range("A1").Select
Dim strPath As String
strPath = ActiveWorkbook.path
Dim Obj As Object, Folder As Object, File As Object
Set Obj = CreateObject("Scripting.FileSystemObject")
Set Folder = Obj.GetFolder(strPath)
Call ListFiles(Folder)
Dim SubFolder As Object
For Each SubFolder In Folder.SubFolders
Call ListFiles(SubFolder)
Call GetSubFolders(SubFolder)
Next SubFolder
Range("A1").Select
End Sub
Sub ListFiles(ByRef Folder As Object)
Dim File As Object
For Each File In Folder.Files
If File.Name Like "*.xls*" Then
ActiveCell = File.path ' & "\" & File.Name
ActiveCell.Offset(1, 0).Select
End If
Next File
End Sub
Sub GetSubFolders(ByRef SubFolder As Object)
Dim FolderItem As Object
For Each FolderItem In SubFolder.SubFolders
Call ListFiles(FolderItem)
Call GetSubFolders(FolderItem)
Next FolderItem
End Sub |
Partager