XL 2010 Sélectionner un UserForm

Magic_Doctor

XLDnaute Barbatruc
Bonsoir,

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

Ça plante drastiquement.

Comment s’y prendre ?
 
Dernière édition:
C

Compte Supprimé 979

Guest
Salut Magic_Doctor,

Pas besoin de "Flag" 😂

Voici un exemple
1) Tu cliques sur le SpinButton, l'USF apparait
2) Tu fermes l'USF et tu refais opération 1

@+
 

Pièces jointes

  • Magic_Doctor_Exemple.xlsm
    19.5 KB · Affichages: 11

Magic_Doctor

XLDnaute Barbatruc
Bonsoir,

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.

J'ai essayé la solution de Rouge, ça plante.
 

Rouge

XLDnaute Impliqué

"J'ai essayé la solution de Rouge, ça plante. "


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é.

N'est-ce pas ça?
 

patricktoulon

XLDnaute Barbatruc
Bonjour a tous
pourquoi ne pas mettre ton SpinButton dans l'usf tout simplement 🤔

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

Capture1.JPG



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 :
demo6.gif
 

Pièces jointes

  • uf piloté par spin sur feuille.xlsm
    22.9 KB · Affichages: 5

Magic_Doctor

XLDnaute Barbatruc
Bonjour,

Ç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.

Bon après-midi à tous.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
315 103
Messages
2 116 233
Membres
112 695
dernier inscrit
ben44115