OVH Cloud OVH Cloud

macro Word équivalente à mois.decaler sous Excel

5 réponses
Avatar
jfv
Bonsoir,
Je cherche une macro qui permette dans un formulaire Word, de calculer une
date de fin de mois équivalente à la fonction mois.decaler sous Excel.
Exemple : saisie de la date de début : 30.06.2005
Nb mois : 2
La macro doit renvoyer 31.07.2005 comme résultat.
Merci de votre précieuse aide.
Jeff

5 réponses

Avatar
Geo
Bonjour Jeff


Bonsoir,
Je cherche une macro qui permette dans un formulaire Word, de
calculer une date de fin de mois équivalente à la fonction
mois.decaler sous Excel. Exemple : saisie de la date de début :
30.06.2005
Nb mois : 2
La macro doit renvoyer 31.07.2005 comme résultat.
Merci de votre précieuse aide.


Tout est possible ou presque avec Word, il suffit d'être un agriculteur de
haut niveau, ou autrement dit expert en culture des champs, mais pour un
utilisateur normal qui veut normalement pas être embêté, il vaut mieux
utiliser Excel pour les calculs et Word pour le traitement de texte.

--
Geo de la pallice

Avatar
Anacoluthe
Bonjour !

'jfv' nous a écrit ...
Je cherche une macro qui permette dans un formulaire Word, de calculer une
date de fin de mois équivalente à la fonction mois.decaler sous Excel.
Exemple : saisie de la date de début : 30.06.2005
Nb mois : 2
La macro doit renvoyer 31.07.2005 comme résultat.


Geo a raison : Word est nullissime en calcul de dates !

Il faut effectivement utiliser VBA
Soit deux champs de formulaire de signets Date1 et Date2
et la macro suivante :

Public Sub Plus2Mois()
With ActiveDocument.FormFields
If IsDate(.Item("Date1").Result) Then
.Item("Date2").Result = DateAdd("M", 2, .Item("Date1").Result)
End If
End With
End Sub

Propriété Date1 : remplisssage activé, exécuter macro
en sortie : Plus2Mois
Propriété Date2 : remplissage inactivé

Le champ Date2 calculé affiche automatiquement Date1 + 2 mois

Si vous voulez que la date soit décalée au dernier jour du
mois, il faudra une formule un peu plus compliquée que
le simple DateAdd() mais c'est faisable aussi.

Anacoluthe
« J'aime les calculs faux, car ils donnent des résultats
plus justes. »
- Jean ARP

Avatar
jfv
Bonjour,

Merci à Anacoluthe, votre macro fonctionne parfaitement et résout mon prob.
Mais comment la compléter de manière à ce que "Date2" soit systématiquement
calculée avec le dernier jour du mois en question ?
Merci par avance de votre aide.

Bonjour !

'jfv' nous a écrit ...
Je cherche une macro qui permette dans un formulaire Word, de calculer une
date de fin de mois équivalente à la fonction mois.decaler sous Excel.
Exemple : saisie de la date de début : 30.06.2005
Nb mois : 2
La macro doit renvoyer 31.07.2005 comme résultat.


Geo a raison : Word est nullissime en calcul de dates !

Il faut effectivement utiliser VBA
Soit deux champs de formulaire de signets Date1 et Date2
et la macro suivante :

Public Sub Plus2Mois()
With ActiveDocument.FormFields
If IsDate(.Item("Date1").Result) Then
..Item("Date2").Result = DateAdd("M", 2, .Item("Date1").Result)
End If
End With
End Sub

Propriété Date1 : remplisssage activé, exécuter macro
en sortie : Plus2Mois
Propriété Date2 : remplissage inactivé

Le champ Date2 calculé affiche automatiquement Date1 + 2 mois

Si vous voulez que la date soit décalée au dernier jour du
mois, il faudra une formule un peu plus compliquée que
le simple DateAdd() mais c'est faisable aussi.

Anacoluthe
« J'aime les calculs faux, car ils donnent des résultats
plus justes. »
- Jean ARP




Avatar
Anacoluthe
Bonjour !

'jfv' nous a écrit ...
Merci à Anacoluthe, votre macro fonctionne parfaitement et résout mon prob.
Mais comment la compléter de manière à ce que "Date2" soit systématiquement
calculée avec le dernier jour du mois en question ?


Si vous souhaitez obtenir systématiquement le dernier jour d'un mois
utilisez la veille du premier jour (toujours 1) du mois suivant !

Supposons que pour toute date du mois, vous souhaitiez obtenir
le dernier jour du 2ème mois suivant, écrivez :

Public Sub Plus2Mois()
With ActiveDocument.FormFields
If IsDate(.Item("Date1").Result) Then
.Item("Date2").Result = DateAdd("d", -1, _
DateAdd("m", 3, "01/" & Format(.Item("Date1").Result, "mm/yyyy")))
End If
End With
End Sub

C'est plus proche de ce que vous vouliez ?

Anacoluthe
« J'aime les calculs faux, car ils donnent des résultats
plus justes. »
- Jean ARP

Avatar
jfv
Bonjour Anacoluthe,

Oui, votre macro affiche le résultat recherché. Merci bcp de votre peine.
Au plaisir.


Bonjour !

'jfv' nous a écrit ...
Merci à Anacoluthe, votre macro fonctionne parfaitement et résout mon prob.
Mais comment la compléter de manière à ce que "Date2" soit systématiquement
calculée avec le dernier jour du mois en question ?


Si vous souhaitez obtenir systématiquement le dernier jour d'un mois
utilisez la veille du premier jour (toujours 1) du mois suivant !

Supposons que pour toute date du mois, vous souhaitiez obtenir
le dernier jour du 2ème mois suivant, écrivez :

Public Sub Plus2Mois()
With ActiveDocument.FormFields
If IsDate(.Item("Date1").Result) Then
..Item("Date2").Result = DateAdd("d", -1, _
DateAdd("m", 3, "01/" & Format(.Item("Date1").Result, "mm/yyyy")))
End If
End With
End Sub

C'est plus proche de ce que vous vouliez ?

Anacoluthe
« J'aime les calculs faux, car ils donnent des résultats
plus justes. »
- Jean ARP