Option Explicit
Sub Ventile()
Dim CurCell As Range, Titre As Range
Dim Rep
Rep = MsgBox("Voulez vous créer les classeurs ?", vbYesNo)
Application.ScreenUpdating = 0
Columns("A:J").Sort Key1:=Range("B2"), Order1:=xlAscending, Key2:=Range("A2"), Order2:=xlAscending, Header:=xlGuess
Range("A1").Select
Set CurCell = ThisWorkbook.Sheets("Data").Range("B1")
Set Titre = ThisWorkbook.Sheets("Data").Range("A1:J1")
While CurCell.Value <> vbNullString
With GetSheet(CurCell.Value)
Titre.EntireRow.Copy .Cells(1, 1)
CurCell.EntireRow.Copy .Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0)
End With
Set CurCell = CurCell.Offset(1, 0)
Columns("A:J").Columns.AutoFit
Wend
Application.DisplayAlerts = 0
Sheets("Direction").Delete
Application.DisplayAlerts = 1
Sheets("Data").Activate
If Rep = vbYes Then Call Création
End Sub
Sub Création()
Dim X%
For X = 2 To Sheets.Count
Sheets(X).Copy
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & ActiveSheet.Name & ".xls"
ActiveWorkbook.Close
Next
End Sub
Public Function GetSheet(SheetName As String) As Worksheet
'Cette fonction renvoie la feuille nommée <SheetName> et la crée si elle n'existe pas
Dim CurSheet As Worksheet, Exist As Boolean
Exist = False
For Each CurSheet In ThisWorkbook.Sheets
If CurSheet.Name = SheetName Then Exist = True
Next CurSheet
If Not Exist Then
ThisWorkbook.Sheets.Add after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count).Name = SheetName
End If
Set GetSheet = ThisWorkbook.Worksheets(SheetName)
End Function