[B][COLOR="DarkSlateGray"]Sub tata()
Dim masse#, cible#, tol#, vmin#, vmax#
Dim t#, tmp#, i&, j%, n&, pas%, delta#
Dim table#(), nt&
Dim gr(), ng&, sg&
[COLOR="SeaGreen"]'[/COLOR]
masse = 1
cible = 30
tol = 0.05
[COLOR="SeaGreen"]'[/COLOR]
pas = 100
[COLOR="SeaGreen"]'[/COLOR]
vmin = cible * (1 - tol)
vmax = cible * (1 + tol)
nt = 0
t = -pas
For n = 1 To 30
For j = 0 To 5 [COLOR="SeaGreen"]' 14[/COLOR]
delta = pas / 10 ^ j
Do
t = t + delta
tmp = masse * f(t)
For i = 1 To nt
tmp = tmp + table(2, i) * f(t - table(1, i))
Next i
Loop While tmp > vmin
t = t - delta
Next j
tmp = masse * f(t)
For i = 1 To nt
tmp = tmp + table(2, i) * f(t - table(1, i))
Next i
nt = nt + 1
ReDim Preserve table(1 To 3, 1 To nt)
table(1, nt) = t
table(2, nt) = (vmax - tmp) / f(0)
table(3, nt) = tmp
Next n
Range(Cells(1, 1), Cells(nt, 2)).Offset(1, 0).Value = WorksheetFunction.Transpose(table)
[COLOR="SeaGreen"]'[/COLOR]
ng = 0
pas = 50
For n = 0 To 100
t = n * pas
tmp = masse * f(t)
For i = 1 To nt
If t > table(1, i) Then
tmp = tmp + table(2, i) * f(t - table(1, i))
Else
sg = i
Exit For
End If
Next i
ng = ng + 1
ReDim Preserve gr(1 To 3, 1 To ng)
gr(1, ng) = t
gr(2, ng) = tmp
If t + pas > table(1, sg) Then
ng = ng + 1
ReDim Preserve gr(1 To 3, 1 To ng)
gr(1, ng) = table(1, sg)
gr(2, ng) = table(3, sg)
tmp = masse * f(table(1, sg))
For i = 1 To sg
tmp = tmp + table(2, i) * f(table(1, sg) - table(1, i))
Next i
ng = ng + 1
ReDim Preserve gr(1 To 3, 1 To ng)
gr(1, ng) = table(1, sg)
gr(2, ng) = tmp
gr(3, ng) = table(2, sg)
End If
Next n
Range(Cells(1, 4), Cells(ng, 6)).Offset(1, 0).Value = WorksheetFunction.Transpose(gr)
End Sub[/COLOR][/B]