J’ai un UF (du nom « USF_DMS ») qui s’affiche en non modal. J’actionne un SpinButton qui se trouve sur la feuille (et non pas sur l’UF). Après chaque incrément ou décrément du SpinButton, je voudrais sélectionner l’UF.
Dans un module standard j’ai déclaré : Public USF_DMS_Visible As Boolean 'ce qui s'appellerait, je crois, un "Flag"
Dans le module de l’UF : Private Sub UserForm_Initialize()
USF_DMS_Visible = True
Puis :
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
USF_DMS_Visible = False
Enfin, dans la macro du SpinButton : If USF_DMS_Visible = True Then USF_DMS.Select
Merci pour vos réponses.
Je me suis bien relu, pour voir si j'avais bien expliqué le problème.
Je reprends en d'autres termes.
Un UF est ouvert (via un CommandButton), donc présent, en non modal. Le SpinButton ne sert pas à afficher l'UF.
Sur la feuille il y a plusieurs ActiveX dont un SpinButton. Avec cet objet je peux incrémenter ou décrémenter une valeur. Du reste un SpinButton sert à ça. Si j'actionne le SpinButton, forcément l'UF n'est pas sélectionné. Ce que je voudrais, c'est qu'à chaque clic sur le SpinButton l'UF soit sélectionné. En d'autres termes :
- je clique sur le SpinButton ---> l'UF est sélectionné
- je reclique sur le SpinButton, fatalement l'UF est désélectionné et instantanément il est à nouveau sélectionné en fin de clic.
Le SpinButton est toujours présent et opérationnel sur la feuille, raison pour laquelle j'avais pensé à un Flag pour signaler si l'UF est affiché ou pas.
Bizarre, aurai-je mal compris?
Si le USF est affiché, en cliquant n'importe où sur la feuille, il se désélectionne.
si je clique sur le Spin-bouton, il est sélectionné.
c'est presque ça
on ne m’écoute jamais a moi
j'ai parlé dans la discussion de l'userform mot de passe de "sub classing"
si vous preniez le temp de lire voir de poser des questions si c'est pas compris hein??????
EXEMPLE : MON USERFORM S APPELLE "UFpilotéparspin"( je sais c'est pas très recherché)
mais pour le coup on a compris l'intention hein!!
dans la Feuil1 on met un spinbutton
on le regle a 1 pour max et 0 pour le min !!!!!
c'est pas compliqué jusque là tout le monde suit?
bon alors on continue
dans le module de la Feuil1 nous allons mettre ceci:
VB:
Dim uf As UFpilotéparspin
Private Sub Worksheet_Activate()
Set uf = New UFpilotéparspin
End Sub
Private Sub Worksheet_Deactivate()
Set uf = Nothing
End Sub
c'est pas bien compliqué a recopier ça hein
bon allons dans le module du userform maintenant et mettons lui ceci
VB:
Public WithEvents spin As MSForms.SpinButton
Private Sub spin_Change()
If spin.Value = 0 Then Me.Hide Else Me.Show 0
End Sub
Private Sub UserForm_Initialize()
Set spin = Feuil1.SpinButton1
End Sub
là non plus c'est pas très difficile a recopier hein
et là vous me dite "et ensuite"
ben je vous répond c'est fini
a partir de la a chaque fois que la feuill1 s'active si le pinbutton vaut 0 userform hide sinon show
et on libère la classe au désactivateur de feuil1
on a ainsi un userform intégré en feuil1 piloté par le spinbutton qui lui meme est piloté dans une instance de classe dans le userform et non dans la feuille
oui je sais ça fait bobo tète
donc
a gauche userform hide
a droite userform show 0
voila
démonstration :
Ça y est, j'ai trouvé. Rouge m'avait apporté la réponse, à un détail près :
VB:
If USF_DMS_Visible = True Then USF_DMS.Show
mais ça plantait...
Comme l'UF est NON MODAL, en écrivant ceci :
VB:
If USF_DMS_Visible = True Then USF_DMS.Show 0
ça marche !
Pourquoi tout ça ?
L'UF reçoit uniquement des valeurs gérées par le SpinButton. Il n'y a aucun contrôle sur cet UF. On peut fermer l'UF en appuyant sur la touche clavier "Esc", mais pour que ça marche, il faut que l'UF soit sélectionné (ou si vous préférez, qu'il y ait le "focus" sur l'UF). Or, quand on clique sur le SpinButton, fatalement l'UF n'est plus sélectionné, d'où, à chaque clic (ou action) sur le SpinButton :
VB:
If USF_DMS_Visible = True Then USF_DMS.Show 0
Ainsi, on peut fermer à tout moment l'UF en appuyant sur la touche "Esc" (astuce qui m'a plu) sans être contraint de sélectionner manuellement l'UF avant d'appuyer sur la touche "Esc".
Pourquoi ne pas mettre le SpinButton dans l'UF ? Tout simplement parce que le SpinButton gère des valeurs sur la feuille, mais quand l'UF est présent sur l'écran, on peut y voir des informations supplémentaires qui dépendent évidemment du SpinButton. Ça paraît tordu, mais au final ça ne l'est pas.