Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
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 !
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
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.
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 !!
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
fichier joint avec l'exemple
annalyse bien le code par rapport a tout ce que je viens de dire
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
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
Bonjour Patrick,
je découvre ce nouveau cadeau ce matin. Merci infiniment, ça correspond parfaitement à ce que je souhaitais mettre en place.
Bonne journée
Ce site utilise des cookies pour personnaliser le contenu, adapter votre expérience et vous garder connecté si vous vous enregistrez.
En continuant à utiliser ce site, vous consentez à notre utilisation de cookies.