Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…