l'UDF est modifié un petit peu, les années avant 1900 restent texte et le reste est numerique où on peut appliquer un format comme "jj/mm/aaaa" ou un autre
Ceci fonctionne pour les date à partir de l'année 0 et est facile à adapter pour les années plus tôt.
Il vérifie aussi le 29 février en cas de ...
Function DateFin(DateDebut, Durée)
'***********************************
'fonctionne pour des date > 01/01/0000
'***********************************
Dim DatePlus
If Len(DateDebut) * Len(Durée) = 0 Then DateFin = "-": Exit Function 'un des 2 variables n'est pas connu
If StrComp(Durée, "P", 1) = 0 Then DateFin = "Perpétuité": Exit Function 'durée est un "P"
If VarType(Durée) = vbString Then DateFin = "Texte": Exit Function 'durée est texte
If VarType(DateDebut) <> vbString Then 'date n'est pas un texte, donc un date >= 01/01/1900
DateFin = CDbl(WorksheetFunction.EDate(DateDebut, 12 * Durée)) 'c'est facile, juste ajouter la durée en mois
Else
sp = Split(DateDebut, "/") 'split le texte sur les "/"
DatePlus = WorksheetFunction.EDate(DateSerial(sp(2) + 2000, sp(1), sp(0)), 12 * Durée) 'ajouter 2.000 années pourque la date soit >= 1/1/1900 et puis au tant d'années *12
On Error Resume Next 'continuer en cas d'erreurs
DateFin = WorksheetFunction.EDate(DatePlus, -12 * 2000) 'substraire de nouveau 2.000 anées
On Error GoTo 0
If VarType(DateFin) = 0 Then DateFin = Format(DatePlus, "DD/MM/") & Format(Format(DatePlus, "yyyy") - 2000, "0000") 'si après substraction la date est < 1/1/1900, le résultat sera un texte
End If
End Function