Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Calculer l'âge depuis une date de naissance dans une macro

11 réponses
Avatar
Jacques ELKINE
Bonjour,

Je voudrais pouvoir transformer sur word, par une simple macro, une date
de naissance saisie dans le texte par l'âge correspondant.

Je coince encore. Lorsque je contrôle, l'âge affiché ne change pas au
jour près, lorsque je saisis successivement des dates de naissance
proches de la date du jour (Date).

Ci-dessous ma macro, dans son état actuel ... :

Sub AGE()
' Age Macro
' Macro enregistrée le 30/04/2006
' Sélectionne une date qu'on vient de saisir dans le texte
' (10 caractères) place le contenu dans Datenaiss
Selection.MoveLeft Unit:=wdCharacter, Count:=10, Extend:=wdExtend
Dim DateNaiss As Date
Dim AgePat As Variant
DateNaiss = Selection
AgePat = DateDiff("yy", DateNaiss, Now)
MsgBox (AgePat)

' Suit ci-dessous la suite du projet qui inscrira l'âge
' Efface la date de naissance dans le texte et la remplace
' par l'âge calculé
' Delete.Selection
' ReplaceSelection = True
' Selection.TypeText (AgePat)
End Sub

Merci d'avance pour toute contribution.
Bien cordialement.

10 réponses

1 2
Avatar
Gilbert
Bonjour,

Tu ne calcule l'âge que sur l'année

Essaie avec
Age = DateDiff("yyyy", DateNaissance, Date) + (Format(Date, "mmdd") <
Format(DateNaissance, "mmdd"))

Gilbert

"Jacques ELKINE" a écrit dans le message de
news:
Bonjour,

Je voudrais pouvoir transformer sur word, par une simple macro, une date
de naissance saisie dans le texte par l'âge correspondant.

Je coince encore. Lorsque je contrôle, l'âge affiché ne change pas au
jour près, lorsque je saisis successivement des dates de naissance
proches de la date du jour (Date).

Ci-dessous ma macro, dans son état actuel ... :

Sub AGE()
' Age Macro
' Macro enregistrée le 30/04/2006
' Sélectionne une date qu'on vient de saisir dans le texte
' (10 caractères) place le contenu dans Datenaiss
Selection.MoveLeft Unit:=wdCharacter, Count:, Extend:=wdExtend
Dim DateNaiss As Date
Dim AgePat As Variant
DateNaiss = Selection
AgePat = DateDiff("yy", DateNaiss, Now)
MsgBox (AgePat)

' Suit ci-dessous la suite du projet qui inscrira l'âge
' Efface la date de naissance dans le texte et la remplace
' par l'âge calculé
' Delete.Selection
' ReplaceSelection = True
' Selection.TypeText (AgePat)
End Sub

Merci d'avance pour toute contribution.
Bien cordialement.


Avatar
Geo

Tu ne calcule l'âge que sur l'année

Essaie avec
Age = DateDiff("yyyy", DateNaissance, Date) + (Format(Date, "mmdd") <
Format(DateNaissance, "mmdd"))


Joli !

--
A+

Avatar
Jacques ELKINE
Bonjour,
...
Essaie avec
Age = DateDiff("yyyy", DateNaissance, Date) + (Format(Date, "mmdd") <
Format(DateNaissance, "mmdd"))
...


Merci ! Quelle rapidité !
Mais le résultat donne 107 ans lorsque je prends ma date de naissance
(07/07/1945 C'est déjà beaucoup à mon goût... ;°))

Peut-être ai-je fait une erreur. J'ai pourtant copié-collé la ligne de
macro et remis AgePat au lieu d'Age comme variable.

Précisions : je suis sous WinXp Pro et Word 2002 SP3

Merci pour toute autre contribution.

Cordialement.
Jacques ELKINE

"Jacques ELKINE" a écrit dans le message de
news:
Bonjour,

Je voudrais pouvoir transformer sur word, par une simple macro, une date
de naissance saisie dans le texte par l'âge correspondant.

Je coince encore. Lorsque je contrôle, l'âge affiché ne change pas au
jour près, lorsque je saisis successivement des dates de naissance
proches de la date du jour (Date).

Ci-dessous ma macro, dans son état actuel ... :

Sub AGE()
' Age Macro
' Macro enregistrée le 30/04/2006
' Sélectionne une date qu'on vient de saisir dans le texte
' (10 caractères) place le contenu dans Datenaiss
Selection.MoveLeft Unit:=wdCharacter, Count:, Extend:=wdExtend
Dim DateNaiss As Date
Dim AgePat As Variant
DateNaiss = Selection
AgePat = DateDiff("yy", DateNaiss, Now)
MsgBox (AgePat)

' Suit ci-dessous la suite du projet qui inscrira l'âge
' Efface la date de naissance dans le texte et la remplace
' par l'âge calculé
' Delete.Selection
' ReplaceSelection = True
' Selection.TypeText (AgePat)
End Sub

Merci d'avance pour toute contribution.
Bien cordialement.






Avatar
Jacques ELKINE
MILLE EXCUSES !!! (par rapport au message précédedent où je croyais que
ça ne marchait pas....)

Ça marche super !!! C'est moi qui n'avais pas mis à jour la variable
Datenaiss devenue Datenaissance dans votre proposition.

Mille fois merci !

Je me permettrai d'en demander d'autres, si je ne gène pas...

Suggestion : une réponse comme celel que j'ai reçue mériterait d'être
cataloguée pour les autres utilisateurs. Je finis ma macro et je la
dépose sur les news.

Bien cordialement.
Jacquezs ELKINE
Avatar
Tisane
Bonjour Jacques,

Ça marche super !!! C'est moi qui n'avais pas mis à jour la variable
Datenaiss devenue Datenaissance dans votre proposition.
[...]

Suggestion : une réponse comme celel que j'ai reçue mériterait d'être
cataloguée pour les autres utilisateurs. Je finis ma macro et je la dépose
sur les news.


Ne t'inquiète pas, la réponse que tu as reçue est issue, telle quelle (d'où
le "DateNaissance" au lieu de ton champ), du forum Access.
Elle y est cataloguée depuis longtemps car la question que tu as posée l'est
plus souvent dans le contexte d'une base de données ou d'une feuille de
calcul que d'un traitement de texte.
Cela étant, ce fil de discussion a le mérite de montrer qu'on peut utiliser
Word à autre chose qu'à du pur traitement de texte, et ta macro y sera donc
la bienvenue.

--
Tisane

Avatar
Jacques ELKINE
Bonjour,
Tu ne calcule l'âge que sur l'année
Essaie avec
Age = DateDiff("yyyy", DateNaissance, Date) + (Format(Date, "mmdd") <
Format(DateNaissance, "mmdd"))
Gilbert


Re-bonjour,
Voici le résultat que je vous livre avec le plus grand plaisir :

Sub AGE()
'
' Age Macro Calcule l'age à partir d'une date de naissance saisie dans
le texte
' Commande clavier à affecter
' Macro enregistrée le 30/04/2006 par Jacques ELKINE
'
' Sélection arrière de 10 caractères (date saisie) mis dans DateNaiss
Selection.MoveLeft Unit:=wdCharacter, Count:, Extend:=wdExtend
Dim DateNaiss As Date
Dim AgePat As Variant
DateNaiss = Selection
AgePat = DateDiff("yyyy", DateNaiss, Date) + (Format(Date, "mmdd")
< Format(DateNaiss, "mmdd")) & " ans"
ReplaceSelection = True
Selection.TypeText (AgePat)
End Sub

Grâce à cette macro, je tape dans un courrier la date de naissance d'un
patient, puis je lance la macro et son âge remplace la date saisie.
Elémentaire, Watson, diront certains... Mais bougrement utile, pourront
répondre d'autres ;°)))

Encore merci et bien cordialement.
Jacques ELKINE

"Jacques ELKINE" a écrit dans le message de
news:
Bonjour,

Je voudrais pouvoir transformer sur word, par une simple macro, une date
de naissance saisie dans le texte par l'âge correspondant.

Je coince encore. Lorsque je contrôle, l'âge affiché ne change pas au
jour près, lorsque je saisis successivement des dates de naissance
proches de la date du jour (Date).

Ci-dessous ma macro, dans son état actuel ... :

Sub AGE()
' Age Macro
' Macro enregistrée le 30/04/2006
' Sélectionne une date qu'on vient de saisir dans le texte
' (10 caractères) place le contenu dans Datenaiss
Selection.MoveLeft Unit:=wdCharacter, Count:, Extend:=wdExtend
Dim DateNaiss As Date
Dim AgePat As Variant
DateNaiss = Selection
AgePat = DateDiff("yy", DateNaiss, Now)
MsgBox (AgePat)

' Suit ci-dessous la suite du projet qui inscrira l'âge
' Efface la date de naissance dans le texte et la remplace
' par l'âge calculé
' Delete.Selection
' ReplaceSelection = True
' Selection.TypeText (AgePat)
End Sub

Merci d'avance pour toute contribution.
Bien cordialement.






Avatar
Jacques ELKINE
Bonjour Jacques,
Ne t'inquiète pas, la réponse que tu as reçue est issue, telle quelle
(d'où le "DateNaissance" au lieu de ton champ), du forum Access.
Elle y est cataloguée depuis longtemps car la question que tu as posée
l'est plus souvent dans le contexte d'une base de données ou d'une
feuille de calcul que d'un traitement de texte.
Cela étant, ce fil de discussion a le mérite de montrer qu'on peut
utiliser Word à autre chose qu'à du pur traitement de texte, et ta macro
y sera donc la bienvenue.

Merci encore, Tisane,

Je suis en fait actuellement concentré sur Word pour me formater les
courriers que mon logiciel professionnel ne sait pas faire aussi bien
que moi... (paf ! une cheville !). J'ai programmé il y a bien longtemps
en base de données, sur dBase, puis (une merveille) QuickSilver, mais ce
dernier a été "killé" par Borland et je me suis retrouvé à poil, sans
aucune mise à jour possible... C'était encore sous DOS, tout ça. Si bien
qu'à l'arrivé d'Access, j'ai ressenti une difficulté à m'adapter sans
doute plus liée à ma nostalgie qu'à la difficulté réelle du produit.

Aujourd'hui, j'ai des besoins bureautiques qui sont solvables sur Word
et Excell.

A+
Amitiés.
Jacques ELKINE

Avatar
Tisane
Si bien qu'à l'arrivé d'Access, j'ai ressenti une difficulté à m'adapter
sans doute plus liée à ma nostalgie qu'à la difficulté réelle du produit.
Aujourd'hui, j'ai des besoins bureautiques qui sont solvables sur Word et
Excell.


Tes besoins bureautiques manifestement passent quand même par la
programmation en VBA.
Je voulais donc simplement signaler que tu trouveras, dans les forums Excel
et Access, des fonctions de calculs en VB directement utilisables dans un
module Word.

Bonne continuation et merci pour ta macro.

--
Tisane

Avatar
Jacques ELKINE
Petite remarque pour finir:
J'ai longuement cherché sur les forums et dans les bouquins : VBA est
sensiblement différent sur Word et Excel. Ainsi la fonction DateDiff()
est-elle inverse sur Excel et sur Word :
- Word = DateDiff("yyyy", DateDébut, DateFin)
- Excel = DateDiff(DateDébut, DateFin, "yyyy")
J'ai passé un sacré moment à la remettre en ordre...
Amitiés.
Jacques ELKINE


Si bien qu'à l'arrivé d'Access, j'ai ressenti une difficulté à
m'adapter sans doute plus liée à ma nostalgie qu'à la difficulté
réelle du produit.
Aujourd'hui, j'ai des besoins bureautiques qui sont solvables sur Word
et Excell.


Tes besoins bureautiques manifestement passent quand même par la
programmation en VBA.
Je voulais donc simplement signaler que tu trouveras, dans les forums
Excel et Access, des fonctions de calculs en VB directement utilisables
dans un module Word.

Bonne continuation et merci pour ta macro.




Avatar
Tisane
J'ai longuement cherché sur les forums et dans les bouquins : VBA est
sensiblement différent sur Word et Excel. Ainsi la fonction DateDiff()
est-elle inverse sur Excel et sur Word :
- Word = DateDiff("yyyy", DateDébut, DateFin)
- Excel = DateDiff(DateDébut, DateFin, "yyyy")


C'est vrai, je n'ai pas vérifié sur Excel dont les fonctions sont encore en
français (indépendamment du VBA) alors qu'elles sont en anglais depuis
quelques versions dans Word.
Mais avec Access, c'est très proche voire identique dans le cas présent.

--
Tisane

1 2