le calendrier natif de Windows sans l'ocx dans nos userformspour excel 64 et 32 bits

le calendrier natif de Windows sans l'ocx dans nos userformspour excel 64 et 32 bits 3.4

️ 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
Le calendrier devient une fenêtre enfant invisible pour Excel, mais parfaitement intégrée au UserForm.

Création du calendrier

  1. Création initiale avec une taille nulle (0x0)
  2. Appel Ă  MCM_GETMINREQRECT via SendMessage
  3. 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
️ Le calendrier est dimensionné au plus juste, sans troncature.

Redimensionnement dynamique
  • SetWindowPos
  • flags utilisĂ©s :

    SWP_NOMOVE
    SWP_NOZORDER
    évite flicker, repaint intempestif et prise de focus inutile
Le UserForm s’adapte automatiquement à la taille réelle du calendrier (DPI-aware).

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
Ce mécanisme permet :
  • 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
2. ContrĂ´les UserForm
  • TextBox
  • Label
  • CommandButton
  • gestion des conteneurs (Frame, MultiPage, Page)
3. Shapes / DrawingObjects
  • compatibilitĂ© avec les feuilles
  • rĂ©cupĂ©ration prĂ©cise de la position Ă©cran
Le calendrier ne sort jamais de l’écran Excel.


Utilisation (callback unique)

Une seule fonction publique :

DateValueX(obj,langue)

Compatible avec :
  • cellule Excel
  • TextBox
  • Label
  • CommandButton
  • Shape
Retourne :
  • une Date
  • ou une chaĂ®ne formatĂ©e selon le contexte

Avantages de la solution​

Compatible Office 32 & 64 bits
Aucun 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
Retour