Calculer le nombre d'anniversaire à la date du jour

Bonjour, j'utilise Excel en français (pas le choix), je ne suis pas expert, mais j'essaie, je pense, une chose toute simple me semble-t-il, qui est de calculer le nombre total d'anniversaires dans mon fichier (ci-joint à mon post).

En colonne "A" j'ai les dates d'anniversaire, en "B" je calcule l'âge et en D1, je voudrais afficher le nombre total d'anniversaires à la date du jour.

J'ai utilisé la formule suivante :

= NB.SI(A2:A13;AUJOURDHUI()), qui indique la plage entière de mon fichier, cela ne fonctionne pas

= NB.SI(A:A;AUJOURDHUI()), qui indique la colonne, cela ne fonctionne pas

= NB.SI(A:A;DATE(ANNEE(AUJOURDHUI());MOIS(AUJOURDHUI());JOUR(AUJOURDHUI()))) en utilisant le DateSerial, Date en français, ne fonctionne pas non plus.

Comme vous pouvez le voir, nous sommes aujourd'hui le 4 octobre 2024, j'ai deux dates de naissance le 4 octobre, la cellule devrait donc afficher "2"

image

Qui peut m'aider et me dire surtout où je fais une erreur

Merci d'avance,

Oli

Bonjour,

Essayez :

=ET(MOIS(AUJOURDHUI())=MOIS(A2) ; JOUR(AUJOURDHUI())=JOUR(A2))

Dans une colonne, puis de NB.SI : Vrai sur cette colonne. Vous ne devez pas vérifier l'année puisque c'est un anniversaire, d'ou les 0. Il faut extraire mois + jour

Une alternative O365 en formule unique

=LET(
jourMois;LAMBDA(j;TEXTE(JOUR(j);"00") & TEXTE(MOIS(j);"00"));
mylist; BYROW(A1:A2;LAMBDA(dateN;--(jourMois(dateN)=jourMois(AUJOURDHUI()))));
SOMME(mylist))

Bonjour,

merci déjà pour votre aide

La partie pour vérifier le mois et le jour sur une cellule fonctionne, cela affiche "VRAI" ou "FAUX" à côté de chacune d'elle : =ET(MOIS(AUJOURDHUI())=MOIS(A2); JOUR(AUJOURDHUI())=JOUR(A2))

Mais si je vous suis bien, si j'indique dans ma cellule D1 ceci : =NB.SI(A:A;ET(MOIS(AUJOURDHUI())=MOIS(A:A); JOUR(AUJOURDHUI())=JOUR(A:A))) mais malheureusement cela m'affiche 0 pourtant je devrais avoir comme résultat : 2

Et la partie avec "=LET ..." ne fonctionne pas du tout, cela m'affiche une erreur.

Etrange que le Let ne fonctionne pas chez vous, je l'ai testé et aucun problème… Etes-vous bien sur Office 365 ? Si oui, c'est probablement l'outil de conversion de formules EN→FR qui a du mal avec les nouvelles fonctions…

Pour le reste, vous vous mélangez un peu les pinceaux :

Mais si je vous suis bien, si j'indique dans ma cellule D1 ceci : =NB.SI(A:A;ET(MOIS(AUJOURDHUI())=MOIS(A:A); JOUR(AUJOURDHUI())=JOUR(A:A))) mais malheureusement cela m'affiche 0 pourtant je devrais avoir comme résultat : 2

La fonction NB.SI compare le premier argument au second, or votre premier argument c'est la liste des dates, et le second… Si vous avez entré la formule en arrayformula, une liste de VRAI/FAUX, sinon une valeur unique : FAUX.

Or les dates ne seront jamais égales à VRAI ou FAUX, puisque ce sont des dates. D'où le résultat = 0.

Vous comprenez maintenant pourquoi je vous indiquait d'utiliser NB.SI sur une nouvelle colonne, en comptant les cellules = VRAI.

càd. : en colonne F la 1e formule donnée, et le résultat calculé ainsi : = NB.SI(F:F; VRAI)

Si vous voulez reprendre le principe de votre formule, c'est SOMMEPROD qu'il faut utiliser, par exemple ainsi :

=SOMMEPROD(--(JOUR(A1:A4)=JOUR(AUJOURDHUI())); --(MOIS(A1:A4)=MOIS(AUJOURDHUI())))

Je ne vous remet pas la fonction LET, je viens de me rendre compte que SOMMEPROD est plus simple.

Désolé mais je ne comprends pas non plus avec cette formule et cela ne fonctionne pas non plus.

Bref, je l'ai fait en VBA, mais j'espérais qu'en une seule formule je pouvais y arriver

Sub mcrAnniversaires()
    '
    '   Compter les anniversaires
    '
    Dim iTotJoueurs As Integer
    'En L1 se trouve le nombre de ligne non vide
    iTotJoueurs = CInt(ActiveSheet.Range("L1").Value)
    Dim iFor As Integer, iCptAnniv As Integer, sDDN As String, iMoisDDN As Integer, iJourDDN As Integer
    iTotJoueurs = iTotJoueurs - 1
    'On commence à 2 car la ligne 1 contient "ddn"
    For iFor = 2 To iTotJoueurs
        ActiveSheet.Range("A" & iFor).Select
        sDDN = ActiveCell.Value
        If IsDate(sDDN) Then
            'La valeur est bien une date ...
            'Mois de naissance
            iMoisDDN = Month(DateSerial(Year(sDDN), Month(sDDN), Day(sDDN)))
            'Jour de naissance
            iJourDDN = Day(DateSerial(Year(sDDN), Month(sDDN), Day(sDDN)))
            If Day(Date) = iJourDDN And Month(Date) = iMoisDDN Then
                '
                ' Incrémenter le nombre d'anniversaires
                '
                iCptAnniv = iCptAnniv + 1
            End If 'Anniversaire trouvé
        End If 'c'est une date
    Next iFor
    If iCptAnniv > 0 Then
        MsgBox "C'est l'anniversaire de " & iCptAnniv & " de vos employés aujourd'hui. ", vbInformation, "Anniversaires de vos employés"
    End If
End Sub

Merci beaucoup pour votre aide ;-)

Bonjour

Sujet déplacé sur le bon forum. Calc est utilisé pour les soft Opensource et non pour Excel

image

Pensez à cloturer le fil si vous en avez terminé

Merci de votre participation

Cordialement

Bonsoir Dan, oups, désolé, merci ;-)

Rechercher des sujets similaires à "calculer nombre anniversaire date jour"