Option Explicit
Private Sub Workbook_Open()
Dim LOt As ListObject, TDtAnt(), TPério(), L As Long, NDate As Date, _
J As Integer, M As Integer, A As Integer, JFM As Integer
Set LOt = Feuil3.ListObjects(1)
TDtAnt = LOt.ListColumns("Anterieure").DataBodyRange.Value
TPério = LOt.ListColumns("P").DataBodyRange.Resize(, 2).Value
For L = 1 To UBound(TDtAnt, 1)
If TPério(L, 1) > 0 And Not IsEmpty(TDtAnt(L, 1)) Then
NDate = TDtAnt(L, 1): J = Day(NDate): M = Month(NDate): A = Year(NDate)
JFM = NDate - DateSerial(A, M + 1, 0): If JFM >= -3 Then J = JFM: M = M + 1
If UCase(Left$(TPério(L, 2), 1)) = "A" Then A = A + TPério(L, 1) Else M = M + TPério(L, 1)
NDate = DateSerial(A, M, J)
If NDate <= Date Then TDtAnt(L, 1) = NDate
End If
Next L
LOt.ListColumns("Anterieure").DataBodyRange.Value = TDtAnt
End Sub