Créer une msgbox anniversaire à partir d'une liste de nom et date

gaara35

XLDnaute Nouveau
Bonjour,

Mon problème semble assez simple mais je suis bien incapable de me débrouiller seul !

Dans mon fichier excel, j'ai la première colonne qui indique le nom de la personne, la seconde colonne qui indique sa date de naissance au format 01/01/1990.

Je veux créer un bouton en bas de ce tableau, lorsque je clique sur ce bouton une MSGBOX apparaîtrait et me donnerait la liste des anniversaires à venir dans la semaine ou dans le mois, avec le nom et la date des personnes concernées.

j'ai mis mon fichier exemple en pj.

si quelqu'un a une solution !

Cordialement

Yvan:confused:
 

Fichiers joints

job75

XLDnaute Barbatruc
Re : Créer une msgbox anniversaire à partir d'une liste de nom et date

Bonsoir gaara35, hello chère ânesse :)

Une MsgBox ne permet pas un affichage de qualité sur plusieurs colonnes.

Voyez le fichier joint avec un Userform et une ListBox de 4 colonnes.

La 4ème colonne est masquée et permet d'effectuer un tri :

Code:
Sub Anniversaires()
Dim t, i&, dat As Date, n&
t = [A1].CurrentRegion.Resize(, 4)
For i = 2 To UBound(t)
  If IsDate(t(i, 3)) Then
    dat = CDate(t(i, 3))
    dat = DateSerial(Year(Date), Month(dat), Day(dat))
    If dat >= Date And dat < Date + 30 Then
      n = n + 1
      t(n, 1) = t(i, 1): t(n, 2) = t(i, 2)
      t(n, 3) = CDate(t(i, 3)): t(n, 4) = dat
    End If
  End If
Next
If n Then
  With [AA:AD].Resize(n)
    .Value = t
    .Sort [AD1], xlAscending, Header:=xlNo 'tri sur 4ème colonne
    UserForm1.ListBox1.List = .Value
    .ClearContents
  End With
End If
UserForm1.Show
End Sub
PS: il y a à boire et et à manger dans vos "dates" en colonne C.

Certaines sont bien des nombres mais d'autres sont des textes :rolleyes:

Ma macro les traite les unes comme les autres.

A+
 

Fichiers joints

Dernière édition:

job75

XLDnaute Barbatruc
Re : Créer une msgbox anniversaire à partir d'une liste de nom et date

Re,

La macro précédente ne va pas si l'on est en décembre.

Il faut alors rechercher aussi les anniversaires de janvier de l'année suivante.

Utilisez donc cette macro ;

Code:
Sub Anniversaires()
Dim t, i&, dat As Date, dat1 As Date, dat2 As Date, n&
t = [A1].CurrentRegion.Resize(, 4)
For i = 2 To UBound(t)
  If IsDate(t(i, 3)) Then
    dat = CDate(t(i, 3))
    dat1 = DateSerial(Year(Date), Month(dat), Day(dat))
    dat2 = DateSerial(Year(Date) + 1, Month(dat), Day(dat))
    If dat1 >= Date And dat1 < Date + 30 Then
      n = n + 1
      t(n, 1) = t(i, 1): t(n, 2) = t(i, 2)
      t(n, 3) = dat: t(n, 4) = dat1
    ElseIf dat2 < Date + 30 Then
      n = n + 1
      t(n, 1) = t(i, 1): t(n, 2) = t(i, 2)
      t(n, 3) = dat: t(n, 4) = dat2
    End If
  End If
Next
If n Then
  With [AA:AD].Resize(n)
    .Value = t
    .Sort [AD1], xlAscending, Header:=xlNo 'tri sur 4ème colonne
    UserForm1.ListBox1.List = .Value
    .ClearContents
  End With
End If
UserForm1.Show
End Sub
Fichier (2).

Edit : précision évidente, si vous voulez les anniversaires de la semaine remplacez les deux 30 par 7.

A+
 

Fichiers joints

Dernière édition:

gaara35

XLDnaute Nouveau
Re : Créer une msgbox anniversaire à partir d'une liste de nom et date

Merci à tous pour vos solutions, je vois que vous avez bien compris ma problématique ! je vais pouvoir mettre en pratique ce que je ne pouvais toucher que dans mon imagination ;)

Yvan :cool:
 

gaara35

XLDnaute Nouveau
Re : Créer une msgbox anniversaire à partir d'une liste de nom et date

Bonjour à nouveau,

Finalement je reviens vers vous ! la macro marche très bien dans le fichier joins au message de job75, mais ne marche pas dans le fichier dans lequel j'ai voulu la dupliquer. Je n'ai pas réussi à comprendre cette histoire de ''colonne masquée'' et je n'arrive pas à me dépanner tout seul.

En pièce jointe le fichier sur lequel je bloque avec la macro incluse qui va direct en mode débogage..

Yvan
 

Fichiers joints

job75

XLDnaute Barbatruc
Re : Créer une msgbox anniversaire à partir d'une liste de nom et date

Bonjour gaara35, 00, le forum,

Bah si vous ne créez pas un UserForm contenant une ListBox comment voulez vous que ça marche ?!!!

Ci-joint votre fichier complété.

Allez dans VBA, double-clic sur UserForm1, puis clic droit sur la LisBox => Propriétés.

Voyez alors les propriétés ColumnCount et ColumnWidths.

A+
 

Fichiers joints

gaara35

XLDnaute Nouveau
Re : Créer une msgbox anniversaire à partir d'une liste de nom et date

Merci à nouveau pour ton aide Job75 !
Il ne faut pas m'en vouloir je ne suis vraiment pas spécialiste de VBA ! c'est pas simple ! en tout cas maintenant tout semble marcher Nickel !

Yvan
 

job75

XLDnaute Barbatruc
Re : Créer une msgbox anniversaire à partir d'une liste de nom et date

Re,

Pour finir, on peut se servir de la 4ème colonne de la ListBox.

En l'affichant et/ou avec cette macro dans l'UserForm (clic droit sur UserForm1 => Code) :

Code:
Private Sub ListBox1_Click()
MsgBox "Dans " & ListBox1.List(ListBox1.ListIndex, 3) - Date & " jour(s)..."
End Sub
Elle se déclenche quand on clique dans la ListBox.

Fichier (2).

A+
 

Fichiers joints

Discussions similaires


Haut Bas