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
| '
' Assemble à la suite plusieurs fichiers dans un classeur.
'
Sub Assemble()
Dim CL1 As Workbook, CL2 As Workbook 'classeur
Dim FL1 As Worksheet, FL2 As Worksheet 'feuille de calcul
Dim Fich As Variant, i As Byte, Rep$
'Répertoire des fichiers à copier
Rep = "C:\Documents and Settings\JQH\Bureau\Mari\boulot_test\test\"
Set CL1 = ThisWorkbook
'Ajoute une feuille au classeur destiné à recevoir les données des autres classeurs
CL1.Sheets.Add
CL1.ActiveSheet.Name = "Cumul_Budget"
Set FL1 = CL1.ActiveSheet 'Instance le la feuille
'Crée le tableau des fichiers du répertoire
Set Fich = application.FileSearch
'Ouverture des fichiers du répertoire
With Fich
.LookIn = Rep
.FileType = msoFileTypeExcelWorkbooks
If .Execute(SortBy:=msoSortByFileName, _
SortOrder:=msoSortOrderAscending) > 0 Then
For i = 1 To .FoundFiles.Count
Set CL2 = Workbooks.Open(.FoundFiles(i))
DoEvents
'Parcours des feuilles de chaque classeur
For Each FL2 In CL2.Worksheets
'Dernière ligne où coller les données copiées dans FL2
NoLigne = FL1.Range("A1").SpecialCells(xlCellTypeLastCell).Row
'Copie de la plage renseignée de chaque feuille du classeur
'FL2.UsedRange.Address donne la plage de données de la feuille en adresse absolue. Ex : "$A$1:$R$554"
'FL2.UsedRange.Address(0, 0) donne la plage mais sans les $
'Comme ça je peux faire un "Split" de la plage en utilisant les ":" comme séparateur
'Plage = "A1:R554"
FL2.Range("A1:" & Split(FL2.UsedRange.Address(0, 0), ":")(1)).Copy _
FL1.Range("A" & NoLigne)
DoEvents
Set FL2 = Nothing
Next
CL2.Close False 'fermeture du classeur copié
DoEvents
Set CL2 = Nothing
'supprime les blancs en ligne et en colonne
Range(Cells(Cells.Find("*", , , , xlByColumns, xlPrevious).Column + 1), Cells(1, 254)).EntireColumn.Delete
Range(Cells(Cells.Find("*", , , , xlByRows, xlPrevious).Row + 1, 1), Cells(65536, 1)).EntireRow.Delete
ActiveSheet.UsedRange.Select
'concaténne les cellules dans la cellule AJ
Cells(cell.Row, "AJ").Value = A2 & " " & B2 & " " & C2 & " " & D2 & " " & E2 & " " & F2 & " " & G2 & " " & H2
Next i
Else
MsgBox "Aucun fichier dans le répertoire " & Rep
End If
End With
End Sub |
Partager