Bonjour,
une solution avec une fonction personnalisée, voila ce que j'ai compris
si le jour de la date +7 mois est plus petit que le jour de fin de mois on prend le jour de la date butoir, sinon on prend le jour de fin de mois du mois + 7 mois. exemples :
31/7/2017 -> 28/2/2018
25/7/2017->25/2/2018
30/9/2017->30/4/2018
Function datbutoir(ld As Range, lt As Range, nm)
' ld, plage de dates pour laquelle il faut déterminer la date butoir
' lt, plage de titres correspondants
' nm, nombre de mois à ajouter à la dernière date trouvée pour déterminer la date butoir
tm = Split("janv.,févr.,mars,avr.,mai,juin,juil.,août,sept.,oct.,nov.,déc.", ",")
If ld.Count <> lt.Count Then datbutoir = CVErr(xlErrValue): Exit Function
For i = ld.Count To 1 Step -1
If ld.Cells(1, i) <> "" Then Exit For
Next i
d = Val(ld.Cells(1, i))
y = Right(lt.Cells(1, i), 2)
m = Replace(lt.Cells(1, i), " " & y, "")
y = y + 2000
For i = 1 To 12
If m = tm(i - IIf(LBound(tm) = 0, 1, 0)) Then Exit For
Next i
m = i
m = m + nm
If m > 12 Then y = y + 1: m = m - 12
eom = Day(Application.WorksheetFunction.EoMonth(DateSerial(y, m, 1), 0))
If eom < d Then d = eom
dt = DateSerial(y, m, d)
datbutoir = dt
End Function
la fonction pourrait être grandement simplifiée si tu utilisais des dates dans ton tableau et non des chaines de caractères qu'il faut convertir en date pour pouvoir faire les calculs.