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