Re,
Une nouvelle proposition VBA.
Tu noteras la différence avec les versions précédentes.
Cdlt.
Option Explicit
Public Sub CreateTable()
Dim tbl, arr()
Dim lo As ListObject
Dim r As Range
Dim n
Dim I As Long, J As Long, K As Long, m As Long
Application.ScreenUpdating = False
tbl = Worksheets("Ce que j'ai").Cells(1).CurrentRegion.Value
Set lo = Range("Résultat").ListObject
With lo
If Not .DataBodyRange Is Nothing Then .DataBodyRange.Delete
Set r = .InsertRowRange.Cells(1)
End With
For I = 2 To UBound(tbl)
For J = 9 To UBound(tbl, 2)
If tbl(I, J) <> "" Then
On Error Resume Next
n = VBA.Split(WorksheetFunction.Trim(tbl(I, J)), Chr(10))
For K = LBound(n) To UBound(n)
If VBA.Len(n(K)) > 1 Then
ReDim Preserve arr(10, m + 1)
arr(0, m) = tbl(I, 1)
arr(1, m) = tbl(I, 2)
arr(2, m) = tbl(I, 3)
arr(3, m) = tbl(I, 4)
arr(4, m) = tbl(I, 5)
arr(5, m) = tbl(I, 6)
arr(6, m) = tbl(I, 7)
arr(7, m) = tbl(I, 8)
arr(8, m) = tbl(1, J)
arr(9, m) = n(K)
m = m + 1
End If
Next K
End If
Next J
Next I
If m > 0 Then r.Resize(m, 10).Value = Application.Transpose(arr)
End Sub