XL 2016 calcul age en an et moi entre deux dates fixes

papacorno

XLDnaute Nouveau
Bonjour à toutes et tous et bonjour le fil.
J'ai parcouru le forum mais je n'arrive pas à poser ma formule désolé.
Je souhaiterais calculer l'âge en an et mois entre deux dates fixes pour savoir si une personne est majeur avant un stage.
J'ai essayer de copier des formules mais je n'y arrive pas .
Exemple j'ai un stage qui débute le 09/07/2023 qui est une date fixe pour le début su stage stage , j'aimerais me baser sur la date de naissance du stagiaire qui sera renseignée en B1 par exemple pour savoir s'il est majeur pour le premier jour et créée une MFC pour mettre la cellule sous un format spécifique si mineur.
Merci d'avance pour votre aide et bonne journée.
Christian
 

Webperegrino

XLDnaute Impliqué
Supporter XLD
Bonjour Le Forum,
Bonjour Papacorno, Chris,
Je me permets d'intervenir ici pour un problème de formule de Chris devant gérer les personnes nées dans le siècle précédent (18..) et décédées dans le siècle suivant (19..).
Avez-vous une solution pour donner les bons résultats au niveau des cellules colorées "Âge" dans le fichier ci-annexé, de mon côté ça 'coince' ?
Merci,
Webperegrino
 

Pièces jointes

  • AGE.xlsm
    12.6 KB · Affichages: 6

patricktoulon

XLDnaute Barbatruc
Bonsoir
sinon tu a

faut il encore se donner la peine de chercher ;)
 

Webperegrino

XLDnaute Impliqué
Supporter XLD
Le Forum,
Bonsoir JHA,
Houlà, JHA ! avec votre belle solution je passe dans la cour des grands ! C'est un gros cadeau de Noël qui va servir dans mes deux fichiers d'arbre généalogique de familles.
Merci beaucoup, je vais bien étudier tout cela, tout comme les pistes proposées par PatrickToulon et Modeste Geedee.
Merci à vous trois.
Belles fêtes de fin d'année à vous tous,
Webperegrino
 

patricktoulon

XLDnaute Barbatruc
avec ma fonction perso
1703180507665.png



exemple formule
pour la totale :
=DATEDIFF_AMJ4(C2;E2)

juste les ans
=DATEDIFF_AMJ4(C2;E2;1)

étendre les formules vers le bas

dans un module standard
VB:
Function DATEDIFF_AMJ4$(ByVal dat1 As Date, Optional ByVal dat2 As Date = 0, Optional JustYear As Boolean = False)
  '**************************************
'fonction DateDiffAMJ V°4
'auteur:patricktoulon sur Exceldownloads
'date de mise en jour V°4:04/07/2021
' mise a jour supplementaire
' ajout de l'argument boolean "JustYear" pour ne récuprérer que les années
'*************************************
  Dim A$, M$, J$, Dtemp$, et$, yeardécalée&, y
    If dat2 = 0 Then dat2 = Date
    If dat1 > dat2 Then Dtemp = dat2: dat2 = dat1: dat1 = Dtemp
    If Year(dat1) < 1904 Then If Year(dat1) Mod 4 <> 0 Or Year(dat1) Mod 400 <> 0 Then y = 2020 Else y = 1905
    If Year(dat1) < y Then
        'on decale la date la plus ancienne (Dat1)à l'année 1904
        yeardécalée = Abs((Year(dat1) - y))
        dat1 = DateSerial(Year(dat1) + yeardécalée, Month(dat1), Day(dat1))
        dat2 = DateSerial(Year(dat2) + yeardécalée, Month(dat2), Day(dat2))
    End If
    A = Evaluate("=DATEDIF(" & CLng(dat1) & "," & CLng(dat2) & ",""y"")")
    M = Evaluate("=DATEDIF(" & CLng(dat1) & "," & CLng(dat2) & ",""ym"")")
    J = Evaluate("=DATEDIF(" & CLng(dat1) & "," & CLng(dat2) & ",""md"")")
    A = IIf(A = 0, "", IIf(A = 1, A & " an", A & " ans"))
    M = IIf(M = 0, "", IIf(M = 1, M & " mois", M & " mois"))
    J = IIf(J = 0, "", IIf(J = 1, "1  jour", J & " jours"))
    et = IIf(Val(A) > 0 Or Val(M) > 0, IIf(Val(J) > 0, " et ", " "), "")
    DATEDIFF_AMJ4 = Application.Trim(A & IIf(Not JustYear, " " & M & " " & et & J, ""))
End Function
comme on peut le voir cidessous sur la capture
en derniere ligne je n'ai pas de limite même sur plusieurs siècles
1703180945347.png
 

Discussions similaires