Amélioration d'une fonction

  • Initiateur de la discussion Initiateur de la discussion libellule85
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

libellule85

XLDnaute Accro
Bonsoir le forum,

Ayant récupéré une fonction qui fait la différence entre les dates, j'aimerais apporter une petite amélioration à celle-ci mais je n'ai pas suffisamment de connaissance en vba pour la faire, et c'est donc pourquoi je me tourne vers vous.
Voici mon "problème" :

si je mets dans la celle A1 la date 15/05/2011 et dans la cellule A2 la date 18/05/2012 cela me donne le résultat 1 an 3 jours et moi ce que j'aimerais avoir comme résultat c'est 1 an et 3 jours.

La fonction est dans le fichier joint.
D'avance merci pour votre aide
 

Pièces jointes

Re : Amélioration d'une fonction

Bonsoir, salut mon JC 😉

Sinon en optimisant un peu la fonction 😉
Code:
Function DIFDATE(Dated As Date, Datef As Date) As String
  Dim AN As Integer, MN As Integer, JN As Integer
  Dim AA As Integer, MA As Integer, JA As Integer
  Dim Na As Integer, Nm As Integer, Nj As Integer
  Dim NJMP As Variant
  If Not IsNull(Dated) And Not IsNull(Datef) Then
    AN = Val(Format(Dated, "yyyy"))
    MN = Val(Format(Dated, "mm"))
    JN = Val(Format(Dated, "dd"))


    AA = Val(Format(Datef, "yyyy"))
    MA = Val(Format(Datef, "mm"))
    JA = Val(Format(Datef, "dd"))


    NJMP = "01/" & MA & "/" & AA
    NJMP = DateValue(NJMP) - 1
    NJMP = Val(Format(NJMP, "dd"))


    If JN > JA Then
      JA = JA + NJMP
      MA = MA - 1
    End If


    If MN > MA Then
      MA = MA + 12
      AA = AA - 1
    End If


    Na = AA - AN
    Nm = MA - MN
    Nj = JA - JN


    If Na = 0 Then
      NbAn = ""
    Else
      NbAn = Str$(Na) & " an" & IIf(Na > 1, "s", "")
    End If
    If Nm = 0 Then
      Nbm = ""
    Else
      Nbm = IIf(Na > 0, ", ", "") & Str$(Nm) & " mois"
    End If
    If Nj = 0 Then
      Nbj = ""
    Else
      Nbj = IIf(Nm > 0, " et ", "") & Str$(Nj) & " jour" & IIf(Nj > 1, "s", "")
    End If


    DIFDATE = NbAn & Nbm & Nbj
  Else
    DIFDATE = ""
  End If
End Function

A+
 
Re : Amélioration d'une fonction

Bonjour à tous,
Salut mon Nono,

De plus en plus présent avec toujours autant d'efficience...
Je vais quand même tester... Arf... Arf...

A++ l'ami et bises chez toi
A + à tous
 
Re : Amélioration d'une fonction

Re,

Attends mon JC, j'ai trouvé comment l'optimiser à fond 😉
Code:
Function sDifDate(Dated As Date, Datef As Date) As String  Dim NbA As Integer, Nbm As Integer, Nbj As Integer
  Dim LibA As String, LibM As String, LibJ As String
  ' Calculer les écart en année, mois et jour
  NbA = DateDiff("yyyy", Dated, Datef)
  Nbm = DateDiff("m", Dated, Datef) - (NbA * 12)
  Nbj = DateDiff("d", DateSerial(Year(Datef), Month(Datef), 1), Datef)
  ' créer les libellés
  LibA = "": LibM = "": LibJ = ""
  If NbA = 0 Then LibA = "" Else LibA = Str$(NbA) & " an" & IIf(NbA > 1, "s", "")
  If Nbm = 0 Then LibM = "" Else LibM = IIf(NbA > 0, ", ", "") & Str$(Nbm) & " mois"
  If Nbj = 0 Then LibJ = "" Else LibJ = IIf(Nbm > 0, " et ", "") & Str$(Nbj) & " jour" & IIf(Nbj > 1, "s", "")
  ' Renvoyer le libellé
  sDifDate = LibA & LibM & LibJ
End Function

C'est tellement plus simple 🙂

A+
 
Re : Amélioration d'une fonction

JC,

Je ne comprends pas,
regarde ma copie d'écran avec l'ancienne fonction modifié et la dernière nouvelle

Attention, la fonction n'est pas volatile, il faut éditer la cellule et la valider de nouveau 😉

A+
 

Pièces jointes

  • ScreenShot019.jpg
    ScreenShot019.jpg
    42.7 KB · Affichages: 53
Re : Amélioration d'une fonction

Bonsoir @ tous,
peut etre avec :
Code:
=DATEDIF(A5;B5;"Y")&SI(DATEDIF(A5;B5;"Y")>1;" ans et ";" an et ")&DATEDIF(A5;B5;"YD")&SI(DATEDIF(A5;B5;"YD")>1;" jours";" jour")
Amicalement

Edit : On ajoute aussi les mois :
Code:
=DATEDIF(A5;B5;"Y")&SI(DATEDIF(A5;B5;"Y")>1;" ans, ";" an, ")&DATEDIF(A5;B5;"YM")&" mois et "&DATEDIF(A5;B5;"MD")&SI(DATEDIF(A5;B5;"MD")>1;" jours";" jour")


Edit 2: Salut Bruno😛
j'ai pas fait attention
 
Dernière édition:
Re : Amélioration d'une fonction

Bonjour à tous,

Nono : OK pour la volatilité... Mais cela fonctionne avec tes date mais pas avec celles proposées par notre amie :

Capture_1.png

Bien évidement avec ta dernière proposition...

A++
A + à tous
 

Pièces jointes

  • Capture_1.png
    Capture_1.png
    4 KB · Affichages: 120
  • Capture_1.png
    Capture_1.png
    4 KB · Affichages: 108
Re : Amélioration d'une fonction

Bonsoir JCGL, BrunoM45, Rachid_0661,

Merci beaucoup pour vos réponses, c'est super sympa. Effectivement avec la solution de BrunoM45, je n'obtiens pas le résultat escompté, par contre avec la solution de JCGL cela fonctionne impeccable.
Excuse moi Rachid mais je préfère le vba.
En tous cas encore merci à vous pour votre aide.
 
Re : Amélioration d'une fonction

Bonjour à tous,
Salut Rachid,

Voir la différence entre la Fonction et la formule....

Capture_2.png

La formule est juste... Il me semble.

A + à tous
 

Pièces jointes

  • Capture_2.png
    Capture_2.png
    1.4 KB · Affichages: 171
  • Capture_2.png
    Capture_2.png
    1.4 KB · Affichages: 173
Re : Amélioration d'une fonction

Bonjour à tous,

Bonsoir JCGL, BrunoM45, Rachid_0661,

Merci beaucoup pour vos réponses, c'est super sympa. Effectivement avec la solution de BrunoM45, je n'obtiens pas le résultat escompté, par contre avec la solution de JCGL cela fonctionne impeccable.
Excuse moi Rachid mais je préfère le vba.
En tous cas encore merci à vous pour votre aide.

Oui mais ne fonctionne pas de façon pérenne...

Attendons la modification l'ami Bruno (si modification doit être faite...)

A + à tous
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Résolu(e)
Microsoft 365 DATEDIF
Réponses
11
Affichages
239
  • Question Question
Microsoft 365 Aide Excel formule
Réponses
4
Affichages
401
  • Question Question
Microsoft 365 Règle de 3
Réponses
11
Affichages
832
Retour