Sub transposition_tableau()
Dim i&, j&, k&, v$, bs, bt, x, y, Champs(), b(), m(), Cel As Range
Champs = Feuil1.[A1].Resize(1, Feuil1.[A1].End(xlToRight).Column - 2).Offset(0, 2).Value
m = Array()
b = Array()
For i = 1 To UBound(Champs, 2)
If Champs(1, i) Like "Gr*B* Max" Then
ReDim Preserve m(UBound(m) + 1)
m(UBound(m)) = Array(i, Champs(1, i))
End If
Next
For i = 0 To UBound(m)
v = Left$(m(i)(1), Len(m(i)(1)) - 4)
For j = 1 To UBound(Champs, 2)
If v = Champs(1, j) Then
ReDim Preserve b(UBound(b) + 1)
b(UBound(b)) = Array(j, Champs(1, j))
End If
Next
Next
With Application: .ScreenUpdating = 0: .EnableEvents = 0: .Calculation = -4135: End With
Feuil2.[A1].CurrentRegion.Offset(1).ClearContents
For Each Cel In Feuil1.[A1].Resize(Feuil1.[A1].End(xlDown).Row - 1, 1).Offset(1).Cells
bt = Cel.Value: bs = Cel.Offset(, 1).Value
For i = 0 To UBound(b)
x = Split(b(i)(1), "r")
y = Split(x(1), "B")
ReDim Preserve y(6)
y(2) = bt: y(3) = bs
y(4) = Cel.Offset(, b(i)(0) + 1).Value
y(5) = Cel.Offset(, m(i)(0) + 1).Value
k = k + 1
Feuil2.[A1].Resize(1, 6).Offset(k).Value = y
Next
Next
Set Cel = [A1].Resize(k, 6)
With Feuil2.Sort
With .SortFields
.Clear
.Add Key:=Cel.Columns(1), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
.Add Key:=Cel.Columns(2), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
End With
.SetRange Cel.Cells
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
With Application: .Calculation = -4105: .EnableEvents = 1: .ScreenUpdating = 1: End With
End Sub