Afficher les anniversaires à venir

Bonjour,

Je dispose d'un tableau d'individus formé des 5 colonnes suivantes : A = Nom, B = Prénom, C = Année de naissance, D = Mois de naiss. (nombre) et E = Jour de naiss.

Comment afficher la liste des anniversaires du jour mais aussi ceux sous dizaine de la façon suivante : "Prénom Nom fête ses X ans aujourd'hui." et "Prénom Nom fêtera ses X ans le Jour Mois." ?

Points d'attention :

. Dans le tableau, les mois sont indiqués par un nombre (ex : '4' pour avril) mais la liste des anniversaires sous dizaine affichera le nom du mois (ex : 'avril' pour 4).

. Cas des individus apparaissant plusieurs fois dans le tableau : leurs anniversaires respectifs ne devront être affichés qu'une seule fois chacun.

. Cas d'individus distincts nés le même jour/mois : idéalement la liste des anniversaires les affichera du plus jeune au plus âgé.

. Si il n'y a aucun anniversaire aujourd'hui ou à venir sous dizaine, alors la formule affichera "Aucun anniversaire aujourd'hui ni dans les 10 prochains jours."

Cdt,

K.

Bonjour,

Un début de réponse pour les anniversaires du jour :

=arrayformula(SUBSTITUTE(query(unique(query(ARRAYFORMULA({B2:B &" " &A2:A\C2:E});"select Col1,'fête ses ', "&year(today())&"-Col2, 'ans aujourd hui.' where Col3 = "&month(today())&" and Col4 = "&DAY(today())&" order by Col2 DESC Label "&year(today())&"-Col2 '' , 'fête ses ' '', 'ans aujourd hui.' '' "));"select Col1") & " " & query(unique(query(ARRAYFORMULA({B2:B &" " &A2:A\C2:E});"select Col1,'fête ses ', "&year(today())&"-Col2, 'ans aujourd hui.' where Col3 = "&month(today())&" and Col4 = "&DAY(today())&" order by Col2 DESC Label "&year(today())&"-Col2 '' , 'fête ses ' '', 'ans aujourd hui.' '' "));"select Col2") & " " & query(unique(query(ARRAYFORMULA({B2:B &" " &A2:A\C2:E});"select Col1,'fête ses ', "&year(today())&"-Col2, 'ans aujourd hui.' where Col3 = "&month(today())&" and Col4 = "&DAY(today())&" order by Col2 DESC Label "&year(today())&"-Col2 '' , 'fête ses ' '', 'ans aujourd hui.' '' "));"select Col3") & " " & query(unique(query(ARRAYFORMULA({B2:B &" " &A2:A\C2:E});"select Col1,'fête ses ', "&year(today())&"-Col2, 'ans aujourd hui.' where Col3 = "&month(today())&" and Col4 = "&DAY(today())&" order by Col2 DESC Label "&year(today())&"-Col2 '' , 'fête ses ' '', 'ans aujourd hui.' '' "));"select Col4");"aujourd hui";"aujourd'hui"))

https://docs.google.com/spreadsheets/d/17dZy8QbDyZIRRgxN3dA7TkIMqLtOFpso_v6Sf9sBK1M/edit?usp=sharing

Je regarde pour le reste demain, j'ai mes haies à tailler !

Cordialement,

Fil.

Bonjour à tous,

Une autre approche plus "excel-like" basée sur le tableau de filoche :

=LET(
    _data; A2:E7;
    _maxDiff; 10;
    _mm; CHOOSECOLS(_data; 4);
    _jj; CHOOSECOLS(_data; 5);
    _npa; CHOOSECOLS(_data; 1; 2; 3);
    λFormat; LAMBDA(_row;
        LET(
            _nm; INDEX(_row; 1);
            _pr; INDEX(_row; 2);
            _an; INDEX(_row; 3);
            _an0; YEAR(TODAY());
            _of; DATE(_an0; INDEX(_row; 4); INDEX(_row; 5)) - TODAY();
            _jour; IF(COUNTA(_row) = 3; "aujourd'hui"; _of);
            TEXTJOIN(
                " ";
                TRUE;
                _pr;
                _nm;
                "fête ses";
                YEAR(TODAY()) - _an;
                "ans";
                IF(_jour = "aujourd'hui"; _jour; "dans " & _of & " jours.")
            )
        )
    );
    _p; UNIQUE(FILTER(_npa; _mm = MONTH(TODAY());_jj = DAY(TODAY())));
    _ajd; BYROW(SORT(_p; 3; -1); λFormat);
    _next0; UNIQUE(
        FILTER(_data; ARRAYFORMULA(ISNUMBER(XMATCH(DATE(YEAR(TODAY()); _mm; _jj); TODAY() + SEQUENCE(_maxDiff)))))
    );
    _next; BYROW(SORT(_next0; 3; -1); λFormat);
    IF(
    AND(ISERROR(_ajd); ISERROR(_next));
    "Aucun anniversaire aujourd'hui ni dans les " & _maxDiff & " prochains jours";
    IF(
        ISERROR(_ajd); 
        _next; 
        IF(
            ISERROR(_next); 
            _ajd; 
            VSTACK(_ajd; _next)
        )
    )
)
)

Woaw, merci à tous les deux, Filoche et saboh12617, pour vos retours. Je ne sais pas coder. Mes compétences sont insuffisantes pour comprendre vos formules alors j'ai essayé de les tester. Impossible pour celle de Filoche car la Google Sheet est en lecture seule. Concernant la formule de saboh12617, voici ce que j'observe :

1/ La formule retourne en fait tous les individus nés dans le mois en cours, y compris ceux dont l'anniversaire est déjà passé.

2/ La formule ne retourne pas spécifiquement les individus nés dans les 10 prochains jours, qu'un nouvois mois (M+1) ou non - voire une nouvelle année (A+1) - débute à l'intérieur de ces 10 jours.

3/ C'est sûrement pourquoi la formule retourne uniquement le texte "Prénom Nom fête ses X ans aujourd'hui" mais pas le texte "Prénom Nom fêtera ses X ans le Jour Mois" pour les individus concernés. C'est aussi pourquoi la formule ne retourne pas le texte "Aucun anniversaire aujourd'hui ni dans les 10 prochains jours".

4/ La formule retourne les individus dont le jour de naissance est inconnu. J'avais oublié de mentionner dans mon message initial que la formule ne s'applique qu'aux individus dont les dates de naissance sont précisément connues.

Merci à nouveau en tout cas pour le temps consacré à m'aider.

K.

Avez-vous essayé la formule sur le tableau de Filoche ? car c'est sur celui-ci que je me suis basé et je n'ai pas ces problèmes.

Veuillez fournir un extrait représentatif (anonymisé) de votre tableau pour pouvoir faire des tests, merci. Voyez comme a fait filoche (si possible partagez directement une copie du fichier en mode édition à toute personne disposant du lien, ça permet de vous implémenter du "sur mesure". Comme vous avez pu le constater la résolution est assez complexe).

Je suis en train de m'inspirer de la logique de vos formules pour décomposer le travail en éléments simples (ce qui nécessite de créer des étapes/colonnes intermédiaires) et espère bien parvenir à afficher les anniversaires.

K.

Bonsoir,

Quand tu as un google sheets en lecture seule, fais en une copie et tu auras accès à tout... 😉

Ca m'a prit un peu de temps mais j'ai réussi. Pas une seule grande formule mais une succession de petites.

Colonnes intermédiaires créées pour cela : dates de naissance des individus au format JJ/MM/AAAA, écarts en jours entre today() et ces dates, âges des individus, affichage des textes (rien, anniv aujourd'hui, ou anniv sous 10aine). Enfin, une formule finale qui filtre et trie les textes.

Merci encore à tous les deux.

C'est la bonne manière pour progresser, félicitations pour votre persévérance. Bonne journée !

Rechercher des sujets similaires à "afficher anniversaires venir"