Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes et SQL. Discussion :

DiffDate pour calculer l'âge en mois jours


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    janvier 2008
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2008
    Messages : 295
    Points : 106
    Points
    106
    Par défaut DiffDate pour calculer l'âge en mois jours
    Bonsoir,

    Je recherche une solution pour calculer l'âge avec DIFFDATE() sous le format

    Mois jours, ou mois seul mais avec précision.

    Pourriez-vous m'aider ?

    Par exemple aujourd'hui :09/12/2011 naissance le 01/10/2009
    = 26 mois et 8 jours

    Dans Excel c'est très simple

    Merci d'avance

  2. #2
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    mai 2008
    Messages
    2 676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mai 2008
    Messages : 2 676
    Points : 4 302
    Points
    4 302
    Par défaut
    Je me souviens d'avoir vu ça il y a qq années dans la FAQ je crois...
    Pour un format jour/mois/an (date1<=date2) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    'années : 
    year(date2)-year(date1)+iif(format(date2,'mmdd')<format(date1,'mmdd'),-1,0)
    'mois :
    iif(format(date2,'mmdd')<format(date1,'mmdd'),month(date2)-month(date1)+12, month(date2)-month(date1))+iif(day(date2)<day(date1),-1,0)
    'jours :  
    iif(day(date2)<=day(date1), day(date2)-day(date1)+day(date2-day(date2)-1), day(date2)-day(date1))
    J'ai pas plus simple
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    janvier 2008
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2008
    Messages : 295
    Points : 106
    Points
    106
    Par défaut
    Merci quand même et bonne soirée.

    @+

  4. #4
    Membre expérimenté Avatar de RobiPMS
    Homme Profil pro
    Conseiller psycho-pédagogique
    Inscrit en
    octobre 2007
    Messages
    827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Conseiller psycho-pédagogique
    Secteur : Enseignement

    Informations forums :
    Inscription : octobre 2007
    Messages : 827
    Points : 1 495
    Points
    1 495
    Par défaut
    Bonjour.

    Voici la formule que j'utilise pour afficher l'âge en années mois, dans un champ calculé à partir de deux champs "Date/nais" et "Date examen" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =Int(-([Date/nais]-[Date examen])/365,25) & " ans " & Int(12*((-([Date/nais]-[Date examen])/365,25)-Int(-([Date/nais]-[Date examen])/365,25))) & " mois"
    Je l'utilise sans souci depuis plusieurs années dans toutes les versions d'access depuis 2000. La division par 365,25 permet de tenir compte des années bisextiles.
    A adapter pour avoir en plus les jours.
    Cordialement.

    RL
    N'oubliez pas de tagguer la discussion comme résolue si vous avez été aidé!
    Plus haut monte le singe, plus il montre son cul (Montaigne)
    Je ne réponds pas aux messages personnels concernant des questions discutées dans le forum.

  5. #5
    Membre expérimenté Avatar de RobiPMS
    Homme Profil pro
    Conseiller psycho-pédagogique
    Inscrit en
    octobre 2007
    Messages
    827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Conseiller psycho-pédagogique
    Secteur : Enseignement

    Informations forums :
    Inscription : octobre 2007
    Messages : 827
    Points : 1 495
    Points
    1 495
    Par défaut
    Rebonjour.

    Si tu as un problème pour l'adapter à tes besoins (mois et jours plutôt que années mois) je veux bien fouiller dans mes archives et réécrire le code.
    Dans ce cas, demande...

    Cordialement
    N'oubliez pas de tagguer la discussion comme résolue si vous avez été aidé!
    Plus haut monte le singe, plus il montre son cul (Montaigne)
    Je ne réponds pas aux messages personnels concernant des questions discutées dans le forum.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    janvier 2008
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2008
    Messages : 295
    Points : 106
    Points
    106
    Par défaut
    Merci pour les réponses je vais faire des essais.

    @+

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    janvier 2008
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2008
    Messages : 295
    Points : 106
    Points
    106
    Par défaut
    RobiPMS,

    Si tu connais la formule pour obtenir le résultat uniquement en mois et jour je suis preneur.
    sous le format 00 mois et 00 jours

    Merci d'avance.

  8. #8
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : juin 2006
    Messages : 7 194
    Points : 16 071
    Points
    16 071
    Par défaut
    Bonjour,

    Déjà, pour calculer juste (à oublier la division par 365.25).

    Domi2
    Vous avez des montres, nous avons le temps ! (citation attribuée à L.-S. Senghor)

    Ici, on ne perd pas de temps ! On en passe...


    Access : créer des codes-barres 128 en VBA
    Access : les commandes intégrées des menus

    Ce message (ou un autre) vous a aidé ? Votez pour lui avec

  9. #9
    Membre expérimenté Avatar de RobiPMS
    Homme Profil pro
    Conseiller psycho-pédagogique
    Inscrit en
    octobre 2007
    Messages
    827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Conseiller psycho-pédagogique
    Secteur : Enseignement

    Informations forums :
    Inscription : octobre 2007
    Messages : 827
    Points : 1 495
    Points
    1 495
    Par défaut
    Bonjour Domi2 et bonjour à tous.

    Merci pour la remarque. J’ai lu attentivement la discussion que tu cites, et j’ai essayé les codes proposés. OK, ils retournent un nombre correct d’années entièrement écoulées depuis la date de naissance. Mais on n’a ni les mois, ni les jours, ce qui simplifie beaucoup le problème.
    Si on veut avoir les mois en plus, ça se complique : je suis en train d’essayer d’adapter le code pour arriver à une formule qui affiche un bon résultat dans tous les cas.
    Si quelqu’un a la solution, ne me laissez pas chercher !
    Ça se complique encore pour les jours puisqu’il faut alors tenir compte des mois de 28, 29, 30 ou 31 jours.
    Ma formule initiale n’est certes pas « juste » : c’est effectivement une approximation qui affiche un résultat incorrect le jour de l’anniversaire de la personne une fois tous les 4 ans (à cause de la fonction Int qui supprime la partie fractionnelle). Il faudrait peut-être essayer une formule avec Round ?
    Le résultat affiché est donc correct 1460 fois sur 1461. Si on « oublie » le partage par 365,25 on aura bien entendu avec une telle formule une erreur de plus en plus importante en fonction de l’âge réel de l’individu. Est-ce que je me trompe ?
    Le seul résultat qui sera incontestablement toujours « juste », et à utiliser si on veut en faire un usage scientifique, c’est l’âge en jours.
    Moi, je ne parlerais pas d’un résultat juste pour un âge exprimé en années, ou en années + mois, mais seulement d’un affichage correct : un âge exprimé partiellement ne peut pas être juste, par définition.
    Je reposte si je trouve mieux.

    Cordialement
    N'oubliez pas de tagguer la discussion comme résolue si vous avez été aidé!
    Plus haut monte le singe, plus il montre son cul (Montaigne)
    Je ne réponds pas aux messages personnels concernant des questions discutées dans le forum.

  10. #10
    Membre expérimenté Avatar de RobiPMS
    Homme Profil pro
    Conseiller psycho-pédagogique
    Inscrit en
    octobre 2007
    Messages
    827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Conseiller psycho-pédagogique
    Secteur : Enseignement

    Informations forums :
    Inscription : octobre 2007
    Messages : 827
    Points : 1 495
    Points
    1 495
    Par défaut
    Bonjour.
    Une proposition de plus, qui retourne un résultat en années mois jours, tient compte des années bissextiles et qui me semble tenir la route dans tous les cas de figure (sauf erreur de ma part ).
    Si l'un ou l'autre spécialiste du forum veut bien tester, cela me rassurerait!
    Voici le code.
    Dans un module :
    D'abord la fonction (classique) pour tester si l'année est bissextile
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public Function EstBissextile(ByVal lngAnnée As Long) As Boolean
      EstBissextile = ((lngAnnée Mod 4 = 0) And (lngAnnée Mod 100 <> 0)) _
        Or (lngAnnée Mod 400 = 0)
    End Function
    Puis la fonction qui affiche l'âge en années mois jours
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Function Ageamj(dn As Date, dx As Date) As String    ' dn = date de naissance ; dx = date à laquelle on veut trouver l'âge
    Dim Y1 As Long, Y2 As Long, M1 As Long, M2 As Long, D1 As Long, D2 As Long, D3 As Long
    Y1 = Format(dn, "yyyy")
    Y2 = Format(dx, "yyyy")
    M1 = Format(dn, "m")
    M2 = Format(dx, "m")
    D1 = Format(dn, "d")
    D2 = Format(dx, "d")
    ' Calcul des jours écoulés entre le jour de la date dx (D2) et celui du mois précédent identique au jour de naissance (D1)
    If D2 >= D1 Then
    D3 = D2 - D1
    ElseIf D2 < D1 And ((M2 = 1) Or (M2 = 2) Or (M2 = 4) Or (M2 = 6) Or (M2 = 8) Or (M2 = 9) Or (M2 = 11)) Then D3 = 31 - D1 + D2
    ElseIf D2 < D1 And ((M2 = 5) Or (M2 = 7) Or (M2 = 10) Or (M2 = 12)) Then D3 = 30 - D1 + D2
    ElseIf D2 < D1 And (M2 = 3) And (EstBissextile(Y2) = True) Then D3 = 29 - D1 + D2
    ElseIf D2 < D1 And (M2 = 3) And (EstBissextile(Y2) = False) Then D3 = 28 - D1 + D2
    End If
    ' Calcul et affichage des années et mois, et des jours qui viennent d'être calculés
    If M2 = M1 And D2 = D1 Then
    Ageamj = (Y2 - Y1) & " ans"
    ElseIf M2 < M1 And D2 > D1 Or (M2 < M1 And D2 = D1) Then
    Ageamj = (Y2 - Y1 - 1) & " ans " & (12 + M2 - M1) & " mois " & D3 & " jours"
    ElseIf M2 < M1 And D2 < D1 Or (M2 = M1 And D2 < D1) Then
    Ageamj = (Y2 - Y1 - 1) & " ans " & (11 + M2 - M1) & " mois " & D3 & " jours"
    ElseIf (M2 > M1 And D2 > D1) Or (M2 > M1 And D2 = D1) Or (M2 = M1 And D2 > D1) Then
    Ageamj = (Y2 - Y1) & " ans " & (M2 - M1) & " mois " & D3 & " jours"
    ElseIf (M2 > M1 And D2 < D1) Then
    Ageamj = (Y2 - Y1) & " ans " & (M2 - M1 - 1) & " mois " & D3 & " jours"
    End If
    End Function
    J'imagine qu'il doit y avoir moyen de faire plus simple, mais je ne suis pas informaticien... Si Domi2 veut bien dire ce qu'il en pense...
    Cordialement.
    R.L.
    N'oubliez pas de tagguer la discussion comme résolue si vous avez été aidé!
    Plus haut monte le singe, plus il montre son cul (Montaigne)
    Je ne réponds pas aux messages personnels concernant des questions discutées dans le forum.

  11. #11
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    mai 2008
    Messages
    2 676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mai 2008
    Messages : 2 676
    Points : 4 302
    Points
    4 302
    Par défaut
    Je ne sais pas si c'est juste mais c'est encore bien plus compliqué que ce que je propose plus haut
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  12. #12
    Membre expérimenté Avatar de RobiPMS
    Homme Profil pro
    Conseiller psycho-pédagogique
    Inscrit en
    octobre 2007
    Messages
    827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Conseiller psycho-pédagogique
    Secteur : Enseignement

    Informations forums :
    Inscription : octobre 2007
    Messages : 827
    Points : 1 495
    Points
    1 495
    Par défaut
    Bonjour.

    C'est vrai, la fonction que propose Nico84 est beaucoup plus simple, mais elle retourne un résultat faux chaque fois que le nombre de jours de la date 2 est inférieur à celui de la date1 et que le mois qui précède la date2 comporte 30 jours ou 29 ou 28 (le nombre de jours affiché est alors inférieur à la réalité).

    Cordialement.
    N'oubliez pas de tagguer la discussion comme résolue si vous avez été aidé!
    Plus haut monte le singe, plus il montre son cul (Montaigne)
    Je ne réponds pas aux messages personnels concernant des questions discutées dans le forum.

Discussions similaires

  1. Calcul d'écart de date (année, mois, jour,etc)
    Par le.dams dans le forum Access
    Réponses: 7
    Dernier message: 08/01/2011, 18h47
  2. Calculer l'ancienneté (année/Mois/Jours)
    Par coyote06 dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 29/10/2009, 19h31
  3. [V6] Calcul d'une durée en année mois jours
    Par herve rennes dans le forum Deski
    Réponses: 7
    Dernier message: 12/02/2009, 00h37
  4. Réponses: 6
    Dernier message: 12/01/2008, 19h21
  5. pb mise a jour menu deroulant pour calcul
    Par popofpopof dans le forum IHM
    Réponses: 6
    Dernier message: 16/08/2007, 22h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo