Userform Calendrier avec jours fériés (sans API ni DTPicker)

  • Initiateur de la discussion Compte Supprimé 979
  • Date de début

Kim75

XLDnaute Occasionnel
Re : Userform Calendrier avec jours fériés (sans API ni DTPicker)

Bonjour Bruno, le forum,

Merci 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.

Je 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.

J’ai eu des erreurs de partout, du côté de la ScrollBar1 qui plante, du côté aussi de la couleur de fond de la date du jour qui s’immobilise lorsqu’on change de mois, sans parler de la couleur de fond des jours fériés qui se met à s’appliquer pour tous les jours de l’année, en un mot et pour ne pas tout citer, j'ai tout chamboulé.

Cordialement, Kim.
 

Pièces jointes

  • USFCalendrierAvecFériés.xls
    96.5 KB · Affichages: 193
  • USFCalendrierAvecFériés.xls
    96.5 KB · Affichages: 201
  • USFCalendrierAvecFériés.xls
    96.5 KB · Affichages: 214
C

Compte Supprimé 979

Guest
Re : Userform Calendrier avec jours fériés (sans API ni DTPicker)

Salut Kim75 ;)

Merci 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.
Heureux qu'il puisse te plaire et te dépanner :eek:

Je 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.
Tu trouveras ci-joint le fichier quelque peu modifié pour être utilisé avec un autre USF ;)

A+
 

Pièces jointes

  • Kim75_UsFCalendrierFE.xls
    146 KB · Affichages: 219

david84

XLDnaute Barbatruc
Re : Userform Calendrier avec jours fériés (sans API ni DTPicker)

Bonjour,
Bruno, comme promis, voici un retour de test effectué sur le calendrier Feriés+Evenements :
- 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.

- 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.
Ceci-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.

- 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.
Personnellement, j'avais utilisé une adaptation de l'algorythme d'Oudin ici qui donne les bons résultats sur une plage allant des années 1900 à 2400 (j'ai utilisé une formule Excel mais elle serait facilement programmable en VBA).
Voilà pour ce 1er retour et bravo pour le travail présenté !
A+
 

Kim75

XLDnaute Occasionnel
Re : Userform Calendrier avec jours fériés (sans API ni DTPicker)

Bonjour David, Bruno, le forum :)

Je te remercie bien pour cette possibilité d’utiliser le calendrier à travers un bouton de formulaire et un champ de texte, aussi, si Bruno le permet naturellement, j’ai une proposition à formuler si cela est possible, c’est de rendre inactif le click sur les jours grisés, ceux ne faisant pas partie du mois affiché.

On appelle le calendrier, on actionne la ScrollBar pour aller à Juillet, on clique par exemple (par mégarde) sur le jour grisé du 30.06.2012, et c’est le 30.07.2012 qui s’inscrit, cela parait logique que le calendrier interprète ce click du 30.06.2012 comme étant un click du 30.07.2012 puisque ce n’est pas Juin qui est affiché mais Juillet, ce serait bien s’il y avait un moyen de parer à cette confusion.

Cordialement, Kim.
 
Dernière édition:

david84

XLDnaute Barbatruc
Re : Userform Calendrier avec jours fériés (sans API ni DTPicker)

Re Bruno,
j'ai testé sur le fait de ramener l'évènement dans le controltiptext et le principe fonctionne chez moi :
Déclarer Msg en Public, puis dans le module de classe (évènement MouseMove) :
Code:
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
J'ai fait cela vite fait donc il y a peut-être des adaptations à apporter ailleurs mais c'était pour étudier le principe.
A+
 
C

Compte Supprimé 979

Guest
Re : Userform Calendrier avec jours fériés (sans API ni DTPicker)

Salut David84

Bruno, comme promis, voici un retour de test effectué sur le calendrier Feriés+Evenements :
Tout d'abord merci infiniment d'être mon béta testeur ;)

- 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.
Effectivement (pas testé), le problème est réglé, tu ne peux plus cliquer sur les jours ne faisant pas partie du mois ;)
J'ai mis ces jours dans un gris encore plus clair

- 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.
C'est surtout pour pouvoir cliquer sur le jour en question si on veut pouvoir le sélectionner

Ceci-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.
J'y ai bien pensé, problème, c'est que ControlTipText n'accepte pas le retour à la ligne
Alors, je ne te raconte pas lorsque que pour le même jour tu as un dizaine d'infos :p
Perso, j'ai donc conservé la MsgBox

-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.
Peut-être bien, mais d'ici là, je serais mort et Excel ne sera peut-être plus :D

Voilà pour ce 1er retour et bravo pour le travail présenté !
Encore mille fois merci

La mise à jour du fichier a été faite sur le premier post

Au plaisir :cool:

A+
 

YANN-56

XLDnaute Barbatruc
Re : Userform Calendrier avec jours fériés (sans API ni DTPicker)

Bonjour Bruno, et Bravo pour ton boulot, comme à la belle contribution des participants,

Je vais me montrer un peu "Pique-assiette", mais la tentation est trop grande.;)

Histoire d'occuper l'inactivité de ma retraite; je m'amuse à construire une bidouille parallèle.

L'action qui va suivre sera de mettre les jours dans un groupe (Module de Classe),
et selon; venir fouiller dans une base de données (x) où l'on aura mis ce que l'on voudra.

L'ajout des jours fériés est sous le coude, et le calcul de la date de pâques aussi.
Quant à l'alerte concernant les anniversaires, du genre "Attention! L'anniversaire de "x" est après-demain"
je n'ai qu'à retrouver une bidouille que j'ai déjà faite via vba.

Je ramène donc mon grain de sel pour une petite aide:

Il y a une erreur dans le premier jour de l'année (Exp.: S et S, abréviations du jour sont doublées).

Je ne parviens pas à m'en défaire! Alors Merci par avance si....

Amicalement,

Yann

P.S. Pardon Bruno, je ne suis pas assez doué pour savoir entrer dans tes codes, et pouvoir contribuer.
 

Pièces jointes

  • PERPETUEL_26_06.xls
    147 KB · Affichages: 195
Dernière édition:
C

Compte Supprimé 979

Guest
Re : Userform Calendrier avec jours fériés (sans API ni DTPicker)

Salut YANN-56

Très, très joli petite appli ;) voir même géniale :p

Voici la correction due j'ai trouvé qui à l'aire de fonctionner
VB:
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

Par contre il y a un GROS SOUCIS pour toutes les autres année que 2012 !?

Vu ce que tu arrives à faire en code, il te faut absolument 2 utilitaires que perso j'utilise
sinon ton code devient vite imbuvable ;)
  1. Smart Indenter VBA v3.5 permet d'indenter le code et donc d'en permettre une meilleur lecture
    Cet utilitaire se trouve ici : Office Automation Ltd. - Smart Indenter
  2. VBA MZ-Tools 3.0 permet de faire un tas de chose sur le code, par exemple son analyse
    cet utilitaire se trouve ici : MZ-Tools - Productivity Tools for Visual Studio .NET (C#, VB.NET), Visual Basic and VBA
A+
 
Dernière modification par un modérateur:

YANN-56

XLDnaute Barbatruc
Re : Userform Calendrier avec jours fériés (sans API ni DTPicker)

Re Bruno,

J'apprécie encore une fois ta gentillesse à mon égard.:):):)

Mais je ne pense pas que la détermination de l'année bissextile ou non intervienne dans la procédure, puisque le nombre de jour du mois de Février est toujours correct suivant l'année.
(Le pauvre Auguste n'a sa fête que tous les quatre ans)

Je pense que le problème est simplement un manque de logique.
Ayant mis 366 jours de base par an, j'ai pensé ne pas aller plus loin par un "Resume Next". Ce qui est faux!

Car, comme cela n'engendre pas une erreur, la boucle continue, et vient écrire le premier jour
de l'année suivante à la place de celui de l'année présente. (Le nouveau mois étant redevenu le "1" => Substitution)

Je vais revoir ce point et sans doute tenir compte, soit du caractère bissextile de l'année,
ou du nombre de jours en Février. Je vais tester pour trouver le plus simple.

Je garde en mémoire tes liens relatifs aux utilitaires que tu me conseilles.
Trouillard de nature, je vais attendre un peu avant d'y aller... Mais j'y viendrai certainement plus tard.

Amicalement, et à suivre,

Yann
 

Kim75

XLDnaute Occasionnel
Re : Userform Calendrier avec jours fériés (sans API ni DTPicker)

Bonjour Bruno, le forum,

Je ne vous remercierai jamais assez pour votre calendrier, et je dois dire que ce n’est pas lui seulement qui est superbe, mais vous aussi ;)

J’avoue que je suis un peu gêné de revenir encore une fois pour vous redemander la même adaptation avec votre dernière version, appel à partir d’un bouton dans un Usf avec la date dans un TextBox, je vous prie de m’en excuser :eek:

Cordialement, Kim.
 

YANN-56

XLDnaute Barbatruc
Re : Userform Calendrier avec jours fériés (sans API ni DTPicker)

Bonjour à tous,

Kim, dont j'apprécie beaucoup la politesse:
Tu t'adresses à Bruno, mais en parlant de "Dernière version"
Je pense cependant que tu ne parles pas de mon dernier envoi.
Ton vouvoiement prête à confusion...:confused:

Bruno, j'ai rectifié le tir et cela semble bien marcher. (Voir P.J.)

"Imbuvable" mon Code!!! Non! Mais!!!:eek:
Moi qui fais l'effort d'avoir des noms de variable explicites... Pfff:p

Amicalement,

Yann

P.S. Je vais maintenant me farcir la gestion des fériés fixes et changeants.
Que de plaisir à faire mumuse!
 

Pièces jointes

  • PERPETUEL_27_06.xls
    156 KB · Affichages: 181

Kim75

XLDnaute Occasionnel
Re : Userform Calendrier avec jours fériés (sans API ni DTPicker)

Hello Yann, le forum,

Thanks my dear :)

Oui Yann, en fait Bruno a eu la gentillesse de nous adapter le calendrier pour être utilisé à partir d’un bouton dans un Usf avec la date dans un TextBox,

Et comme il nous a fait part de la dernière mise à jour (désactivant le click sur les jours grisés) qu’il vient de faire dans son message du 25/06/2012 19h19 :

Salut David84
...
La mise à jour du fichier a été faite sur le premier post
...
A+

J’ai pensé qu’il voudrait peut être nous faire aussi la même adaptation à partir de la mise à jour (désactivant le click sur les jours grisés), en le remerciant par avance :)

Cordialement, Kim.
 

YANN-56

XLDnaute Barbatruc
Re : Userform Calendrier avec jours fériés (sans API ni DTPicker)

O.K. Kim, je comprends mieux.

Ma bidouille n'est qu'une autre façon d'aborder la création de calendrier,
et n'a rien à voir avec la construction de Bruno.

Bruno m'a tellement apporté ici, comme sur autres fils, que l'idée de compétition est impensable.
Comme je l'ai dit précédemment, je ne suis qu'un intrus qui abuse de son savoir.;)

Je ne doute qu'il te donnera bonnes réponses à ta demande.

De ton coté, regarde à mettre "Locked = True " sur le contrôle grisé.
Ce qui va annihiler les évènements suite à son Click, car il sera devenu inaccessible.

Amicalement,

Yann
 

Kim75

XLDnaute Occasionnel
Re : Userform Calendrier avec jours fériés (sans API ni DTPicker)

Salu Yann, le forum,

Lool les labels des jours grisés ne sont pas toujours les mêmes, autrement ta proposition ferait bien l’affaire, à moins que je me trompe :p

En fait, ces jours sont grisés parce qu’ils ne font pas partie du mois affiché, et lorsqu’on change de mois, leurs labels peuvent ne plus êtres grisés :)

Amicalement, Kim.
 

YANN-56

XLDnaute Barbatruc
Re : Userform Calendrier avec jours fériés (sans API ni DTPicker)

Re,
Il faudrait faire une boucle sur tous les contrôles de l'USF,
en ne retenant que ceux qui ont cette couleur grise.

Je ne vais pas aller plus loin, car je pense qu'il est préférable d'attendre la réponse de Bruno.:)

Amicalement, en te souhaitant bonne suite, comme il saura te la donner,

Yann
 

Statistiques des forums

Discussions
312 178
Messages
2 085 984
Membres
103 079
dernier inscrit
sle