'Option Explicit
Sub export()
Dim a(), i&, n&, j&
Dim ii&, jj&
With ThisWorkbook.Sheets("BOM")
'Enregistrement du tableau BOM dans un tableau virtuel.
'De [A1] à [W&dernière ligne]
ii = .Cells.Find("*", , , , xlByRows, xlPrevious).Row
jj = .Cells.Find("*", , , , xlByColumns, xlPrevious).Column
a = .Range(.[a1], .Cells(ii, jj)).Value
End With
With ThisWorkbook.Sheets("PDS021 Opérations")
'Nettoye la feuille PDS021.
.Range(.[a4], .Range("E" & .Cells.Find("*", , , , xlByRows, xlPrevious).Row)).Offset(1).Clear
'Boucle sur le tableau virtuel.
For i = LBound(a) To UBound(a)
'Si en 9ème colonne il est inscrit Nouveau code alors.
If a(i, 9) = "Nouveau code" Then
For j = 13 To jj Step 4
If a(i, j) = "" Then Exit For
'On incrémente n de 1.
n = n + 1
'En [B4] décalé de n lignes, on enregistre la valeur en colonne 8.
'Ainsi de suite.
.[B4].Offset(n).Value = a(i, 8)
.[C4].Offset(n).Value = a(i, j)
.[D4].Offset(n).Value = a(i, j + 1)
.[E4].Offset(n).Value = a(i, j + 2)
Next j
End If
Next i
'Tri de la liste de [B5] à [E&dernière ligne] par rapport à [B5]
.Range(.[B4], .Range("E" & .Cells.Find("*", , , , xlByRows, xlPrevious).Row)).Offset(1).Sort .[B5], xlAscending
End With
End Sub
La dernière colonne est déterminée.
Ici on boucle à partir de la colonne 13 puis toutes les 4 colonnes, décalage de ton dernier fichier.
Si tu dois partir depuis la 50 :
For j = 50 To jj Step 4