Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access
Access Forum d'entraide sur Microsoft Access. Avant de poster -> La F.A.Q Access
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/07/2008, 22h52   #1
Membre à l'essai
 
Inscription : mars 2008
Messages : 56
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : mars 2008
Messages : 56
Points : 20
Points : 20
Par défaut Calcul d'écart de date (année, mois, jour,etc)

Bonjour à tous,

Avez vous remarqué que toutes les fonctions comme DateDiff(...), Année(...), mois(...), renvoie des calculs (nombre d'année par example entre 2 dates) arrondies !
... et non tronqué

C'est problématique pour les personnes qui comme moi veulent calculer des ages ou autre différence de date pour aplliquer un bareme derrière : il faut que le calcul de la date renvoie un age révolu et non arrondie.

N'ayant rien trouvé de mieux je vous livre ma solution et peut être que vous en avez une meilleure (existe t'il un paramétrage de DateDiff qui tronque plutôt qu'arrondir ?)

Pour le calcul d'année révolues:
Ent(Date()-[Date de naissance])/365,25)

Pour le calclul de moisvrévolues et restant après le calcul des années :
Ent(((([Date()-[Date de naissance])/365,25)-Ent((Date()-[Date de naissance])/365,25))*12)

etc...

A vos commentaires !
le.dams est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2008, 23h14   #2
Membre à l'essai
 
Inscription : mars 2008
Messages : 56
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : mars 2008
Messages : 56
Points : 20
Points : 20
euhhhh... milles excuses !

Ma formule sur les mois donne une approximation à 2 ou 3 jours près ! (de par le fait que les mois ne sont pas tous égaux !)
Bon je cherche autre chose
le.dams est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2008, 23h53   #3
Membre Expert
 
Inscription : mars 2006
Messages : 1 331
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 1 331
Points : 1 460
Points : 1 460
Bonsoir,

Essaye :
Code :
=AgeX([Date de naissance];Date())
Dans un module :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Function AgeX(dn As Date, dx As Date) As String
'Objectif: calcul de l'âge en années et mois pleins
'Arguments: dn = date de naissance, dx = date quelconque
     Dim y1 As Integer, y0 As Integer, m1 As Integer, m0 As Integer
     Dim d1 As Integer, d0 As Integer
     d1 = Day(dx)
     m1 = Month(dx)
     y1 = Year(dx)
     d0 = Day(dn)
     m0 = Month(dn)
     y0 = Year(dn)
     If d0 > d1 Then m0 = m0 + 1
     If m0 > m1 Then
         y0 = y0 + 1
         m1 = m1 + 12
     End If
     AgeX = (y1 - y0) & " ans, " & (m1 - m0) & " mois"
End Function
Cordialement.
__________________
Questions techniques par MP
Le peu que je sais, c'est à mon ignorance que je le dois.
...............................................................................Sacha Guitry
francishop est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2008, 00h14   #4
Membre à l'essai
 
Inscription : mars 2008
Messages : 56
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : mars 2008
Messages : 56
Points : 20
Points : 20

Excellent, cela dit je voudrais s'il te plait l'adapter un peu à mon cas (je ne maitrise pas le vba et serait donc obligé de refaire des calculs sur le champs issue de ton code un peu... "sales" )

Mes barèmes ages sont gérés dans un champs qui affiche le même type d'info que toi mais ne stocke en fait que 'aamm' sous format numérique.
Je serai très bien enlever les termes "ans" et "mois" dans ton code, mais comment faire pour qu'il ai toujours 2 chiffres au niveau des mois (je fais des comparaisons >,<,... entre l'age et le bareme donc pas grave pour les années mais pour les mois il me faut absolument le "0" devant le mois à un seul chiffre)

A l'origine j'avais contourné le pb dans mes fonctions et faisant un test du genre :
si nbcar mois = 1 alors rajoute "0" entre les ans et les mois

Merci pour ton aide
le.dams est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2008, 06h55   #5
Membre Expert
 
Inscription : août 2006
Messages : 1 435
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 1 435
Points : 1 756
Points : 1 756
il suffit de modifier le code de Francishop

Code :
1
2
 
AgeX = (y1 - y0) & " ans, " & (m1 - m0) & " mois"
devient

Code :
1
2
 
AgeX = Right$("000" & (y1 - y0), 3) & Right$("00" & (m1 - m0), 2)
J'ai mis 3 pour l'année car il existe des centenaires
helas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2008, 10h50   #6
Membre à l'essai
 
Inscription : mars 2008
Messages : 56
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : mars 2008
Messages : 56
Points : 20
Points : 20
Merci beauoup.
Cela fonctionne Nickel, cela dit, c'est pour gérer des vaches, alors des vaches centenaires, elles ne vont pas très tendres !
Du coup je suis resté sur ça car les 0 devant les années ne m'intéresse pas.
Code :
AgeX = (y1 - y0) & Right$("00" & (m1 - m0), 2)

et encore
le.dams est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 17h08   #7
Invité régulier
 
Inscription : octobre 2008
Messages : 28
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 28
Points : 6
Points : 6
Par défaut En faite une question Calcul Age en années et mois et jours

Comment faire pour afficher ce calcul de l'âge en année et mois et jours style
53 ans et 2 mois et 10 jours ?

Merci d'avance pour votre aide
dede tabby est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2011, 17h47   #8
Rédacteur/Modérateur
 
Avatar de User
 
Homme Denis
Développeur informatique
Inscription : août 2004
Messages : 3 207
Détails du profil
Informations personnelles :
Nom : Homme Denis
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 3 207
Points : 5 256
Points : 5 256
Salut,

Je me permet de répondre à la place de Francishop , qui maîtrise mieux son code que moi

Tu peux a nouveau partir de la fonction de Francishop,

et juste avant l'affectation mettre le code :

Code :
1
2
3
4
5
6
...
 
dn = DateAdd("yyyy", (y1 - y0), dn)
dn = DateAdd("m", (m1 - m0), dn)
 
AgeX = (y1 - y0) & " ans, " & (m1 - m0) & " mois, " & DateDiff("d", dn, dx) & " jours"
A+
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp.

Bon développement !


Mes tutoriels et contributions sur ma page perso:
Ma page personnelle
User est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h39.


 
 
 
 
Partenaires

Hébergement Web