Afficher le prochain anniversaire

Bonjour à tous,

UNe petite question...

J'ai un fichier Excel qui sert d'annuaire, avec des personnes classées par ordre alphabétique (noms puis prénom). J'ai également une colonne pour la date de naissance qui elle n'est bien entendu pas classée...

Maintenant, j'aimerais savoir s'il est possible d'avoir dans une cellule le "prochain anniversaire à souhaiter" en comparant toutes les dates de naissance (jour et mois) et la date du jour... Ainsi, je pourrais agrémenter le fichier de cette fonctionnalité et les utilisateurs sauraient qui a son anniversaire prochainement. Idéalement, j'aimerais avoir une liste avec X prochains anniversaires.

J'ai trouvé les formules qui permettent de mettre en surbrillance les dates de naissance des gens qui ont leur anniversaire dans la semaine ou aujour'dhui, mais j'ai pas réussi à remonter le nom de ces gens ainsi que la date de naissance au dessus de mon fichier. Le VLOOKUP ne fonctionne pas car les dates ne sont pas triées chronologiquement...

Au final donc j'aimerais avoir en entête qqch qui indique :

Les 3 prochaine anniversaire :

1. Jean Rochefort, 28.01.1956

2. Michel Blanc, 02.02.1978

3. Jeanne Michoud, 04.02.1954

Merci d'avance de votre aide

Bonjour à tous,

On pourrait filtrer et n'afficher que les dates de naissance de "J" à "J+7"

"J" étant la date d'aujourd'hui

Envoie le fichier anonymisé mais avec sa structure réelle afin de régler la macro

si fichier trop lourd, supprime des lignes.

Amicalement

Claude

salut,

merci de ton aide. Voici un fichier anonymisé qui respecte les infos disponibles.

L'idée serait d'avoir dans les cellules jaunes la date des prochains anniversaires (ou les noms et les dates ça serait encore mieux)...

Merkki

1'007anniversaires.zip (5.59 Ko)

re,

Solution filtre

Sub Filtre()
    Application.ScreenUpdating = False
        On Error Resume Next
            ActiveSheet.ShowAllData
        On Error GoTo 0
    Range("a5:w" & [a65000].End(xlUp).Row) _
    .AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
    Range("a1:a2"), Unique:=False
End Sub
Sub AfficherTout()
        On Error Resume Next
            ActiveSheet.ShowAllData
        On Error GoTo 0
End Sub

Amicalement

Claude

Bonjour Claude,

Merci pour cette macro. Elle répond "en partie" à mon besoin que j'ai certainement mal exprimé ici ...

En fait il me faudrait exactement le résultat de cette macro mais en permanence dans une cellule qui serait en haut de la liste des employés.

J'utilise en fait cette liste pour afficher des données spécifiques au collaborateur choisi (via des vlookup), donc la macro en filtrant le contenu affiche bie les anniversaires mais "tronque" la liste des employés, ce qui est gênant.

L'idéal serait donc de trouver une formule dans une cellule du haut du fichier qui affiche l'anniversaire suivant par rapport à la date d'aujourd'hui, puis le suivant dans une autre cellule, puis le suivant enfin dans la prochaine. Une formule qui prendrait la date du jour (mois et jour) et comparerait avec les valeurs de la colonne "date de naissance" (date et mois aussi) et afficherait le prochain, puis ferait de même avec la date sortie avec la première date trouvée (le prochain anniv) avec la colonne et on aurait ainsi le suivant, etc.... Ensuite, il suffirait de rajouter via des fonctions de recherche le nom du collaborateur et son âge, bingo.

Merci encore pour votre aide que j'apprécie véritablement.

Etienne

Bonjour,

Autre essai

à l'ouverture du fichier, création d'une liste déroulante dynamique des

anniversaires à venir.

Private Sub Workbook_Open()
'Macros par Claude Dubois pour "epfyffer" Excel-Pratique le 27/01/11
'--- création liste des anniveraires à venir (triée)
'--- jour anniversaire colonne "B" masquée ---
    Application.ScreenUpdating = False
    Sheets("Base").Activate
    With Sheets("Listes")
        Range("a5:x" & [a65000].End(xlUp).Row) _
        .AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
        Range("b3:b4"), CopyToRange:=.Range("a1"), Unique:=False
        '--- tri la liste ---
        .Columns("a").Sort Key1:=.Range("a1"), Order1:=xlAscending, _
        Header:=xlYes, OrderCustom:=1, MatchCase:=False
    End With
    Range("n1") = 1     'début de liste
End Sub

Bonne journée

Claude

Bonjour

Salut Claude

Avec une formule matricielle en L1qui s'incrémente vers le bas (Validation avec les 3 touches Ctrl+Maj+Entrée)

=SOMMEPROD((MOD($P$6:$P$19;365,25)-MOD(AUJOURDHUI();365,25)=PETITE.VALEUR(SI((MOD($P$6:$P$19;365,25)>MOD(AUJOURDHUI();365,25));MOD($P$6:$P$19;365,25)-MOD(AUJOURDHUI();365,25));LIGNE()))*($P$6:$P$19))

Cordialement

954anniversaires.zip (9.76 Ko)

Génial ça fonctionne à merveille, bravo et surtout merci !!!

Et pour continuer sur la lancée on peut faire la même chose sans la fonction LIGNE() ? J'ai en effet essayé d'utiliser votre formule dans un autre fichier à la structure similaire dans le logiciel XCELSIUS mais ce dernier ne sait pas interpréter cette fonction... Si c'est possible ça me permettrait d'utiliser cette "fonctionnalité" des anniversaires à venir dans quelques tableaux de bord générés avec Xcelsius.

Merci encore

Bonjour

=SOMMEPROD((MOD($P$6:$P$19;365,25)-MOD(AUJOURDHUI();365,25)=PETITE.VALEUR(SI((MOD($P$6:$P$19;365,25)>MOD(AUJOURDHUI();365,25));MOD($P$6:$P$19;365,25)-MOD(AUJOURDHUI();365,25));LIGNE()))*($P$6:$P$19))

La Fonction LIGNE() ne sert ici qu'à rendre l'incrémentation possible.

Dans l'exemple du fichier, les 3 formules donnant les solutions sont en lignes 1, 2 et 3, donc, on peut remplacer LIGNE() par 1 pour la première formule, 2 pour la seconde et 3 pour la 3ème.

Tout cela pour fournir le bon chiffre k à PETITE.VALEUR(Matrice;k)

Par ailleurs, n'ayant pas le logiciel Xcelsius, il ne m'est pas possible de répondre à la question le concernant.

Cordialement

Bonjour à tous,

Merci de compléter ton profil,

machine et Version Excel utilisée

Amicalement

Claude

Bonjour,

a resolu3

Bonjour,

Désolé de mon abscence, la grippe ne m'a pas épargné cette année !

Je vais de ce pas mettre mon profil à jour.

J'ai pu tester la fonction, magnifique en effet cela fonctionne parfaitement en remplaçant par un entier (1, 2, 3 etc...). Malheureusement Xcelsius ne supporte pas la fonction, je pense à cause des { } (que je ne connais pas non plus je dois l'avouer... ).

Merci beaucoup de votre aide, et bravo pour le niveau impressionnant de vos réponses !

Etienne

Rebonjour à tous,

Voilà je remonte ce post car on me signale une erreur...

Ma liste comporte plus de 200 employés, et donc certains jours ona plusieurs personnes qui ont leur anniversaire. Pas forcément la même année, mais la même dat (jour et mois).

Dans ce cas là, la formule me fonctionne pas correctement.

En effet, la date reportée est fausse (une date dans le futur style 05.09.2024) et donc les reports de nom et âge sont faux.

Je vous poste le fichier anonymisé, si vous avez une solution, j'ai essayé de tourner un moment mais je ne m'en sors pas

Merci d'avance

100anniversaires.zip (27.97 Ko)

Bonjour

Avec une colonne supplémentaire et un rajout d'un millionième de jour par ligne.

Cordialement

361anniversaires.zip (29.77 Ko)

Un ENORME merci !!

Je ne peux que m'incliner bien bas devant une telle maestria

merci meaucoup

Rechercher des sujets similaires à "afficher prochain anniversaire"