[RESOLU] Multi-utilisation calendrier autonome

cathodique

XLDnaute Barbatruc
Bonjour:),

Il y a de cela un moment que Si... (que je salue;)) m'avait aidé en me proposant un calendrier autonome.

Aujourd'hui j'ai besoin de votre aide pour résoudre 3 problèmes liés à l'utilisation de ce calendrier.

  1. utliser ce calendrier avec plusieurs userforms. J'ai défini une variable public UserActif qui récupère le nom de l'userform actif. Dans la macro suivante le code plante alors que si je mets le nom de l'userform en dur, il n'y a aucun problème.
    VB:
    Sub UserFormAlign()    'positionnement userform à côté cellule active
    
    ' 1 inch = 72 points for usually 96 or 120 dpi
       Dim X#, Y#    ', w#, h#
       X = GetDeviceCaps(GetDC(0), 88)   ' / 72
       Y = GetDeviceCaps(GetDC(0), 90)   ' / 72
    
       With UCalendrier
          .StartUpPosition = 0
          .Left = (ActiveWindow.PointsToScreenPixelsX(UserActif.Tdate.Left * X) * 1 / X) + 500 '****plante ici
          .Top = (ActiveWindow.PointsToScreenPixelsY(UserActif.Tdate.Top * Y) * 1 / Y) + 150 '****et là
       End With
    End Sub
  2. Comment faire pour afficher le calendrier, dans le même userform pour 2 textboxs ou plus
  3. comment positionner le calendrier juste sous la textbox
En espérant avoir bien exposé mon problème.

En vous remerciant par avance.
 

Pièces jointes

  • Positions Calendrier.xlsm
    23.5 KB · Affichages: 55

cathodique

XLDnaute Barbatruc
Rebonjour Roland_M;),

Je te rassure que c'est bien ton exemple du post#9 que j'utilise.
En fait, Dans les 2 userforms il y a un code pour ajuster l'userform et tous les contrôles en plein écran.
Et dans cette situation le calendrier n'est plus à la place comme dans ton fichier (pile poil sur la textbox).
J'ai donc triché en ajoutant des valeurs à ta procèdure
VB:
Sub UserFormAlign()    'positionnement userform à côté cellule active
   With UCalendrier
    .StartUpPosition = 0
    .Left = UserActif.Left + PosCtrlBoxLeft 'ici ex: +100
    .Top = UserActif.Top + PosCtrlBoxTop  'ici ex: +30
   End With
End Sub
Je me demandais si on pouvait avoir les positions après l'affichage de l'userform.
Sinon, je me contenterai de mes manipulations (foireuses).

J'ai peut-être eu tort d'exposer en partie mon problème?!!!

Merci beaucoup.

Edit: toutes mes excuses, j'ai fait du n'importe quoi avec le code corrigé par Roland_M, tout est parfait. Ci-joint fichier ça pourrait aidé.

Encore désolé, je suis vraiment confus.
 

Pièces jointes

  • Positions Calendrier_ModifRol2.xlsm
    30.4 KB · Affichages: 27
Dernière édition:

cathodique

XLDnaute Barbatruc
Les amis je crois que je vais vous saouler.

Le code de Roland_M ;);),fonctionne très bien.
Je n'ai pas bien illustré mon problème dans le fichier du post#1.
Dans mon fichier réel, la textbox sur trouve dans une frame (Frame1)
et du coup, l'affichage du calendrier s'effectue en haut à gauche.

Une solution svp.

Merci beaucoup.

Bonne soirée.
 

Pièces jointes

  • Positions Calendrier_ModifRol3.xlsm
    25.5 KB · Affichages: 28

Roland_M

XLDnaute Barbatruc
re

voir celui-ci !?

tu me dis ce que tu en penses !?

EDIT: attention je vois que tu as mis version 3 mais ce n'est pas le même !

tu en demandes un peu trop !
il faut se rendre compte de la complexité il faudrait faire appel à des apis et dans ce cas ce n'est plus autonome !

l'idéal serait de rester simple ! le calendrier au milieu de l'écran !
perso dans les miens le calendrier se positionne sur la croix de l'userf appelant !
ici j'ai fait en sorte qu'il se place sur tes textbox
mais si maintenant on place dans des fram ou autres c'est une tout autre approche personnalisée
 

Pièces jointes

  • Positions Calendrier_ModifRol3.xlsm
    80 KB · Affichages: 55
Dernière édition:

Si...

XLDnaute Barbatruc
Re
j'ai essai le nouveau de Si... pour faire des modif sur la taille,
je me suis retrouvé avec un plantage magistral ! impossible d'en sortir !?
obligé de refermer la session et tout redémarrer !?

Une petite remarque (sans aucune ironie :cool:) : quand on veut jouer l'apprenti sorcier ;), on risque de gros dégâts !

Cela m'est aussi arrivé plus d'une fois avec ce calendrier d'où mes avertissements donnés plus haut.
La plupart du temps le classeur se rechargeait après une attente plus ou moins longue.
 

cathodique

XLDnaute Barbatruc
re tous :)
un exemple sans apis avec une classe & tag si beaucoup de box avec date plus simple on peut mettre dans un frame eventuellement en manipulant "parent"
ps j'ai mis mon Cal:eek: plus simple a adapter avec le tien
Merci beaucoup Laetitia;),
Très gentille, je regarderai un peu plus tard ta proposition.
Je dois ouvrir une discussion pour résoudre un problème sur lequel je sèche depuis 2 jours.
J'ai écumé pas mal de discussions sans trouver de piste.

Je reviendrai aux nouvelles, promis.

Bonne soirée:):)
 

cathodique

XLDnaute Barbatruc
Re ChTi160,;)

Je peux m'amuser à ajouter des années dans le code Laetitia90;).
Je voulais juste lui dire qu'elle avait limité son calendrier en le bornant dans son code.
Sinon, son code répond bien à mes attentes (afficher le calendrier sur le contrôle appelant).

Merci beaucoup. Bonne soirée.
 

laetitia90

XLDnaute Barbatruc
re tous:) :):)
merci Jean marie;);) pour le bôbôgue pas vu l'incidence que cela pouvait avoir
moi !!!tu sais manipuler les dates pas trop mon "truc":(
attention cat..;);) pas exempt d'autres bogues c'est du "brut" en prenant du code a droite & gauche pour construire ce cal pour faire trés court & mega simple :rolleyes:
 

Roland_M

XLDnaute Barbatruc
Bonjour tout le monde,

@cathodique

si ça t'intéresse j'ai modifié mon calendrier pour se positionner sur l'objet appelant !
même à l'intérieur de plusieurs cadres ou autres . . .
voir ici:
https://www.excel-downloads.com/threads/date-picker-refuse-de-fonctionner.130232/#post-763811

EDIT:
j'en profite pour mettre la routine que j'ai crée pour trouver la Pos X/Y
d'un objet sur un userf, y compris s'il est imbriqué dans des cadres frame

on passe l'userform(fmMe) puis le contrôle(Obj)
en retour on obtient X/Y de l'objet
Code:
'       ROUTINE STD INIT POSITION X/Y OBJET SUR USERFORM
'-------------------------------------------------------
Public Sub UserformInitPosObjAppelant(fmMe As Object, Obj As Object, X@, Y@) 'X/Y en retour
Y = fmMe.Top + Obj.Top + 24 '<bar.userf
X = fmMe.Left + Obj.Left + 6 '<
'ceci remonte sur tous les parents
Dim CtrlX As Object: Set CtrlX = Obj
While CtrlX.Parent.Name <> fmMe.Name
  Y = Y + CtrlX.Parent.Top + 4
  X = X + CtrlX.Parent.Left + 2
  Set CtrlX = CtrlX.Parent
Wend
Set CtrlX = Nothing
End Sub
 
Dernière édition: