XL 2019 Compte à rebours Résolu

  • Initiateur de la discussion Initiateur de la discussion Paulle
  • 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 !

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

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

1675417858218.png


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

1675418059390.png



@Phil69970
 
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
 
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
    2023-02-03 133613.jpg
    181.3 KB · Affichages: 14
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
1675433705792.png
 
- 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éponses
15
Affichages
1 K
  • Résolu(e)
Microsoft 365 DateDif()
Réponses
5
Affichages
170
Réponses
7
Affichages
180
Réponses
0
Affichages
331
Réponses
7
Affichages
220
Réponses
6
Affichages
299
Retour