OVH Cloud OVH Cloud

Fête

7 réponses
Avatar
Alexandre
Bonjour,
J'aimerais savoir, en fonction de la date actuelle, et de=20
la date de naissance de la personne, combien de jours il=20
reste avant sa f=EAte.

J'ai regard=E9 =E0 : http://access.vba.free.fr/calculs.htm

mais ce qu'il y avait pour la f=EAte ne donne pas ce que je=20
veux, mais plut=F4t la date du prochain anniversaire.

J'ai pens=E9 =E0 un code vba, mais sans succ=E8s,

Merci,
Alexandre

7 réponses

Avatar
Eric
Bonjour Alexandre

A partir de la procédure donnant la date d'anniversaire sur le site de
Raymond (merci encore), ca donnerait:

Public Function NbJoursAvantAnniversaire(dteDate As Date) As Integer
Dim DateCetteAnnee As Date
DateCetteAnnee = DateSerial(Year(Date), Month(dteDate), Day(dteDate))
If DateCetteAnnee < Date Then
DateCetteAnnee = DateAdd("yyyy", 1, DateCetteAnnee)
End If
NbJoursAvantAnniversaire = DateDiff("d", Date, DateCetteAnnee)
End Function

A+
Eric




"Alexandre" écrivait
news:2ccd101c4691c$202b0eb0$:

Bonjour,
J'aimerais savoir, en fonction de la date actuelle, et de
la date de naissance de la personne, combien de jours il
reste avant sa fête.

J'ai regardé à : http://access.vba.free.fr/calculs.htm

mais ce qu'il y avait pour la fête ne donne pas ce que je
veux, mais plutôt la date du prochain anniversaire.

J'ai pensé à un code vba, mais sans succès,

Merci,
Alexandre



Avatar
Eric
.../...

A partir de la procédure donnant la date d'anniversaire sur le site de
Raymond


lire Fonction et non Procédure.

(Chaque terme a son importance)

Eric

Avatar
Alexandre
Salut!

Merci beaucoup, Il y a cependant quelquechose qui ne
fonctionne pas.

Voici mes champs : Date de naissance: [DateNaissance]
Mon controle de date d'aujourdhui: Source:Date() ,
Nom:CeJour

J'ai mis ce code:
Function NbJoursAvantAnniversaire(DateNaissance As Date)
As Integer
Dim DateCetteAnnee As Date
DateCetteAnnee = DateSerial(Year(CeJour), Month
(DateNaissance), Day(DateNaissance))
If DateCetteAnnee < CeJour Then
DateCetteAnnee = DateAdd("yyyy", 1, DateCetteAnnee)
End If
NbJoursAvantAnniversaire = DateDiff("d", CeJour,
DateCetteAnnee)
End Function

Et comme controle pour voir l'affichage
=NbJoursAvantAnniversaire([DateCetteAnnee];Date())

Merci,
Alexandre
Avatar
Eric
Bonjour Alexandre,

La fonction que je t'ai fait passer n'a besoin que d'un seul argument :
DateNaissance. Tu l'as modifiée et du coup elle ne marche plus.
La valeur de CeJour n'est pas utile car c'est la date-sytème, valeur
volatile par excellence et on la connait à tout instant. De plus dans ta
fonction, l'argument CeJour n'étant pas passé, la fonction ne le connait
pas.

Reprends tel quelle la fonction de mon post précédent.

Pour l'utiliser dans une requête tu mettras :
BirthdayDans:NbJoursAvantAnniversaire([DateNaissance])

Pour l'utiliser dans un contrôle indépendant de formulaire basé sur la
table contenant les dates de naissance, en source de ce contrôle tu
mettras:
=NbJoursAvantAnniversaire([DateNaissance])

Dans les 2 cas, tu passes à l'argument dteDate de la fonction
NbJoursAvantAnniversaire la valeur de DateNaissance.

Remarque: Ton contrôle CeJour n'est pas utile pour déterminer le nb de
jours. A toi de voir si tu veux faire apparaitre sur ton formulaire la
date courante.

C'est ok ?

A+
Eric

PS: dans la fonction NbJoursAvantAnniversaire(dteDate As Date)

dteDate as Date : ici Date représente le type de l'argument dteDate que
tu passes à la fonction, comme sur la ligne Dim DateCetteAnnee As Date

Dans l'instruction :If DateCetteAnnee < Date Then ...
Date est la fonction VB qui retourne la Date-système


"Alexandre" écrivait
news:2c19601c46935$685e4c10$:

Salut!

Merci beaucoup, Il y a cependant quelquechose qui ne
fonctionne pas.

Voici mes champs : Date de naissance: [DateNaissance]
Mon controle de date d'aujourdhui: Source:Date() ,
Nom:CeJour

J'ai mis ce code:
Function NbJoursAvantAnniversaire(DateNaissance As Date)
As Integer
Dim DateCetteAnnee As Date
DateCetteAnnee = DateSerial(Year(CeJour), Month
(DateNaissance), Day(DateNaissance))
If DateCetteAnnee < CeJour Then
DateCetteAnnee = DateAdd("yyyy", 1, DateCetteAnnee)
End If
NbJoursAvantAnniversaire = DateDiff("d", CeJour,
DateCetteAnnee)
End Function

Et comme controle pour voir l'affichage
=NbJoursAvantAnniversaire([DateCetteAnnee];Date())

Merci,
Alexandre



Avatar
Raymond [mvp]
Bonjour eric.
Merci pour la fonction.
voir:
http://access.vba.free.fr/calculs.htm#nombre_de_jours_avant_prochain_anniversaire

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Eric" a écrit dans le message de
news:
Bonjour Alexandre,

La fonction que je t'ai fait passer n'a besoin que d'un seul argument :
DateNaissance. Tu l'as modifiée et du coup elle ne marche plus.
La valeur de CeJour n'est pas utile car c'est la date-sytème, valeur
volatile par excellence et on la connait à tout instant. De plus dans ta
fonction, l'argument CeJour n'étant pas passé, la fonction ne le connait
pas.

Reprends tel quelle la fonction de mon post précédent.

Pour l'utiliser dans une requête tu mettras :
BirthdayDans:NbJoursAvantAnniversaire([DateNaissance])

Pour l'utiliser dans un contrôle indépendant de formulaire basé sur la
table contenant les dates de naissance, en source de ce contrôle tu
mettras:
=NbJoursAvantAnniversaire([DateNaissance])

Dans les 2 cas, tu passes à l'argument dteDate de la fonction
NbJoursAvantAnniversaire la valeur de DateNaissance.

Remarque: Ton contrôle CeJour n'est pas utile pour déterminer le nb de
jours. A toi de voir si tu veux faire apparaitre sur ton formulaire la
date courante.

C'est ok ?

A+
Eric

PS: dans la fonction NbJoursAvantAnniversaire(dteDate As Date)

dteDate as Date : ici Date représente le type de l'argument dteDate que
tu passes à la fonction, comme sur la ligne Dim DateCetteAnnee As Date

Dans l'instruction :If DateCetteAnnee < Date Then ...
Date est la fonction VB qui retourne la Date-système


"Alexandre" écrivait
news:2c19601c46935$685e4c10$:

Salut!

Merci beaucoup, Il y a cependant quelquechose qui ne
fonctionne pas.

Voici mes champs : Date de naissance: [DateNaissance]
Mon controle de date d'aujourdhui: Source:Date() ,
Nom:CeJour

J'ai mis ce code:
Function NbJoursAvantAnniversaire(DateNaissance As Date)
As Integer
Dim DateCetteAnnee As Date
DateCetteAnnee = DateSerial(Year(CeJour), Month
(DateNaissance), Day(DateNaissance))
If DateCetteAnnee < CeJour Then
DateCetteAnnee = DateAdd("yyyy", 1, DateCetteAnnee)
End If
NbJoursAvantAnniversaire = DateDiff("d", CeJour,
DateCetteAnnee)
End Function

Et comme controle pour voir l'affichage
=NbJoursAvantAnniversaire([DateCetteAnnee];Date())

Merci,
Alexandre






Avatar
Eric
Bonjour Raymond,

J'ai été très surpris que l'auteur ne trouve pas son bonheur sur
http://access.vba.free.fr/calculs.htm ;-)


"Raymond écrivait

Merci pour la fonction.
voir:
http://access.vba.free.fr/calculs.htm#nombre_de_jours_avant_prochain_an
niversaire

Tout le plaisir est pour moi bien que je n'ai pas fait grand-chose. Une

simple adaptation de ton code, et encore c'est un bien grand mot.

Juste une petite remarque : pour harmoniser avec la fonction
Anniversaire(dteDate As Date) As Date, tu devrais mettre dans la fonction
NbJours... DateCetteAnnée au lieu de DateCetteAnnee (j'ai pour habitude de
virer l'accentuation).

A+
Eric

Avatar
Alexandre
C'est bon,

Merci beaucoup

Alexandre