Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2019 Dates Anniversaires dans l'ordre

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

Caninge

XLDnaute Accro
Bonjour à tous,

Mon exemple est un extrait d'un arbre généalogique, Il y a une multitude de dates de naissances, baptêmes, décès...
(A partir de deux colonnes (Personnes + dates)
J'aimerais bien connaître les prochains anniversaires à partir de la date actuelle.
Bien entendu je veux connaitre la date des personnes encore vivantes.
Dans la feuille "Prochains Anniversaires "
Sur la première ligne : Louise va avoir 38 ans le 28 Avril 2021 et ainsi de suite pour tous les autres.
J'en appelle à vos talents exceptionnels d'utilisateurs d'Excel
CANINGE
 

Pièces jointes

Re, salut ChTi160,

Notez qu'au post #2 les cellules D12 D13 D17 D19 ne sont pas vides mais contiennent le texte vide "".

Si on les efface on obtient en colonne F la date du 31/12/2021.

Pour l'éviter voyez ce fichier (2) et la formule en F3 où j'ai ajouté EXP(LN(D3)) :
Code:
=SIERREUR(DATE(ANNEE(AUJOURDHUI())+(AUJOURDHUI()>DATE(ANNEE(AUJOURDHUI());SIERREUR(MOIS(EXP(LN(D3)));STXT(D3;4;2));SIERREUR(JOUR(D3);GAUCHE(D3;2))));SIERREUR(MOIS(D3);STXT(D3;4;2));SIERREUR(JOUR(D3);GAUCHE(D3;2)));"")
A+
 

Pièces jointes

Bonjour à tous
Une proposition par vba avec le code ci-dessous
Mise à jour à l'activation de la feuille "Prochains Anniversaires"
Prochaine date d'anniversaire en tête du tableau
VB:
Private Sub Worksheet_Activate()
    Dim C As Range, lig&
    Application.ScreenUpdating = False
    lig = 4
    Range("d4:g" & Rows.Count).ClearContents
    For Each C In Feuil1.Range("c4.c" & Feuil1.Cells(Feuil1.Rows.Count, "c").End(xlUp).Row)
        If C.Offset(, 1) <> "" And C.Offset(, 2) = "" Then
            Cells(lig, "d") = C & " aura"
            Cells(lig, "e") = Year(Date) - Year(C.Offset(, 1))
            Cells(lig, "f") = "ans le"
            Cells(lig, "g") = DateSerial(Year(Date), Month(C.Offset(, 1)), Day(C.Offset(, 1)))
            lig = lig + 1
        End If
    Next
    Range("d4").CurrentRegion.Sort key1:=[g4], Order1:=xlAscending, Header:=xlNo
End Sub
 

Pièces jointes

Dernière édition:
Re, salut Jacky67,

Fichier (3) avec cette fonction VBA, très simple :
VB:
Function Anniversaire(naissance)
If Not IsDate(naissance) Then Anniversaire = "": Exit Function
Anniversaire = DateSerial(Year(Date), Month(naissance), Day(naissance))
If Date > Anniversaire Then Anniversaire = DateAdd("yyyy", 1, Anniversaire)
End Function
Boone nuit.
 

Pièces jointes

Hello job75
Certes, très jolie 😉
J'avais prêté attention à :
- Dates Anniversaire dans l'ordre
- Bien entendu je veux connaitre la date des personnes encore vivantes 😇
- Dans la feuille "Prochains Anniversaires "

Bonne nuit également

 
Dernière édition:
J'ai laissé les anniversaires des personnes décédées pour qu'on voie bien ce qui se passe avec les dates de naissance antérieures à 1900.

Et si ces dates sont là c'est pour servir à quelque chose non ?
 
Bonjour à tous, bonjour le forum,
merci pour toutes vos réponses, je vais regarder tout ça à tête reposée.
Je vous tiens au courant.
Oui Marie est décédée depuis longtemps. Effectivement elle serait sans doute passée à la télévision et serait la plus vieille personne dans le monde et peut-être l'univers. Lol
CANINGE
 
Bonjour à tous,
les fêtes de Pâques se sont bien passées ?
la solution de Jacky67 me plait bien et je l'ai adopté et adapté.
Je ne connais pas grand chose dans les macros, je voudrais dire plutôt rien. Mais j'ai quand même
démystifier le truc en modifiant la procédure (compliqué). J'aimerais bien que l'on me dise si c'est bon. Apparemment ça marche. Une autre chose : comment la macro reconnait qu'il faut prendre les données dans la feuille Tableau et non dans une autre ?
Je vais avoir 64 ans à la fin de l'année. j'ai remarqué que certains de mes ancêtres vivaient vieux. J'ai peut-être encore le temps d'apprendre les macros. LOL
A plus
 

Pièces jointes

Re...
Oui, la modification est bonne
L'instruction qui reconnait la plage à traiter est
Feuil1.Range("d3.d" & Feuil1.Cells(Feuil1.Rows.Count, "d").End(xlUp).Row)
Prend en compte de D3 à la dernière cellule saisie de la colonne D

Il y a des apostrophes dans certaines cellules en colonne D, elles sont comprises dans cette plage

Feuil1 étant le Codename de la feuille "Tableau"
Dans la pj j'ai mis un msgbox pour voir la plage qui est prise en compte. La mfc (facultative)est modifiée.
Il n'y a pas d'âge pour apprendre et, 64, c'est encore bien jeune 🙂
Regarde, moi, éternel apprenti.
 

Pièces jointes

Dernière édition:
Bonjour Jacky,

J'aimerais bien enlever les apostrophes et mettre directement le nom des feuilles "Tableau" et "Prochains anniversaires) dans la macro. Les noms inscrits dans ce tableau proviennent grâce à une formule d'une autre feuille et cela risque de poser des problèmes. Au fait où peut-on apprendre la programmation EXCEL ? puisque que je ne suis pas trop vieux. J'ai bien commencé la musique à 39 ans.
 
Re...
L'avantage de prendre les "codename" à la place des noms de feuille est pratique.
On peut déplacer les feuilles , renommer les feuilles, sans modifier le code.
Néanmoins, avec la même façon de procéder, en exemple avec le nom de la feuille "Tableau" en Object, le code ci-dessous.
Set Fs = Sheets("Tableau") ' Fs pour feuille source
Si le code devait toujours être lancé par une procédure évènementielle ici: "Activate", With Sheets("Prochains Anniversaires") serait tout à fait inutile, puisqu'à l'activation de "Prochains Anniversaires", ce sera la feuille active.
Pour enlever les apostrophes, il est nettement préférable de traiter à la source plutôt que de bidouiller par la suite. Il faut donc savoir d'où viennent les données et comment ils sont placées sur la feuille.

Pour apprendre, ici, c'est très bien, sinon une recherche sur internet donne bien des résultats et des leçons avec tutos. Perso., c'est comme cela que j'ai fait, et que je fais encore.

Bon courage
Ps: La musique, quel instrument ?

VB:
Private Sub Worksheet_Activate()
    Dim C As Range, lig&, Fs As Worksheet
    Application.ScreenUpdating = False
    lig = 4
    Set Fs = Sheets("Tableau")
    With Sheets("Prochains Anniversaires")
        .Range("d4:g" & Rows.Count).ClearContents
        For Each C In Fs.Range("d3.d" & Fs.Cells(Fs.Rows.Count, "d").End(xlUp).Row)
            If C.Offset(, 17) <> "" And C.Offset(, 23) = "" Then
                .Cells(lig, "d") = C & " aura"
                .Cells(lig, "e") = Year(Date) - Year(C.Offset(, 17))
                .Cells(lig, "f") = "ans le"
                .Cells(lig, "g") = DateSerial(Year(Date), Month(C.Offset(, 17)), Day(C.Offset(, 17)))
                lig = lig + 1
            End If
        Next
        .Range("d4").CurrentRegion.Sort key1:=.[g4], Order1:=xlAscending, Header:=xlNo
    End With
End Sub
 

Pièces jointes

Dernière édition:
- 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
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…