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
| Sub Process()
Dim row As Long, CountOf As Long
SortsourceTable
row = 1
Do While row < Range("t_Récap").Rows.Count
CountOf = Application.CountIfs(Range("t_récap[direction]"), Range("t_Récap[Direction]")(row).Value)
TransferData row, CountOf
AdaptFormats Range("t_Récap[Direction]")(row).Value
row = row + CountOf
Loop
End Sub
Sub SortsourceTable()
With Range("t_Récap").ListObject.Sort
.SortFields.Clear
.SortFields.Add Key:=Range("t_Récap[Direction]"), SortOn:=xlSortOnValues, Order:=xlAscending
End With
End Sub
Function TransferData(row As Long, CountOf As Long)
Dim Direction As String
Dim sh As Worksheet
Dim Target As Range
Direction = Range("t_Récap[Direction]")(row).Value
Set sh = GetSheet(Direction)
GetTable Direction
Set Target = Range("t_" & Direction).ListObject.ListRows.Add().Range
Target.Resize(CountOf, Range("t_Récap").Columns.Count).Value = Range("t_Récap")(row, 1).Resize(CountOf, Range("t_Récap").Columns.Count).Value
End Function
Function SheetExists(Name As String, Optional wb As Workbook) As Boolean
Dim i As Long
If wb Is Nothing Then Set wb = ActiveWorkbook
Do While i < wb.Sheets.Count And Not SheetExists
SheetExists = (StrComp(Name, wb.Sheets(i + 1).Name, vbTextCompare) = 0)
i = i + 1
Loop
End Function
Function GetSheet(Name As String) As Worksheet
If SheetExists(Name) Then
Set GetSheet = Worksheets(Name)
GetSheet.Cells.Clear
Else
Set GetSheet = Worksheets.Add()
GetSheet.Name = Name
End If
End Function
Function GetTable(Direction As String) As ListObject
Set GetTable = Worksheets(Direction).ListObjects.Add(xlSrcRange, Worksheets(Direction).Range("a1"))
GetTable.Name = "t_" & Direction
Range("t_Récap[#Headers]").Copy
Range("t_" & Direction & "[#Headers]").Resize(1, Range("t_Récap[#Headers]").Columns.Count).Value = Range("t_Récap[#Headers]").Value
End Function
Function AdaptFormats(Direction As String)
Dim c As Long
For c = 1 To Range("t_Récap").Columns.Count
Range("t_" & Direction).Cells(1, c).ColumnWidth = Range("t_Récap").Cells(1, c).ColumnWidth
Next
End Function |
Partager