Souhaiter anniversaire (Excel 2003)
Résolu
jean300
Messages postés
382
Statut
Membre
-
via55 Messages postés 14393 Date d'inscription Statut Membre Dernière intervention -
via55 Messages postés 14393 Date d'inscription Statut Membre Dernière intervention -
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
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
6 réponses
-
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 -
Bonjour via55
Est-il possible d'afficher dans la Msgbox du plus âgé au plus jeune ?
En te remerciant. -
-
Re,
Je te remercie via55, accepte-tu de commenter le code stp car je débute avec vba.
Merci -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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
-
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.- 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
-
-
Tous mes remerciements via55 pour autant de gentillesse