Function toto(d1 As Date, d2 As Date)
If d2 >= d1 And d1 * d2 Then toto = 12 * (Year(d2) - Year(d1)) + Month(d2) - Month(d1) - (d2 - DateSerial(Year(d2), Month(d2), 0) > 15) - (DateSerial(Year(d1), Month(d1) + 1, 0) - d1 > 14) - 1 Else toto = ""
End Function
Sub tata()
Dim c&, i&, v()
Const Adr$ = "B2" 'Entête de la première colonne de données.
'Avec Adr = "B2", les résultats sont dans la colonne D, à partir de la ligne 3.
c = Cells(Rows.Count, Range(Adr).Column).End(xlUp).Row
If c > Range(Adr).Row Then
v = Range(Cells(Range(Adr).Row + 1, Range(Adr).Column), Cells(c, Range(Adr).Column + 1)).Value
For i = 1 To UBound(v)
If IsDate(v(i, 1)) And IsDate(v(i, 2)) Then v(i, 1) = toto(CDate(v(i, 1)), CDate(v(i, 2))) Else v(i, 1) = Empty
Next
Range(Cells(Range(Adr).Row + 1, Range(Adr).Column + 2), Cells(c, Range(Adr).Column + 2)).Value = v
End If
End Sub