Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2019 Compte à rebours Résolu

Paulle

XLDnaute Occasionnel
Bonjour,

J’ai tenté, mais sans y parvenir un compte à rebours du nombre de mois et de jours avant la date anniversaire.

S’il y a une date de décès, les cellules jours et mois anniversaire restent vides.

Comment faire ?

Merci.
 

Pièces jointes

  • Anniversaire01.xlsm
    19.8 KB · Affichages: 9

Phil69970

XLDnaute Barbatruc
Bonjour à tous

Patrick en fait Paulle et toi vous ne parler pas de la même chose
Toi tu calcules l'age d'une personne ==> Année, Mois, Jours depuis sa naissance à aujourd'hui par exemple

Et Paulle voudrait avoir le nombre de mois et jours avant le prochain anniversaire
Exemple

MR X né le 4/02/1983
Cela donne pour toi bien son age



Et Paulle voudrait savoir
dans combien de temps c'est son anniversaire dans ==> 1 jour

Donc Colonne H son age (c'est ok) et colonne I et J l'attente avant son anniversaire dans mon exemple: 1 jour




@Phil69970
 

patricktoulon

XLDnaute Barbatruc
petite correction
là on est bon
VB:
Option Explicit
Function Age_Anniversaire_dans(ByVal dat1 As Variant, Optional ByVal dat2 As Variant = 0, Optional ByVal A_ou_M_ou_J As Long = 1)
'auteur:patricktoulon sur Exceldownloads
'date 03/02/2023
' là aussi je décale les dates de  +100 ans pour avoir la possibilité d'aller jusqu'à 1800
'*************************************
    Dim A$, M&, J$, Dtemp$, anniv As Date, dtemps As Date, Maint As Date
    If Val(dat2) = 0 Then dat2 = CStr(Date)

    dat1 = CDate(Left(dat1, 6) & Val(Right(dat1, 4) + 100))
    dat2 = CDate(Left(dat2, 6) & Val(Right(dat2, 4) + 100))

    If dat1 > dat2 Then dtemps = dat2: dat2 = dat1: dat1 = dtemps

    A = Evaluate("=DATEDIF(" & CLng(dat1) & "," & CLng(dat2) & ",""y"")")

    Maint = DateSerial(Year(Date) + 100, Month(Date), Day(Date))
    anniv = CDate(Left(dat1, 6) & Year(Date) + 100)

    If anniv < Maint Then dtemps = anniv: anniv = Maint: Maint = dtemps

    M = Evaluate("=DATEDIF(" & CLng(Maint) & "," & CLng(anniv) & ",""ym"")")
    J = Evaluate("=DATEDIF(" & CLng(DateSerial(Year(Date) + 100, Month(Date), Day(Date))) & "," & CLng(anniv) & ",""md"")")

    If M = 1 And Month(anniv) > M Then M = 12 - M

   ' Debug.Print dat1 & vbCrLf & dat2 & vbCrLf & A & vbCrLf & M & " mois " & J & " jours"
    Age_Anniversaire_dans = Array(" ", A, M, J)(A_ou_M_ou_J)
End Function
 

Paulle

XLDnaute Occasionnel
De la ligne 3 à la ligne 17 c'est correct.

Ligne 18, Date anniversaire 01/04/1978 le prochain anniversaire est le 01/04/2023 donc dans 1 mois et 29 jours
et non 11mois et 29 jours.
Ligne 19, Date anniversaire 03/01/1948 le prochain anniversaire est le 03/01/2023 donc dans 11 mois et 0 jour et non 1 mois et 0 jour.
 

Pièces jointes

  • 2023-02-03 133613.jpg
    181.3 KB · Affichages: 12

patricktoulon

XLDnaute Barbatruc
bon un dernier essaie
correction
VB:
Option Explicit
Function Age_Anniversaire_dans(ByVal dat1 As Variant, Optional ByVal dat2 As Variant = 0, Optional ByVal A_ou_M_ou_J As Long = 1)
'auteur:patricktoulon sur Exceldownloads
'date 03/02/2023
' là aussi je décale les dates de  +100 ans pour avoir la possibilité d'aller jusqu'à 1800
'*************************************
    Dim A$, M&, J$, Dtemp$, anniv As Date, dtemps As Date, Maint As Date
    If Val(dat2) = 0 Then dat2 = Date

    dat1 = CDate(Left(dat1, 6) & Val(Right(dat1, 4) + 100))
    dat2 = CDate(Left(dat2, 6) & Val(Right(dat2, 4) + 100))

    If dat1 > dat2 Then dtemps = dat2: dat2 = dat1: dat1 = dtemps

    A = Evaluate("=DATEDIF(" & CLng(dat1) & "," & CLng(dat2) & ",""y"")")

    Maint = DateSerial(Year(Date) + 100, Month(Date), Day(Date))
    anniv = CDate(Left(dat1, 6) & Year(Date) + 100)

    If anniv < Maint Then dtemps = anniv: anniv = Maint: Maint = dtemps

    M = Evaluate("=DATEDIF(" & CLng(Maint) & "," & CLng(anniv) & ",""ym"")")
    J = Evaluate("=DATEDIF(" & CLng(Maint) & "," & CLng(anniv) & ",""md"")")

    If dat1 < CDate(Left(dat2, 6) & Year(dat1)) Then M = 12 - M

    'Debug.Print dat1 & vbCrLf & dat2 & vbCrLf & Maint & vbCrLf & anniv & vbCrLf & A & vbCrLf & M & " mois " & J & " jours"
    Age_Anniversaire_dans = Array(" ", A, M, J)(A_ou_M_ou_J)
End Function
chez moi ca fonctionne
 

Discussions similaires

Réponses
15
Affichages
778
Réponses
4
Affichages
456
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…