Il y a plusieurs solutions dont l'utilisation pure de champs, mais sans macro, et ça fonctionnera bien si vous n'avez pas peur d'utiliser ces champs, et si vous ne voulez pas de macro. Voir cet article.
Il y a une solution qui passe par une macro, mais qui est simplissime.
On va utiliser une macro qui va créer des variables de document. L'avantage d'une telle macro c'est que, d'une part, elle va être extrêmement simple car elle ne fait que créer des variables sans s'occuper ensuite de les incorporer dans le document, et que, d'autre part, vous allez pouvoir utiliser le ou les résultats de la macro n'importe où dans votre document, où bon vous semble. C'est vous qui gérez.
Lorsque c'est la macro qui fait ce travail, c'est toujours très compliqué, car il faut utiliser des signets pour savoir exactement où mettre le résultat. Les signets se détruisent facilement surtout si le document est appelé à être modifié.
La macro se lance UNE SEULE FOIS pour toutes. Une une fois ces variables créées par la macro, vous les insérerez dans le document avec des champs DOCVARIABLE.
Voici un exemple de macro qui va créer des dates en ajoutant un jour, deux jours, trois jours... à la date du jour.
With ActiveDocument.Variables
.Add Name:="date2", Value:=Date + 1
.Add Name:="date3", Value:=Date + 2
.Add Name:="date4", Value:=Date + 3
.Add Name:="date5", Value:=Date + 4
End With
Après avoir exécuté une fois la macro, vous pourrez créer les champs dans votre document :
{ DOCVARIABLE la date2} vous donnera la date du jour + 1 jour
{ DOCVARIABLE la date3} vous donnera la date du jour + 2 jour
Les { } s'insèrent obligatoirement avec Ctrl+9 (ou via la boîte de dialogue Champs). La mise à jour se fait avec F9.
Si vous voulez copier Excel et utiliser la formule FIN.MOIS, c'est possible avec une macro. La macro suivante, toujours à lancer une seule fois, va créer une variable qui va calculer le dernier jour du mois suivant la date du jour :
madate = DateSerial(Year(Now), Month(Now) + 2, 0)
ActiveDocument.Variables.Add Name:="fin_mois", Value:=madate
Le champ à ajouter dans votre document sera donc { DOCVARIABLE fin_mois}
IMPORTANT !
On peut imaginer que ces macros sont destinées à des modèles. Une date étant une donnée qui, comme son nom l'indique, change tous les jours, il va falloir qu'un nouveau document créé à partir de ce modèle soit basé sur la date du jour. Il faut donc que la macro se mette à jour à la création du nouveau document.
Pour cela, il faudra mettre la macro dans le modèle et la nommer Autonew et faire en sorte qu'elle redéfinisse la variable et mette les champs à jour :
Sub autonew()
Dim finmois
On Error Resume Next
finmois = DateSerial(Year(Now), Month(Now) + 1, Day(Now))
With ActiveDocument
.Variables("date2").Value = Date + 1
.Variables("fin_mois").Value = finmois
.Fields.Update
End With
End Sub
Si vous voulez donner la possibilité à l'utilisateur de choisir le nombre de jours à ajouter, vous utiliserez la macro suivante. Cette macro pourra être réutilisée si le nombre de jours doit changer, elle mettra en même temps à jours les champs déjà éventuellement créés (à nommer également Autonew si vous souhaitez que cette macro puisse se mette automatiquement à jour à la création d'un nouveau document).
Sub calcul_date()
Dim nb As Integer, date2 As Date
On Error Resume Next
nb = InputBox("Combien de jours voulez-vous ajouter à la date du jour ?")
date2 = DateAdd("d", nb, Date)
With ActiveDocument
.Variables("date2").Value = date2
.Fields.Update
End With
End Sub
Si vous voulez plutôt proposer d'ajouter des mois, il suffira de remplacer les deux lignes nb et date2 par les suivantes :
nb = InputBox("Combien de mois voulez-vous ajouter à la date du jour ?")
date2 = DateAdd("m", nb, Date)