XL 2010 Pb affichage userform

FG72

XLDnaute Junior
Bonjour à tous,
D'abord, tous mes voeux pour cette nouvelle décennie :)
j'ai un problème d'affichage avec une configuration de poste avec 2 écrans: j'ouvre un classeur contenant un userform sur l'écran principal et si je veux le faire glisser sur le second écran, le userform (non modal) reste sur l'écran principal !

merci par avance de votre aide.

Bonne journée,
François
 

patricktoulon

XLDnaute Barbatruc
re
en examinant ton fichier je crois que tu n'a pas saisi la différence entre vbcomponent et object userform(astuce jeux module/object userform en mode modale )
et donc ta fonction calendrier dans userform est obsolète dans le sens ou des que l'userform est unloadé elle vaut plus rien
donc quand je clique sur un jour la date ne peut pas s'inscrire dans la cellule bien évidement
 

FG72

XLDnaute Junior
le fichier en pj n'est qu'un exemple qui était en modal à l'origine et que j'ai passé en non modal pour mon pb de déplacement non synchronisé d'un écran à l'autre. Dans mon fichier réel, je ne gère pas de la même façon.
 

patricktoulon

XLDnaute Barbatruc
oui les "S" entre crochets c’était parce que j'ai barré ce que tu dois enlever
mais javais réédité mon post
cela dit tu a bien un autre problème plus important que je cite dans ma dernière réponse



un fonction dans un userform
1 soit est utilisée comme fonction d'un module classe (le module userform en est un!!) et on peut utiliser le return a condition quelle soit public !!!!
2 soit elle utilisée dans l'userform(object) POUR L'USERFORM!!!!!


en bref ,en gros , tout bonnement CA NE PEUT FONCTIONNER COMME TEL !!
 

patricktoulon

XLDnaute Barbatruc
un calendrier selon moi doit etre modal car on attend une reponse une date ou annulation

DONC!!
un tout petit exemple tout rikiki de rikiki
on commence par son apel
dans le selection_change du sheets
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim x As Variant '(soit false soit la valeur du bouton cliqué dans frmcal)
x = frmCal.calendrier(Target)
If x <> False Then Target = x
End Sub

dans le userform j'ai mis 3 label avec pour valeur 1 2 et 3

VB:
Public valeur As Variant
Public Function calendrier(cel)
Dim ptopx#
With frmCal
.StartUpPosition = 0
'coefficientpoint to pixel sans api
    With ActiveWindow.ActivePane
        ptopx = (.PointsToScreenPixelsY(Cells.Height) - ActiveWindow.ActivePane.PointsToScreenPixelsY(0)) / Cells.Height
    End With
        .StartUpPosition = 0
        .Left = (ActiveWindow.ActivePane.PointsToScreenPixelsX(cel.Left) / ptopx) + cel.Width ' a droite de la cellule
        .Top = (ActiveWindow.ActivePane.PointsToScreenPixelsY(cel.Top) / ptopx) + cel.Height ' a  l'angle bottom-right de la cellule
        .Show
   calendrier = valeur
Unload Me
End With
End Function



Private Sub Label1_Click()
valeur = 1: Me.Hide
End Sub

Private Sub Label2_Click()
valeur = 2: Me.Hide
End Sub

Private Sub Label3_Click()
valeur = 3: Me.Hide
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode=0 then valeur = False: Me.Hide
End Sub
bon le code n'ai pas compliqué
j'explique :
j'apel lans le sheets la fonction calendrier de frmcal
a ce moment precis!!!!!!!!!!!!!!! le userform n'est pas affiché
on appelle donc la fonction calendrier du module CLASSE !!!!!!!!! frmcal et non la fonction du userform frmcal llllll
ce qui te permet de faire tout ce que tu veux a l'userform avant de l'afficher dans cette fonction

pour le coup on en profite pour le mettre a startupposition=0 et lui donner son left et top (
Attention IL N'EST TOUJOURS PAS AFFICHE)

apres ca on fait le show
l'userform s'affiche enfin


ATTENTIION!!
a partir du show tout le reste du code de la fonction est supendu (c'est ca l'astuce)

dans le userform on a une variable public (
valeur)
les click sur les labels donne a la
variable valeur leur caption et!!!!! hide le userform

comme le userform est invisible par hide il est donc toujours la mais!!!! inactif
donc la fonction calendrier qui c'etait arétée au ".show" continue donc de s'executer

on donne a la fonction calendrier la aleur de la variable valeur (rigolo non ?)

et tout en fin de fonction on unload le userform


résultat l'apel qui avait été lancé par le sélection_change reçois la réponse

NOM PAS DE L OBJECT USERFORM.CALENDRIER!!! MAIS !!!!!! de module classe frmcal.calendrier

voila comment on utilise un userform en tant que module classe et object userform dialog MODAL en meme temps et que l'on utilise une fonction dans un userform comme si elle était dans un module autre tout en étant maintenu en attente par le "HIDE" du userform

je te montrerais plus tard comment on classe des control sans module classe( requis pour classer x controls(pour un événement unique) dans le cas d'un pseudo calendrier) quand tu aura compris le fonctionnement de cette fonction calendrier ;)

demo
demo3.gif

fichier joint avec l'exemple
annalyse bien le code par rapport a tout ce que je viens de dire
;)
 

Pièces jointes

  • exemple interface modal pour FG72.xlsm
    15.5 KB · Affichages: 9
Dernière édition:

FG72

XLDnaute Junior
Eh bien ! merci pour ce cours magistral. C'est maintenant beaucoup plus clair pour moi.
En fait, j'avais pompé du code sans trop creuser. Je n'avais pas perçu la nuance entre la fonction du module de classe et la fonction du userform.

bon, j'ai mis un peu de temps, mais je vais pouvoir reprendre mon fichier et surtout comprendre ce que je fais !
Merci beaucoup pour le temps que tu m'as consacré et pour ta patience.
C'est Noël :)
 

patricktoulon

XLDnaute Barbatruc
re
bonsoir mille excuse j'ai du partir en inter chez un client cet aprem
bon du coup en rentrant j'ai repris ton fichier en exemple et je t'ai refait ton calendrier au complet
clique droit n'importe ou dans le sheets calendrier et chois une date

voila voila
c'est une version ultra simplifiée de ce que tu pourrais trouver si tu cherche un peu
;)
 

Pièces jointes

  • Calendrier modal pour fg72.xlsm
    28.6 KB · Affichages: 17

Discussions similaires

Statistiques des forums

Discussions
312 299
Messages
2 086 991
Membres
103 420
dernier inscrit
eric.wallet46