Arjuna Aircraft Ident.: F-MBSD | Bon, en lisant ce topic, j'ai pensé que j'avais promi de faire ce type de macro pour un collègue.
Voilà donc ce que je lui ai pondu :
Code :
- Option Explicit
- Sub AutoExec()
- Dim fso As New Scripting.FileSystemObject
- Dim fil As Scripting.File
- Dim wkb As Excel.Workbook
- Dim first As Boolean
- Dim continue As Boolean
- Dim i As Integer
- Dim j As Long
- Dim jlocal As Long
- Dim nbCols As Integer
- Dim localWorkBook As Excel.Workbook
-
- Set localWorkBook = ActiveWorkbook
- first = True
- jlocal = 1
- For Each fil In fso.GetFolder(Me.Path & "\files" ).Files
- Set wkb = Workbooks.Open(fil.Path, False, True)
- continue = True
- If first Then
- j = 1
- For i = 1 To 255
- If wkb.Sheets(1).Cells(j, i).Value = "" Then
- nbCols = i - 1
- Exit For
- End If
- Me.Sheets(1).Cells(jlocal, i) = wkb.Sheets(1).Cells(j, i)
- Next
- first = False
- jlocal = jlocal + 1
- End If
-
- For j = 2 To 65535
- For i = 1 To nbCols
- Me.Sheets(1).Cells(jlocal, i).NumberFormat = "@"
- Me.Sheets(1).Cells(jlocal, i) = wkb.Sheets(1).Cells(j, i)
- Next
- jlocal = jlocal + 1
- If jlocal = 65536 Then
- MsgBox ("Y'a plus de place dans le fichier !" )
- Exit Sub
- End If
- If wkb.Sheets(1).Cells(j + 1, 1).Value = "" Then
- Exit For
- End If
- Next
- wkb.Close
- Set wkb = Nothing
- Next
- End Sub
|
Fonctionnement :
Citation :
Mettre vos fichiers à Merger dans le répertoire "files".
Ils doivent répondent aux critères :
1/ Première ligne = entête
2/ Il doivent toujours avoir la même structure (colonnes dans le même ordre, etc.)
3/ Première colonne obligatoirement remplie pour toutes les lignes
Ensuite, ouvrir le fichier "Merge.xls", et lancer la macro "AutoExec" si elle ne démarre pas toute seule.
Normalement, au bout de quelques secondes, tous les fichiers doivent être réunis dans le fichier "merge.xls".
|
PS: Cette macro ne fais pas exactement ce qui est demandé initialement.
Ici, on a X fichier contenant des données. Ils ont tous la même structure. On veut les merger en un seul fichier. |