Bonsoir,
L'instruction qui indique les colonnes à traiter est :
For Each C In Cel.Offset(0, 2).Resize(, 4)
Exemple
Avec Cel qui représente B2, l'instruction se traduit par "pour chaque cellule de la plage D2:G2".
Pour étendre le traitement aux colonnes H, I, J, tu peux modifier le dimensionnement de la plage :
For Each C In Cel.Offset(0, 2).Resize(, 7)
Autre méthode, sachant que la dernière colonne à traiter est l'avant dernière colonne renseignée, tu peux également coder :
DerCol = .Cells(1, Columns.Count).End(xlToLeft).Column
For Each C In Cel.Offset(0, 2).Resize(, DerCol - 4)
(le nombre de colonnes à traiter est donné par DerCol - 4, les 4 colonnes soustraites étant Lieu, Objet, Couleur et Total).
Option Explicit
Sub Creer_Liste()
Dim DerLig As Long, LigneC As Long
Dim Cel As Range, C As Range
Dim i As Integer, DerCol As Integer
LigneC = 2
With Worksheets("Feuil1")
DerLig = .Range("B" & Rows.Count).End(xlUp).Row
DerCol = .Cells(1, Columns.Count).End(xlToLeft).Column
For Each Cel In .Range("B2:B" & DerLig)
For Each C In Cel.Offset(0, 2).Resize(, DerCol - 4)
If C.Value > 0 Then
For i = 1 To C.Value
Cel.Resize(, 2).Copy Worksheets("Feuil2").Cells(LigneC, 1)
Worksheets("Feuil2").Cells(LigneC, 3) = .Cells(1, C.Column).Value
LigneC = LigneC + 1
Next i
End If
Next C
Next Cel
End With
Worksheets("Feuil2").Activate
End Sub
A+