VBA USF: masquer temporairement un userform sans passer par UserForm_Activate

  • Initiateur de la discussion Initiateur de la discussion Guy_M
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Guy_M

XLDnaute Occasionnel
Bonjour,

J'ai un petit problème avec le masquage et l'affichage d'un userform. J'ai joint un petit fichier de simulation pour que vous puissiez tester.

Mon userform est grand et donc masque une partie de l'écran. A un moment, je pose une question à propos de la feuille Excel sélectionnée et pour que l'utilisateur puisse bien voir la feuille, je souhaite masquer le userform puis le réafficher.

Bêtement, je pensais qu'avec un "me.visible = True/False" marcherait. Mais VBA pour Excel ne le permet pas. Je doit donc utiliser le couple (infernal) me.hide et me.show. Gros souci, chaque me.show appelle la procédure évènementielle UserForm_Activate et donc tout ce qui vient après n'est pas exécutée immédiatement mais quand je ferme le userform.

J'ai tracé tout ça avec une série de debug.print, je simule le comportement souhaité de ma procédure avec le bouton "BoutonTestHideShow" dans le userform
Code:
LancerLeTest_Clic:début
UserForm_Initialize:debut
ActionInitiale
UserForm_Initialize:fin
UserForm_Activate
BoutonTestHideShow_Click:début
UserForm_Activate
BoutonFermer_Click:debut
BoutonFermer_Click:fin
BoutonTestHideShow_Click:fin
LancerLeTest_Clic:fin

Marche à suivre pour reproduire cette trace dans la fenêtre d'exécution : cliquer sur "Lancer le test" puis sur "Test hide/show" (vous pouvez cliquer plusieurs fois) et pour finir sur "Fermer".

Que puis-je faire pour afficher/masquer le userform sans que UserForm_Activate ne s'exécute ?

Par avance, je vous remercie de vos réponses.
Guy
 

Pièces jointes

Re : VBA USF: masquer temporairement un userform sans passer par UserForm_Activate

Bonjour,

essaye comme ceci, pas testé avec tes "Debug.Print", pas mon truc...

Code:
Dim b As Boolean
Private Sub BoutonFermer_Click()
Debug.Print "BoutonFermer_Click:debut"
Unload Me 'Décharge le formulaire en mettant le contenu à zéro (aux valeurs par défaut)
Debug.Print "BoutonFermer_Click:fin"
End Sub
Private Sub BoutonTestHideShow_Click()
Debug.Print "BoutonTestHideShow_Click:début"
Me.Hide
    MsgBox (Me.Name & " masqué pour voir les feuilles de calcul")
MsgBox ("BoutonTestHideShow_Click: Userform visible : " & Me.Visible)
If Not Me.Visible Then b = True: Me.Show
Debug.Print "BoutonTestHideShow_Click:fin"
b = False
End Sub
Private Sub UserForm_Activate()
If b Then Exit Sub
Debug.Print "UserForm_Activate"
End Sub
Private Sub UserForm_Initialize()
Debug.Print "UserForm_Initialize:debut"
ActionInitiale
Debug.Print "UserForm_Initialize:fin"
End Sub
Private Sub ActionInitiale()
MsgBox "Action initiale"
Debug.Print "ActionInitiale"
End Sub

bon après midi
@+
 
Re : VBA USF: masquer temporairement un userform sans passer par UserForm_Activate

Bonjour,

J'ai trouvé une première solution de contournement en déplaçant le userform hors de l'écran, je remplace Me.Hide par :
Code:
Haut = Me.Top
Gauche = Me.Left
Me.Top = -Me.Width
Me.Left = -Me.Height
puis Me.Show par
Code:
Me.Top = Haut
Me.Left = Gauche

Ça marche mais je ne trouve pas ça très élégant.

A bientôt
Guy
 
Re : VBA USF: masquer temporairement un userform sans passer par UserForm_Activate

Merci Pierrot93 et phlaurent55 pour vos réponses

Malheureusement, Pierrot93 ta proposition ne change rien à l'affaire. Mais pourquoi "Me.Visible = True" est interdit ?

A bientôt
Guy
 
Re : VBA USF: masquer temporairement un userform sans passer par UserForm_Activate

salut

voir Si... cela peut convenir

Dans l'Usf en ShowModal = False
Code:
Private Sub Bouton_Click()
   Me.Hide
End Sub

pour revoir le formulaire : clic en A1 (ou autre et pour tout onglet)
Dans ThisWorkbook
Code:
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal R As Range)
  If R.Address = "$A$1" Then UserForm1.Show
End Sub
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour