Tout le (nouveau) module export
Sub fractionner()
Dim Tbl As Variant, data As Variant, i%
Dim dico1 As Object, cle1 As Variant, result1 As Variant, prov1 As Variant
Dim xl As Excel.Application, wb As Excel.Workbook
Dim critere%
critere = 13
data = ActiveSheet.Cells(1, 1).CurrentRegion
Set dico1 = CreateObject("Scripting.Dictionary")
For i = LBound(data) + 1 To UBound(data) ' hors en-tête
dico1(data(i, critere)) = ""
Next
Set xl = CreateObject("Excel.Application")
xl.SheetsInNewWorkbook = 1
prov1 = data(1, critere)
For Each cle1 In dico1.Keys
Set wb = xl.Workbooks.Add
data(1, critere) = cle1 ' pour emmener aussi l'en-tête
result1 = filtreArray(data, critere, cle1)
wb.Sheets(1).Cells(1, 1).Resize(UBound(result1, 1), UBound(result1, 2)) = result1
wb.Sheets(1).Cells(1, critere).Value = prov1
wb.SaveAs (ThisWorkbook.Path & "\" & cle1 & ".xlsx")
wb.Close
Set wb = Nothing
Next
xl.Quit
Set xl = Nothing
MsgBox "Terminé !"
End Sub
Function filtreArray(Tbl, col, param)
Dim i%, j%, k%, n%
For i = 1 To UBound(Tbl)
If Tbl(i, col) = param Then n = n + 1
Next i
Dim temp: ReDim temp(1 To n, 1 To UBound(Tbl, 2))
j = 0
For i = 1 To UBound(Tbl)
If Tbl(i, col) = param Then
j = j + 1
For k = 1 To UBound(Tbl, 2)
temp(j, k) = Tbl(i, k)
Next k
End If
Next i
filtreArray = temp
End Function