Souhaiter anniversaire (Excel 2003)

Résolu/Fermé
jean300 Messages postés 374 Date d'inscription jeudi 11 août 2016 Statut Membre Dernière intervention 13 janvier 2020 - 23 août 2017 à 14:32
via55 Messages postés 14402 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 18 avril 2024 - 25 août 2017 à 12:30
Bonjour,
Je souhaiterai souhaiter les anniversaires qui auront peut-être lieu durant la semaine qui suit leur détection.
Le fichier contient plus ou moins de 300 noms.

Exemple : Semaine détection du 20/08 au 26/08 : (toujours du dimanche au samedi)
Déterminer qui aura son anniversaire dans la semaine suivante.
Soit : Semaine du 27/08 au 02/09 (toujours du dimanche au samedi)
Les semaines se décalant pour suivre le calendrier.

Afficher une Msgbox :
Je souhaite un bon anniversaire à :
Le Nom
Le prénom
La Date de naissance
Indiquant l'âge
Éventuellement :
Aucun anniversaire.

Je souhaiterai de préférence si c'est réalisable une solution par Vba.
En vous remerciant.
ps : je suis débutant en vba

https://www.cjoint.com/c/GHxmFg0Ct1U

A voir également:

6 réponses

via55 Messages postés 14402 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 18 avril 2024 2 702
Modifié le 23 août 2017 à 18:04
Bonjour Jean

Ton fichier avec une macro qui se déclenche à l'ouverture du classeur
https://mon-partage.fr/f/lIZxINID/

Cdlmnt
Via

"L'imagination est plus importante que le savoir."    A. Einstein
0
Utilisateur anonyme
23 août 2017 à 18:12
Bonjour,
Pourriez vous publier une version de votre tableau en XLS ?
Merci d'avance,
Cordialement,
Alain
0
via55 Messages postés 14402 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 18 avril 2024 2 702 > Utilisateur anonyme
23 août 2017 à 18:28
Bonjour Alain,

Voilà : https://mon-partage.fr/f/QTt64fXd/

Cdlmnt
Via
0
Utilisateur anonyme > via55 Messages postés 14402 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 18 avril 2024
23 août 2017 à 18:48
Merci bien !
Cordialement,
Alain
0
jean300 Messages postés 374 Date d'inscription jeudi 11 août 2016 Statut Membre Dernière intervention 13 janvier 2020 14
23 août 2017 à 22:07
Re,
Peux-tu commenter le code stp
Merci
0
jean300 Messages postés 374 Date d'inscription jeudi 11 août 2016 Statut Membre Dernière intervention 13 janvier 2020 14
23 août 2017 à 20:51
Bonjour via55
Est-il possible d'afficher dans la Msgbox du plus âgé au plus jeune ?
En te remerciant.
0
via55 Messages postés 14402 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 18 avril 2024 2 702
23 août 2017 à 22:28
0
jean300 Messages postés 374 Date d'inscription jeudi 11 août 2016 Statut Membre Dernière intervention 13 janvier 2020 14
24 août 2017 à 10:33
Re,
Je te remercie via55, accepte-tu de commenter le code stp car je débute avec vba.
Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
via55 Messages postés 14402 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 18 avril 2024 2 702
24 août 2017 à 13:26
Re,

Bien volontiers
1) Dans ThisWorkbook ces lignes lance la macro anniv à l'ouverture du classeur :
Private Sub Workbook_Open()
anniv
End Sub

2) La macro commentée :
Sub anniv()
Dim Ligne As Long, tablo(10) As Variant, age(10) As Integer, tri(10) As Integer
' derniere ligne remplie 2eme colonne
Ligne = Sheets("Liste").Columns(2).Find("*", , , , xlByColumns, xlPrevious).Row
' n° de la semaine actuelle
cettesemaine = Val(Format(Date, "ww", vbMonday, vbFirstFourDays))
'Boucle sur les lignes de la base
For n = 1 To Ligne
'n° de la semaine de la date de naissance
semaine = Val(Format(Range("C" & n), "ww", vbMonday, vbFirstFourDays))
' si ce n° de semaine est celui de la semaine actuelle augmenté de 1
    If semaine = (cettesemaine + 1) Then
    'variable x incrémentée
    x = x + 1
    'variable tablo prend valeur n(donc n° de la ligne)
    tablo(x) = n
    'variable age prend la valeur de la différence années entre aujourd'hui et date de naissance
    age(x) = Year(Date) - Year(Range("C" & n))
    ' classement dans tablo par ordre décroissant
    ' boucle de x à 2 en revenant en arrière
        For t = x To 2 Step -1
        ' si variable age(t) est plus grande que sa précedente on inverse les valeurs des 2 variables de même que celles des 2 variables tablo
            If age(t) > age(t - 1) Then
            f = age(t - 1)
            g = tablo(t - 1)
            age(t - 1) = age(t)
            age(t) = f
            tablo(t - 1) = tablo(t)
            tablo(t) = g
            End If
        Next t
    End If
Next n
' boucle sur toutes les valeurs du tablo
For d = 1 To x
' on rajoute au message à afficher après saut de ligne ,les nom, prénom, date de naissance et âge
mes = mes & Chr(10) & Range("A" & tablo(d)) & " " & Range("B" & tablo(d)) & " né(e) le  " & Range("C" & tablo(d)) & "  :  " & age(d) & " ans"
Next d
' si message est vide alors le message sera Aucun anniversaire sinon ce sera BON anniversaire à suivi du message
If mes = "" Then mes = "Aucun anniversaire" Else mes = "BON ANNIVERSAIRE à : " & Chr(10) & mes
'affichage message
MsgBox mes
End Sub


N’hésites pas à me redemander si il y a encore quelque chose d'obscur

Cdlmnt
Via
0
jean300 Messages postés 374 Date d'inscription jeudi 11 août 2016 Statut Membre Dernière intervention 13 janvier 2020 14
25 août 2017 à 09:46
Bonjour via55,
Désolé de t'ennuyer de nouveau, je souhaiterai une modification su tu me permet.
A savoir que le code s'exécute lors de la demande d'impression du document et non lors de saisie en colonne S, T, ou U
En te remerciant.
0
via55 Messages postés 14402 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 18 avril 2024 2 702 > jean300 Messages postés 374 Date d'inscription jeudi 11 août 2016 Statut Membre Dernière intervention 13 janvier 2020
25 août 2017 à 12:30
Bonjour jean

Le code ne s’exécute pas lors de la saisie en colonne S T ou U (dans lesquelles il n'y a rien d'ailleurs) mais à l'ouverture du classeur
Si tu veux qu'elle s'exécute avant impression dans ThisWorkbook tu remplaces

Private Sub Workbook_Open()
anniv
End Sub

par

Private Sub Workbook_BeforePrint(Cancel As Boolean)
anniv
End Sub

Cdlmnt
Via
0
jean300 Messages postés 374 Date d'inscription jeudi 11 août 2016 Statut Membre Dernière intervention 13 janvier 2020 14
24 août 2017 à 21:46
Tous mes remerciements via55 pour autant de gentillesse
0