A mon avis, la date de fin de mois (le 14) ne joue aucun rôle. Si on est le 15 du mois courant et si la macro n'a pas encore été exécutée, on l'exécute et on met un flag dans une cellule masquée du fichier (initialement à 0 au départ, puis à 1 après exécution par exemple).
Pour savoir si on est le 15 du mois courant, un truc dans ce goût-là :
Dim jour As Byte
jour = Format(Date, "dd")
If jour <> 15 Then
Echec ' Message avec raison de l'échec date <> 15 ou Flag à 1
Else
Sheets("Flag").Cells(1, 1) = 1
Succes
End If