Comment définir un certain nombre de arrays dans vba dynamicment – un tableau pour chaque file dans un dossier

J'ai un dossier contenant quelques files excel.

Dans chacun de ces files, je souhaite créer un tableau qui contiendra datatables dans la fiche "données". Chaque classur ou file comporte cette feuille de travail.

Seul le problème est qu'il peut y avoir un nombre différent de files dans le dossier à chaque fois.

Je veux capturer le contenu de la feuille de données "données" de chaque file dans un tableau, puis j'écris toutes ces données dans un seul file.

Question Est-il possible de créer dynamicment des arrays en fonction, par exemple, du nombre de files dans un dossier?

Si oui, comment créez-vous ces arrays dynamics?

Exemple Au lieu d'avoir un tableau (dont je change la taille), je veux … (en fonction du nombre de files dans un dossier, par exemple, créez-vous plusieurs arrays distincts?

p.ex. 3 files dans un dossier

dim array01 tableau faible array modéré0203

Est-il préférable de créer un tableau par classur dans le dossier – pour stocker le contenu de la feuille de calcul "données" ou créer un tableau plus large?

Au lieu d'utiliser un multidimensional array et redim it tout le time, envisagez de stocker chaque masortingce de données dans une Collection comme celle-ci:

 Dim allData As Collection, data As Variant, file As Variant Dim wb As Workbook, ws As Worksheet Set allData = New Collection file = Dir("c:\testfolder\*.xlsx") While (file <> "") Set wb = Workbooks.Open(file) data = wb.Sheets(1).UsedRange.Cells 'Adjust this to get your data range allData.Add data, file file = Dir Wend 

Plus tard, vous pouvez utiliser une boucle For Each pour récupérer datatables:

 Dim count As Integer For Each data In allData count = count + 1 Debug.Print "Dataset #" & count & " has " & _ UBound(data, 1) & " x " & UBound(data, 2) & " ensortinges" Next 
  Sub MAIN() Dim FolderOfInterest As Ssortingng, i As Long FolderOfInterest = "C:\TestFolder" Dim ary() ary = files_in_folder(FolderOfInterest) MsgBox "There are " & UBound(ary) & " files in folder " & FolderOfInterest ' ' Now store the array in a worksheet column ' i = 1 For Each a In ary Cells(i, "A").Value = a i = i + 1 Next a End Sub Public Function files_in_folder(folderS As Ssortingng) As Variant Set fso = CreateObject("Scripting.FileSystemObject") Set folder = fso.GetFolder(folderS) ReDim temp(1 To folder.Files.Count) i = 1 For Each file In folder.Files temp(i) = file.Name i = i + 1 Next file files_in_folder = temp End Function '  Sub MAIN() Dim FolderOfInterest As Ssortingng, i As Long FolderOfInterest = "C:\TestFolder" Dim ary() ary = files_in_folder(FolderOfInterest) MsgBox "There are " & UBound(ary) & " files in folder " & FolderOfInterest ' ' Now store the array in a worksheet column ' i = 1 For Each a In ary Cells(i, "A").Value = a i = i + 1 Next a End Sub Public Function files_in_folder(folderS As Ssortingng) As Variant Set fso = CreateObject("Scripting.FileSystemObject") Set folder = fso.GetFolder(folderS) ReDim temp(1 To folder.Files.Count) i = 1 For Each file In folder.Files temp(i) = file.Name i = i + 1 Next file files_in_folder = temp End Function '  Sub MAIN() Dim FolderOfInterest As Ssortingng, i As Long FolderOfInterest = "C:\TestFolder" Dim ary() ary = files_in_folder(FolderOfInterest) MsgBox "There are " & UBound(ary) & " files in folder " & FolderOfInterest ' ' Now store the array in a worksheet column ' i = 1 For Each a In ary Cells(i, "A").Value = a i = i + 1 Next a End Sub Public Function files_in_folder(folderS As Ssortingng) As Variant Set fso = CreateObject("Scripting.FileSystemObject") Set folder = fso.GetFolder(folderS) ReDim temp(1 To folder.Files.Count) i = 1 For Each file In folder.Files temp(i) = file.Name i = i + 1 Next file files_in_folder = temp End Function