[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
Bonjour Roland_M;),

Toi aussi tu es un champion des calendriers autonomes.

Là, je me demande si le calendrier que j'utilise est de toi ou de Si..., j'ai un doute.

Merci beaucoup, ça fonctionne. Mais comment faire pour les textboxs?

Sur l'un des userforms il y a 2 textboxs qui doivent recevoir une date et sur l'autre 1 textbox qui pourrait avoir n'importe que nom.

Comment contourner ce problème?

Et comment positionner le calendrier juste en-dessous de la textbox et ce quelle que soit sa position.

Merci beaucoup, je t'en suis reconnaissant.
 

Roland_M

XLDnaute Barbatruc
re

ce n'est pas de moi !
mais j'ai un calendrier complet qui fait tout ça !
sur cellule/dans un module ou dans un userform avec autant de textbox que souhaités et peu importe leur noms !
évidemment le calendrier est plus lourd mais tout est dans un seul userform calendrier et sans api (pure autonome !)
 

cathodique

XLDnaute Barbatruc
Merci Roland_M,;)

Très gentil de ta part. Normalement, je dois avoir tes calendriers autonomes.
Je n'ai pas eu le temps de les étudier plus que tu en as proposé plusieurs moutures.

En fait, j'ai besoin d'un calendrier tout simple mais je vais tester celui que tu me proposes.

Sait-on jamais, il pourrait me convenir.

Ma gratitude.:):)

edit: C'est 2 là, je ne les ai pas merci beaucoup
 

cathodique

XLDnaute Barbatruc
Bonjour Laetitia90:):),

Très très gentil de ta part. J'ns quelques apprécie votre aide.
Cependant, je ne suis pas un chevronné comme vous.
Ne vous fiez pas à la date de mon inscription. Ce n'est que quelques année plus tard que je me suis mis au VBA.
En plus, je ne code pas tout le temps, ce n'est qu'occasionnel.

Je voudrais utiliser un calendrier autonome dans un même fichier,
dans 2 userforms, pour l'un dans 2 textboxs et l'autre 1 textbox.
avec une autre contrainte, l'affichage du calendrier juste en-dessous de la textbox.

Pour l'ouverture du calendrier à partir des 2 userforms, Roland_M m'a orienté j'avais mal instancié (c'est comme ça qu'on dit?) la variable public qui renvoie le nom de l'userform. Mais le code plante dans une procédure du calendrier à cause du nom des textboxs. Je ne vois pas comment résoudre ce 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(UserActifTextBox1.Left * X) * 1 / X) + 500 'plante ici
      .Top = (ActiveWindow.PointsToScreenPixelsY(UserActif.TextBox1.Top * Y) * 1 / Y) + 150   'plante ici
   End With
End Sub
nb: Initialement le calendrier s'affichait à côté de la cellule. J'ai adapté à ma façon pour textbox

Merci.
 

Roland_M

XLDnaute Barbatruc
re

si tu veux t'amuser voir ton fichier modifié (une autre façon de faire !? on peut toujours tout modifier adapter . . .)
ici modif pour position UserfCal et saisie date !

tu recherches les var suivantes déclarées !
Public UserActif As Object, DateCal As Date
Public PosCtrlBoxTop!, PosCtrlBoxLeft!
 

Pièces jointes

  • Positions Calendrier_ModifRol.xlsm
    30.2 KB · Affichages: 66

cathodique

XLDnaute Barbatruc
Mon cher Roland_M:):):),

Tu renforces mon avis. Je savais que tu étais un AS des calendriers autonomes.
Et pas rien que ça. Vraiment le Top:cool::cool:. Tu es un pro du codage.
C'est plus que parfait, c'est exactement le résultat escompté.
Je te remercie infiniment.

Très Bonne journée.;);)
 

Roland_M

XLDnaute Barbatruc
Bonjour,

content pour toi !

quand à un pro du codage, non ! pour des novices forcément j'ai tout de même travaillé !
mais tout ceci c'est grâce à des pointures (dont je n'arriverai jamais à la hauteur)

dans le désordre . . .
Job75 ! Dranreb ! Cisco ! Roger2327 ! Dull, Victor21, Jnp, Jcgl, Pierrot, Staple1600, JeanPierre, PierreJean, Tibo, Chris, Robert, Phlaurent55, tototiti2008, Modeste, DoubleZero . . .

sans oublier ces deux là sur leur site:
Jacques Boisgontier, Didier FOURGEOT [myDearFriend!]

que les autres me pardonnent, car évidemment j'en oublie, mais je n'ai pas tous les noms en tête !
encore un grand merci à eux tous !

EDIT:
on les retrouve dans la liste des membres !
d'ailleurs j'en profite pour signaler que l'on ne peut lister qu'une seule page !?
on ne peut pas lister la suite !?




bonne journée !
 
Dernière édition:

Si...

XLDnaute Barbatruc
Bon_jour

C'est bien moi qui propose ce calendrier en précisant que je n'en suis pas l'inventeur (merci à lui) ; je le modifie à ma sauce au fur et à mesure*.

À la recherche du point perdu … sur un écran étant loin d'être de tout repos avec tous les paramètres à considérer que je préfère agir selon le cas étudié*.

Dans ton problème, tu as 2 critères, le formulaire et le contrôle appelant. Deux variables publiques peuvent suffire. J'utilise de plus en plus une particulière mise déjà à notre disposition et nommée Tag.

C'est ce que je fais dans le fichier joint.

*tout comme Roland ;), je m'inspire des modèles trouvés ici ou là, en essayant de les adapter de la façon qui me semble la plus simple (avec les changements intervenants dans les versions d'Excel). Je suis aussi prudent quant à l'utilisation des API qui peuvent poser de gros problèmes très difficiles à corriger tant leur programmation est pointue.
Je m'efforce de ne donner que des exemples qui ne se veulent pas généraux dans leur fond et leur forme.

édit :
J'en profite pour redire que
« Je regrette de voir rarement, sinon jamais, la proposition ''avoir sous les yeux la fenêtre des propriétés (F4) permet de simplifier grandement des programmations "» !
 

Pièces jointes

  • Position d'un calendrier(vba).xlsm
    28.2 KB · Affichages: 46
Dernière édition:

cathodique

XLDnaute Barbatruc
Bonjour Si... :),

Dans mon premier message j'avais bien mis les 3 points (Si 3 points de suspension).
(si j'ai bien compris).

Vraiment content de te "revoir". Il est vrai que tu avais déjà mentionné le Tag des contrôles.
Pour être honnête, je n'ai encore compris son utilisation.
Pour certains tout est limpide pour d'autres beaucoup moins ou pas du tout.
Tout est question de niveau (académique et intellectuel) et de temps consacré au VBA.

C'est très gentil de ta part de me répondre. En effet, depuis que tu m'a proposé le calendrier
je l'utilise dans mes petits projets mais que j'utilisais que pour une textbox.
Là, j'ai voulu aller plus sans avoir les compétences et connaissances requises.

Merci pour ton fichier joint. Mais pourquoi le calendrier à rapetisser (image)
upload_2018-3-22_17-33-12.png


Roland_M (que je salue ;)), m'a été d'une grande aide et je n'ai pas voulu abuser de sa gentillesse.

Dans mes userforms, j'ai mis un code pour ajuster les dimensions des contrôles et l'userform pour un affichage plein écran avec le code ci-dessous et je triche pour afficher le calendrier le plus proche de la textbox appelante en ajoutant des valeurs (*)
VB:
Sub UserFormAlign()    'positionnement userform à côté cellule active
   With UCalendrier
    .StartUpPosition = 0
    .Left = UserActif.Left + PosCtrlBoxLeft '*
    .Top = UserActif.Top + PosCtrlBoxTop '*
   End With
End Sub

Ci-dessous code pour ajustement userform (trouver sur le net, où? quand? Auteur? je ne m'en souviens plus)
VB:
Private Sub UserForm_Activate()
   Dim ctl As Control
   Dim ratiow As String
   Dim ratioh As String

   ratiow = Application.Width / Me.Width
   ratioh = Application.Height / Me.Height
   Me.Left = 0
   Me.Top = 0
   Me.Width = Application.Width
   Me.Height = Application.Height
   For Each ctl In Me.Controls
      ctl.Left = ctl.Left * ratiow
      ctl.Top = ctl.Top * ratioh
      ctl.Width = ctl.Width * ratiow
      ctl.Height = ctl.Height * ratioh
      ctl.Font.Size = ctl.Font.Size * ratioh
   Next
End Sub
Voilà le problème est posé dans son intégralité. Plus que tu aimes bien faire les choses à ta sauce.
Je te reconnais ces compétences. J'ai encore beaucoup à apprendre. Mais aurai-je encore tout le temps?!!!

Merci beaucoup pour votre temps et vos compétences que vous partagez gracieuse.

Bonne soirée.
 

Roland_M

XLDnaute Barbatruc
re

mais pourquoi ne gardes tu pas celui que je t'ai arrangé ?

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 !?

que voulais tu faire d'autre ! dans celui que tu as mis et que j'ai modifié tout fonctionne bien !?
 

Statistiques des forums

Discussions
312 097
Messages
2 085 260
Membres
102 844
dernier inscrit
atori2