CAlcul entre deux dates Datediff

Bonjour

Je galère à trouver un code (Function personnalisée) qui calculerai la différence entre deux dates.

Date départ = 1 premier paramètre renseigné(Cellule x,y)

Date de calcul = une cellule dans un tableau sur plusieurs lignes (1 ligne par salarié) > je souhaiterai une réponse sous forme "n anneés, x mois, y jours"

Merci de votre aide c 'est un travail personnel car je suis débutant en apprentissage VBA

DATE DU JOUR08/12/2024
SALARIESDATE ENTREEANCIENNETE
Julie30/08/2009entre 30/08/2009 et 08/12/2024
Kelly07/06/2012
Sebastien22/06/2012
Marine03/12/2019
Emile05/03/2011
Virginia15/11/2020
Rudy30/11/2015
Marlene07/08/2009
Lucien05/08/1998
Olivera21/05/2018
Carole14/07/2015
Josette06/08/1999

Bonsoir,

voir si cet essai te convient

18classeur1.xlsx (10.48 Ko)

Slts

bonsoir

peut être

DATEDIF(D7;D2;"y")&"ans"&MOD(DATEDIF(D7;D2;"m");12)&"mois"&MOD(DATEDIF(D7;D2;"d");30,5)&"jours"

cordialement

bonsoir

peut être

DATEDIF(D7;D2;"y")&"ans"&MOD(DATEDIF(D7;D2;"m");12)&"mois"&MOD(DATEDIF(D7;D2;"d");30,5)&"jours"

cordialement

avec D2 la date de ref et D7 la date de la personne

Bonjour,
Une autre solution ( ?), pour pallier éventuellement au bug DateDif & md.
Cdlt.

12fabinox.xlsx (11.86 Ko)

Merci pour votre aide

C'est pas mal mais je cherchais du code VBA !

Bonne journée

Bonjour FabiNox,

Essayez avec cette fonction en VBA

Function Ancienneté(DateDebut As Date, DateFin As Date) As String
    Dim TotalMois As Long
    Dim Annees As Long, Mois As Long, Jours As Long
    Dim JourDebut As Long, JourFin As Long
    ' Calculer le total de mois entre les dates
    TotalMois = DateDiff("m", DateDebut, DateFin)
    ' Calculer les années et les mois restants
    Annees = TotalMois \ 12
    Mois = TotalMois Mod 12
    ' Calculer les jours restants
    JourDebut = Day(DateDebut)
    JourFin = Day(DateFin)
    If JourFin < JourDebut Then
        Mois = Mois - 1
        If Mois < 0 Then
            Mois = 11
            Annees = Annees - 1
        End If
        Jours = Day(DateSerial(Year(DateDebut), Month(DateDebut) + 1, 0)) - JourDebut + JourFin
    Else
        Jours = JourFin - JourDebut
    End If
    ' Construire la chaîne de résultat
    Ancienneté = Annees & " années " & Mois & " mois " & Jours & " jours"
End Function

A+

Bonsoir

Merci pour votre retour.

C'est très intêressant comme approche de disséquer différents calculs en y,m,et days pour ensuite les assembler dans une chaine.

L'idée m'avait effleuré l'esprit mais je ne savais pas par quel bout le prendre !

Je vais donc étudier minutieusement votre solution !

Encore merci

oui a++

cordialement

Salut FabiNox,
Salut les as,

une version très similaire à celle de JExcel que j'avais écrite il y a quelques mois

    If IsDate([A1]) And IsDate([E1]) Then
        Set rCel1 = IIf(CDate([A1]) <= CDate([E1]), [A1], [E1])
        Set rCel2 = IIf(CDate([A1]) <= CDate([E1]), [E1], [A1])
        lgM = DateDiff("m", CDate(rCel1), CDate(rCel2))
        lgY = Int(lgM / 12)
        lgM = lgM - (lgY * 12)
        lgD = DateDiff("d", DateSerial(Year(CDate(rCel2)), Month(CDate(rCel2)), Day(CDate(rCel1))), CDate(rCel2))
        If lgD < 0 Then _
            lgM = IIf(lgM = 0, 11, lgM - 1): _
            iIdx = DateDiff("d", DateAdd("m", -1, CDate(rCel2)), CDate(rCel2)): _
            If lgM = 11 Then lgY = lgY - 1
        [B3] = lgY
        [C3] = lgM
        [D3] = IIf(lgD < 0, iIdx + lgD, lgD)
    End If
End If
9fabinox.xlsm (18.02 Ko)

A+

Bonjour à tous et merci pour vos différentes réponses.
C'est par là que je me rends compte qu'il y a encore du boulot pour connaitre et comprendre le VBA
Je souhaite partager le code VBA ci dessous qui m'a été fourni par le logiciel IA Chatgpt: avec en + une explication sur la variable tempdate (que je lui ai demandé dans un second temps) que je ne connaissais pas.
ce code me parait + accessible au(x) débutant(s) que je suis...
si cela peut profiter à quelqu'un... tant mieux

Function datediffdetail(StartDate As Date, EndDate As Date) As String
    Dim TotalDays As Long
    Dim Years As Long
    Dim Months As Long
    Dim Days As Long
    Dim TempDate As Date

    ' Vérifier si la date de début est antérieure à la date de fin
    If StartDate > EndDate Then
        datediffdetail = "Erreur : la date de début est après la date de fin"
        Exit Function
    End If

    ' Calculer le nombre total de jours entre les deux dates
    TotalDays = EndDate - StartDate

    ' Initialiser TempDate avec StartDate
    TempDate = StartDate

    ' Calculer les années
    Years = Year(EndDate) - Year(StartDate)
    If Month(EndDate) < Month(StartDate) Or (Month(EndDate) = Month(StartDate) And Day(EndDate) < Day(StartDate)) Then
        Years = Years - 1
    End If
    TempDate = DateAdd("yyyy", Years, TempDate)

    ' Calculer les mois
    Months = DateDiff("m", TempDate, EndDate)
    If Day(EndDate) < Day(TempDate) Then
        Months = Months - 1
    End If
    TempDate = DateAdd("m", Months, TempDate)

    ' Calculer les jours restants
    Days = EndDate - TempDate

    ' Retourner le résultat sous forme d'une chaîne
    datediffdetail = Years & " années, " & Months & " mois, " & Days & " jours"
End Function
Rechercher des sujets similaires à "calcul entre deux dates datediff"