Heureux qu'il puisse te plaire et te dépannerMerci pour ce superbe calendrier, car j’ai cherché pratiquement dans tout le web, aussi bien anglophone que francophone, pour trouver un calendrier qui affiche en même temps des dates d’événements, je n’ai trouvé que celui là, il est d’autant plus formidable qu’il nous dispense d’Api ou de DTPicker.
Tu trouveras ci-joint le fichier quelque peu modifié pour être utilisé avec un autre USFJe sais que vous l’avez pensé pour être utilisé dans le cas où il est appelé à partir d’une cellule, mais j’ai pensé qu’il était possible de l’utiliser en l’appelant à partir d’un bouton afin d’inscrire la date dans un TextBox, ce serait très sympa si vous pouviez faire quelque chose en ce sens là, j’ai essayé plein de moyens mais en vain.
Private Sub CtrlCal_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
' Vérifie si c'est un jour spécial
If CtrlCal.BackColor = &H80FF& Then ' Jour spécial
vDate = DateSerial(Year(CDate(UsFCalendrier.MaDate)), Month(CDate(UsFCalendrier.MaDate)), CtrlCal.Caption)
'If JMsg <> vDate Then
'JMsg = vDate
Call VérifJoursSpé
CtrlCal.ControlTipText = Msg
'End If
End If
End Sub
Tout d'abord merci infiniment d'être mon béta testeurBruno, comme promis, voici un retour de test effectué sur le calendrier Feriés+Evenements :
Effectivement (pas testé), le problème est réglé, tu ne peux plus cliquer sur les jours ne faisant pas partie du mois- les jours ne correspondant pas au mois sélectionné apparaissent quand même et sont actifs (exemple concernant le mois de juin 2012 : la sélection du 6 juin semaine 23 et du 6 juillet semaine 27 ramènent tous les 2 la date du 6 juin 2012) : peut-être faudrait-il que ces boutons n'apparaissent pas (je préfère cette option mais c'est perso), ou pour le moins soient inactifs.
C'est surtout pour pouvoir cliquer sur le jour en question si on veut pouvoir le sélectionner- les évènements se déclenchent correctement au survol du jour correspondant. J'ai cru comprendre que tu avais fait en sorte que la boîte de dialogue ne se déclenche pas 2 fois de suite au survol du jour afin probablement de ne pas passer son temps à la fermer.
J'y ai bien pensé, problème, c'est que ControlTipText n'accepte pas le retour à la ligneCeci-dit, lorsque le mois comporte plus d'une date évènement, le message d'info se déclenche à nouveau lorsque tu survoles sur le jour 1, puis le jour 2 et à nouveau le jour 1.
Une idée que je te livre sans l'avoir testée (peut-être n'est-ce pas possible) : au lieu de passer par le déclenchement de boîte de dialogue pour l'affichage de l'évènement en question (boîte qu'il faut fermer une ou plusieurs fois comme expliqué ci-dessus), ramener le résultat de VérifJoursSpé dans la propriété ControlTipText du label pour afficher ce résultat : tu pourrais avoir ainsi l'info au survol du jour de l'évènement.
Peut-être bien, mais d'ici là, je serais mort et Excel ne sera peut-être plus-ton calendrier va jusqu'à l'année 2100 : attention car la fonction utilisée pour le calcul de Pâques n'est pas bonne pour l'année 2100. Donc, soit tu enlèves 2100, soit tu devras changer de fonction.
Encore mille fois merciVoilà pour ce 1er retour et bravo pour le travail présenté !
Sub CREATION_DES_JOURS()
Dim AnnéeBisextille As Boolean
Dim JOURS As Control
N°_JOUR = CDec(CDate("01/01/" & Me.ComboBox1.Text))
HAUT_IMAGE_DEPART = 10: HAUT_IMAGE = HAUT_IMAGE_DEPART
HAUTEUR_IMAGE = 19
' Calculer si l'année est bisextille
AnnéeBisextille = (Val(Me.ComboBox1.Value) Mod 4 = 0)
For j = 0 To 366 + AnnéeBisextille
On Error Resume Next
Set JOURS = Me.Controls("Frame" & Month(N°_JOUR + j)).Controls.Add("Forms.Label.1", , True)
With JOURS
.Top = HAUT_IMAGE: .Left = 0: .Width = Me.Controls("Frame" & 1).Width - 2: .Height = HAUTEUR_IMAGE
.BackStyle = fmBackStyleOpaque: .BackColor = &HFFFFFF
If Weekday(N°_JOUR + j) = 1 Or Weekday(N°_JOUR + j) = 7 Then: .BackColor = &HFFFF80
.BorderStyle = fmBorderStyleSingle
.Caption = Day(N°_JOUR + j) & " - " & Format(Left(Format(CDate(N°_JOUR + j), "ddd"), 1), ">") & " " & Worksheets("SAINTS").Cells(j + 1, 1).Value
With .Font: .Italic = False: .Bold = True: .Name = "Arial": .Size = 10: End With
End With
HAUT_IMAGE = HAUT_IMAGE + HAUTEUR_IMAGE - 1
If Month(N°_JOUR + j) <> Month(N°_JOUR + j + 1) Then HAUT_IMAGE = HAUT_IMAGE_DEPART
Next j
End Sub