Sub Copie(wb As Workbook)
Dim ws As Worksheet, dest As Range, source As Range, maRef As String, maligne As Integer
Dim tablo()
For Each ws In wb.Worksheets
Set dest = ThisWorkbook.Worksheets(ThisWorkbook.Sheets.Count).Range("A65536").End(xlUp).Offset(1, 0)
With ws
maRef = .Range("B2").Value
If .Range("A22") <> "" Then
If (65536 - dest.Row + 1) >= (.Range("A22").End(xlDown).Row - 22) Then
' cas si il reste suffisament de lignes dans le fichier destination
ReDim tablo(1 To 10, 1 To .Range("A22").End(xlDown).Row)
tablo = .Range("A22:J" & .Range("A22").End(xlDown).Row).Value
dest.Resize(UBound(tablo, 1), UBound(tablo, 2)) = tablo
dest.Offset(0, 10).Resize(UBound(tablo, 1), 1) = ws.Name & " / " & maRef
Else
' cas ou il faille créer une nouvelle feuille
'copie premiere partie des données jusqu'a la derniere lignes
ReDim tablo(1 To 10, 1 To (65536 - dest.Row + 22))
tablo = .Range("A22:J" & (65536 - dest.Row + 22)).Value
maligne = (65536 - dest.Row + 22) + 1
dest.Resize(UBound(tablo, 1), UBound(tablo, 2)) = tablo
dest.Offset(0, 10).Resize(UBound(tablo, 1), 1) = ws.Name & " / " & maRef
' ajoute une feuille à la fin du classeur
ThisWorkbook.Sheets.Add.Move After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count - 1).Range("A1:J1").Copy Destination:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count).Range("A1")
' copie le reste de la feuille
ReDim tablo(1 To 10, 1 To .Range("A22").End(xlDown).Row - maligne)
tablo = .Range("A" & maligne & ":J" & .Range("A22").End(xlDown).Row).Value
Set dest = ThisWorkbook.Worksheets(ThisWorkbook.Sheets.Count).Range("A2")
dest.Resize(UBound(tablo, 1), UBound(tablo, 2)) = tablo
dest.Offset(0, 10).Resize(UBound(tablo, 1), 1) = ws.Name & " / " & maRef
End If
End If
End With
Next
Erase tablo
End Sub