le calendrier natif de Windows sans l'ocx dans userforms pour excel 64 Vallable aussi sur vba7 32

le calendrier natif de Windows sans l'ocx dans userforms pour excel 64 Vallable aussi sur vba7 32 3.6

️ Utilisation du calendrier Windows Natif dans office 64​

👥 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. suppression du theme windows pour la fenêtre créée
  3. Appel Ă  MCM_GETMINREQRECT via SendMessage
  4. Récupération de la taille minimale exacte, dépendante de/du :
  • la langue système
  • pays
  • la longueur des noms de jours/mois
  • theme windows(observĂ© sur des configs modernes)
️ Le calendrier est dimensionné au plus juste, sans troncature.
Redimensionnement dynamique après calcul dans le initialise du userform
  • SetWindowPos
    • flags utilisĂ©s :
      SWP_NOMOVE
      SWP_NOZORDER
      pour éviter le 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.

️ Donc tous les événements sont gérés dans :
UserForm_MouseDown

À l’aide de :
  • GetCursorPos(supprimĂ©)
  • MapWindowPoints(supprimĂ©)
  • MCM_HITTEST
  • [mise a jour ]suppression de l'utilisation de getcursorpos et mapwindowspoints ;on utilise desormais les points x et y de l'events userform convertis en pixel
  • Ajout de la suppression du theme windows (Obligatoire sur Winn 11)pour que le parametrage des couleurs soit effectif
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