Afficher les anniversaires dans un calendrier

Bonjour

Je viens remercier tous les personnes qui m ont conseillé de revoir mon calendrier .

Maintenant je viens vers vous pour m indiquer comment mettre les anniversaires à la date du mois ainsi que le nom.

Les parametres sont en feuille 2

Merci de votre aide

orguyrine

Hello
Avec un fichier, on saurait mieux te répondre.

Mille excuse voici le fichier

essai calendrier.xlsx (15,9 Ko)

Hello
Alors j’ai actualisé la date de naissance de la feuille 2 pour l’adapter à l’année en cours en rajoutant une colonne.
la date s’actualise en fonction de ta cellule de référence sur ton Feuil1, seul bémol les années bissextiles où tu devras selon tes préférences mettre le 28 février ou le 1ᵉʳ mars.

puis dans le calendrier il suffit de lancer une recherchex sur la date du jour…

=RECHERCHEX(B23;Feuil2!$O$5:$O$7;"Bon anniversaire"&" "&Feuil2!$M$5:$M$7;"";0)

essai calendrier.xlsx (16,6 Ko)

On peut pousser un peu, pour simplifier la formule en utilisant des plages nommées, ça évite les erreurs en cas de recopie de la formule.

=RECHERCHEX(B23;Date_actuel;"Bon anniversaire"&" "&Nom;"";0)

essai calendrier.xlsx (16,6 Ko)

Bonjour,

Un essai (avec Excel 2021). E b12, à recopier vers la droite et le bas :

=LET(flt;JOINDRE.TEXTE(", ";;FILTRE(Feuil2!$M$5:$M$100;Feuil2!$O$5:$O$100=Feuil1!B8;""));SI(flt="";"";"Bon anniversaire"&CAR(10)&flt))

essai calendrier daniel.xlsx (17,2 Ko)

Daniel

Bien vu @Daniel77
Effectivement ma version ne prend pas en charge les doublons si deux personnes sont née le même jour

Bonjour daniel77

je ne comprends pas le flt le let a moitié pas evident pour moi

Peux tu me donner des explications

merci

orguyriine

Si je comprends bien LET sert un peu comme une variable en VBA,

la flt on cherche le nom dans la zone M5:M100 et la date dans la zone O5:O100 qui correspond à la date trouvée dans B8
:thinking: le JOINDRE.TEXTE ne sert que si plusieurs occurrences sont trouvées… ?

=LET(flt;JOINDRE.TEXTE(", ";;FILTRE(Feuil2!$M$5:$M$100;Feuil2!$O$5:$O$100=Feuil1!B8;""));

Ensuite le SI, donc si c’est vide on n’affiche rien, sinon on affiche le ou les noms trouvés avec le texte entre guillemets et séparés par une virgule.

SI(flt="";"";"Bon anniversaire"&CAR(10)&flt))

En théorie on peut mettre ce qu’on veut à la place de flt

J’ai bon la ?

en reprenant la formule de Daniel et en ayant des plages nommées

=LET(ftl;JOINDRE.TEXTE(", ";;FILTRE(Nom;Date_actuel=F23;""));SI(ftl="";"";"Bon anniversaire"&CAR(10)&ftl)

Le critère est ftl
la zone de recherche JOINDRE.TEXTE(", ";;FILTRE(Nom;Date_actuel=F23;"")
et après c’est juste une simple formule SI qui vérifie si vide alors vide sinon ‹ ‹ Bon anniversaire › ›, et le résultat de la zone de recherche

taz 't’a donné la bonne explication. “LET” évite de répéter plusieurs fois le même calcul. Ca revient à écrire :

=SI(JOINDRE.TEXTE(", ";;FILTRE(Feuil2!$M$5:$M$100;Feuil2!$O$5:$O$100=Feuil1!F23;""))="";"";"Bon anniversaire"&CAR(10)&JOINDRE.TEXTE(", ";;FILTRE(Feuil2!$M$5:$M$100;Feuil2!$O$5:$O$100=Feuil1!F23;"")))

donc à effectuer 2 fois :

JOINDRE.TEXTE(", ";;FILTRE(Feuil2!$M$5:$M$100;Feuil2!$O$5:$O$100=Feuil1!F23;""))

Daniel