️ Utilisation du calendrier Windows
👥 Membres de l'équipe pour la réalisation de ce projet
@Rheeem@patricktoulon
Objectif de ce projet
Pour les puriste Utiliser le calendrier natif de Windows (SysMonthCal32) sans le contrôle OCX DatePicker, qui n’est pas compatible Office 64 bits, tout en conservant :- le rendu Windows natif
- la gestion automatique de la langue système
- la navigation complète (mois / années)
- une intégration fluide dans Excel (Range, Shape, UserForm…)
Le tout sans hook, sans Do/Loop, sans ActiveX, 100 % API Win32.
****************************************************************************************************************
Principe général
Le calendrier est créé dynamiquement via l’API Windows :
- CreateWindowExA
- classe : SysMonthCal32
- style : child window
- parent : Frame d’un UserForm
Création du calendrier
- Création initiale avec une taille nulle (0x0)
- Appel Ă MCM_GETMINREQRECT via SendMessage
- Récupération de la taille minimale exacte, dépendante :
de la langue système
du pays
de la longueur des noms de jours/mois
Redimensionnement dynamique
- SetWindowPos
- flags utilisés :
SWP_NOMOVE
SWP_NOZORDER
évite flicker, repaint intempestif et prise de focus inutile
Gestion des événements (sans hook IMPORTANT)
Le calendrier étant une child window,
les messages souris remontent jusqu’au UserForm.
️ Tous les événements sont gérés dans :
UserForm_MouseDown
À l’aide de :
- GetCursorPos
- MapWindowPoints
- MCM_HITTEST
- suppression de l'utilisation de getcursorpos et mapwindowspoints ;on utilise desormais les points x et y de l'events userform convertis en pixel
- détection du jour cliqué
- gestion du changement de mois
- édition de l’année
- fermeture automatique après sélection
Aucun subclassing
Aucun hook
Aucun DoEvents bloquant
Positionnement automatique (3 modes)fonction issue du claendar 5.0
Le calendrier s’auto-positionne intelligemment selon l’appelant :1. Cellule Excel (
- gestion des volets figés
- prise en compte du zoom
- conversion points → pixels → DPI
- TextBox
- Label
- CommandButton
- gestion des conteneurs (Frame, MultiPage, Page)
- compatibilité avec les feuilles
- récupération précise de la position écran
Utilisation (callback unique)
Une seule fonction publique :
DateValueX(obj,langue)
Compatible avec :
- cellule Excel
- TextBox
- Label
- CommandButton
- Shape
- une Date
- ou une chaîne formatée selon le contexte
Avantages de la solution
Compatible Office 32 & 64 bitsAucun OCX / ActiveX
Langue Windows respectée automatiquement
DPI aware
Zéro hook
Zéro boucle bloquante
UX identique au calendrier Windows natif
Limitation assumée
La langue du contrôle dépend exclusivement des paramètres régionaux Windows.C’est une contrainte native du contrôle SysMonthCal32.
(Des contournements visuels sont possibles, mais hors périmètre de cette version.)
Version : 3.2 – 03/01/2026
- Auteur
- Patricktoulon
- Version
- 3.2