[COLOR="DarkSlateGray"][B]Sub toto()
Dim i&, j&, k&, c1&, c2&, n&, l&, u&, a, b, s$, oPlg, oDat(), sDat(), par(1 To 2), loc As Range
With Application
par(1) = .EnableEvents: par(2) = .Calculation
.Calculation = xlCalculationManual: .EnableEvents = False: .ScreenUpdating = False
End With
Set loc = Selection
s = ";" 'Séparateur
With [A1] 'Première cellule de données
c1 = 1 - .Column + [M1].Column 'Première colonne à diviser
c2 = 1 - .Column + [N1].Column 'Deuxième colonne à diviser
Set oPlg = Range(.Cells, Cells(Cells(Rows.Count, .Column).End(xlUp).Row, Cells(.Row, Columns.Count).End(xlToLeft).Column))
u = oPlg.Columns.Count
ReDim oDat(1 To oPlg.Rows.Count, 1 To u)
oDat = oPlg.Value2
Set oPlg = Nothing
n = 1
ReDim sDat(1 To u, 1 To n)
For i = 1 To UBound(oDat, 1)
a = Split(oDat(i, c1), s)
b = Split(oDat(i, c2), s)
l = WorksheetFunction.Max(0, UBound(a), UBound(b))
ReDim Preserve sDat(1 To u, 1 To n + l + 1)
For j = n To n + l: For k = 1 To u: sDat(k, j) = oDat(i, k): Next: Next
If l > 0 Then
For j = 0 To UBound(a): sDat(c1, n + j) = CLng(CDate(a(j))): Next
For j = 0 To UBound(b): sDat(c2, n + j) = b(j): Next
End If
n = n + l + 1
Next i
Erase oDat
ReDim Preserve sDat(1 To u, 1 To n + (n > 1))
.Resize(1, u).Copy
With .Resize(n + (n > 1), u)
.PasteSpecial xlPasteFormats
.Value = WorksheetFunction.Transpose(sDat)
End With
End With
Erase sDat
loc.Select
Set loc = Nothing
With Application
.ScreenUpdating = True: .EnableEvents = par(1): .Calculation = par(2)
End With
End Sub[/B][/COLOR]