Option Explicit
Function DateFin(ByVal DtDéb, ByVal Durée)
Dim TSp() As String
If TypeOf DtDéb Is Range Then DtDéb = DtDéb.Value
If TypeOf Durée Is Range Then Durée = Durée.Value
If VarType(Durée) = vbString Then
If IsNumeric(Durée) Then Durée = CDbl(Durée)
End If
If VarType(Durée) = vbDouble Then
If VarType(DtDéb) = vbDate Then
DateFin = DateSerial(Year(DtDéb) + Durée, Month(DtDéb), Day(DtDéb))
ElseIf DtDéb Like "*/*/*" Then
TSp = Split(DtDéb, "/")
TSp(2) = TSp(2) + Durée
DateFin = Join(TSp, "/")
If TSp(2) >= 1900 Then DateFin = CDate(DateFin)
Else
DateFin = CVErr(xlErrValue)
End If
Else
DateFin = "Perpétuité"
End If
End Function