Autres [Résolu]Affichage userform sur cellule ou activX version simplifiée a tester

patricktoulon

XLDnaute Barbatruc
bonjour suite a deux discussions ressentes j'ai repris ma méthode et je l'ai simplifiée
normalement avec cette méthode on est dédouané du calcul et prise en charge du freezepane et des scrollbars H et V

aucune Api window ou gdi !!
aucun chiffre en dur dans le code !!!
aucun calcul des scroll ou du freezepane
et l'userform est contraint dans le périmètre de la fenêtre application si il le dépasse
vous voulez bien tester
cellule a jumeler
demo2.gif


activx a jumeler

demo3.gif
 

Pièces jointes

  • placement usf.xlsm
    29.4 KB · Affichages: 27
Dernière édition:

Dranreb

XLDnaute Barbatruc
Oui en gros.
Mais mon calendrier sait montrer une date initiale spécifiée à ma méthode Saisie, ou en initialisant sa propriété Value. Ta propriété ladate est en lecture/écriture comme ma propriété Value, quoique assumée différemment. Je ne sais si ça va avoir un effet de l'initialiser.
 

patricktoulon

XLDnaute Barbatruc
re
parce que pour certaines parties du code j'en pige pas une miette


et j'aime bien comprendre ce que je fait et utilise

et vu le comportement l'ors de la fermeture du mien par rapport au tien j'en conclu que quelque chose ou peut être même le userform reste chargé dans le tien


je crois me souvenir dans une discussion sur un autre forum qu'appeler une sub dans un userform avait pour effet de loader le userform
loader ne veut pas dire afficher !!
son premier état en fait qui n'a pas d’événement dispo
load
initialyse
activate


mon problème avec ma version c'est l'annulation
j'explique
je le lance et je change d'avis et je le ferme par la croix

la cellule doit se retrouver avec la valeur?:
  1. soit vide si elle était vide
  2. soit avec la date quelle avait

et visiblement je n'y arrive pas avec ta méthode pourtant le code de ma version d'aujourd'hui est relativement simple

regarde bien le comportement queryclose quand on bloque ou débloque la ligne bloquée a l’intérieur de cet événement
en testant sur une cellule vide ou avec date

j'ai bien une solution mais elle ne me plait pas
 

Pièces jointes

  • new cal 2020.xlsm
    40 KB · Affichages: 7

patricktoulon

XLDnaute Barbatruc
bon ben il s’avère effectivement que ton userform calendrier reste chargé
j'ignore a quel moment tu le décharge

c’était la solution qui ne me plaisait pas mais finalement comme je l’opère dans le queryclose c'est pas vraiment un soucis

VB:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    Dim t
    If choice = True Then ladate = RESULT Else ladate = obj.Value
    Cancel = Not Cancel: Me.Hide
    t = Timer: Do: DoEvents: Loop While Timer - t < 0.01
    Unload Me
End Sub

par contre je ne pige absolument rien
normalement toute les variables et propriétés du userform instruites dans le userform devraient être vidées après le unload
et je constate que ce n'est pas le cas
tout simplement en essayant même une minute après
Code:
Sub test()
MsgBox calendar.ladate
MsgBox calendar.Left
End Sub
alors est ce que le unload se fait après un hide ou pas that the question
 

Dranreb

XLDnaute Barbatruc
Le mien je ne le décharge jamais, sauf si ça m'a été demandé par Windows ou par l'application ou par un Unload UFmCalend d'un code externe. Il n'y a après tout qu'une seule info qui détermine son état, c'est la Private LaDate As Date qui peut à tout moment se changer ou se récupérer via la propriété Value.
 

patricktoulon

XLDnaute Barbatruc
re
tu ne pense pas que c'est to mutch de garder chargé un userform avec (tout ce que tu change dedans dans le activate ou initialyse et même dans le load et autre evenements ) pour rien ??
d'autant plus que (et la je suis en plein test) le unload me en interne ne décharge pas l'userform et ses variables ou propriétés
je vais ouvrir une autre discussion a ce sujet ca me parait important quand même d'y penser ;)
 

Dranreb

XLDnaute Barbatruc
Avec en tout et pour tout dans un UserForm ceci :
VB:
Option Explicit
Public PropX
Ce code dans un module standard :
VB:
Option Explicit

Sub Test()
UserForm1.PropX = "X"
MsgBox UserForm1.PropX
UserForm1.Show
MsgBox UserForm1.PropX
End Sub
Et il se passe exactement ce à quoi je m'attendais :
1) — Il affiche "X" puisque c'est ce qu'on vient de mettre dans cette propriété,
2) — Il affiche l'UserForm,
3) — If affiche rien, puisqu'il n'y a pas eu moyen de fermer l'UserForm autrement que par la croix, ce qui le décharge, et qu'il est donc obligé d'en charger un nouvel exemplaire par défaut pour pouvoir en afficher la propriété PropX, laquelle est vide.

Tout se passe comme si l'exemplaire par défaut était toujours implicitement déclaré Public UserForm1 As New UserForm1.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Non, je ne te suis toujours pas.
La propriété est bien sûr conservée s'il n'y a pas de Unload de l'UserForm. De même que les valeurs des contrôles d'ailleurs.
Si un Unload est exécuté tout est effacé. Il serait même plus exact de dire que tous éléments de mémoire y étant consacrés sont désattribués et utilisables pour autre chose.
 
Dernière édition:

Statistiques des forums

Discussions
312 215
Messages
2 086 338
Membres
103 192
dernier inscrit
Corpdacier