Re : Fermer tous les userforms sauf...
Bonjour Manta, le Forum
Ayant une petite expérience dans les Userforms, quand je lis
"je serais amené à utiliser probablement plus de 50 userforms au total" Je défrise ! (Ceux qui me connaissent rigoleront !)
Déjà mon premier conseil, 50 Userforms, c'est la quatrième dimension, pratiquement ingérable, si en plus tu ne manges pas toutes les ressources de la machine.
En fait un application "bien faite" ne devrait avoir qu'une Dizaine (grand max) de UserForms. Il y a tellement de possibilité (des Tab Multipages, des TabStrip, de faire changer la taille du UserForm en RunTime), enfin vraiment la grosse panoplie de possibilités pour faire agir un UserForm en fonction de telles ou telles actions...
Enfin bon le HIDE n'est pas non plus conseillé, si le UserForm n'a plus d'intérêt il faut le Décharger et pas le Cacher (UNLOAD) sinon tu continues à le garder en mémoire probablement pour rien (?)
Un exemple de base :
4 UserForm (Userform1, Userform2, Userform3, Userform4)
Le Userform1 est lancé depuis un CommandButton1 sur une Feuille :
Private Sub CommandButton1_Click()
UserForm1.Show 0
End Sub
Sur ce
UserForm1, tu décharge le UserFom1 (Me) et tu lances un UserForm2 avec un CommandButton1
Private Sub CommandButton1_Click()
Unload Me
UserForm2.Show 0
End Sub
Sur le
UserForm2, tu lances avec un CommandButton1 le UserForm3 mais tu veux que le UserForm2 reste ouvert (et chargé) et que le UserForm3 ne chevauche pas le UserForm2
Private Sub CommandButton1_Click()
With UserForm3
.Show 0
.Left = 0
.Top = 0
End With
End Sub
Sur le
UserForm2 tu as un second CommandButton2 qui lance le UserForm4 Toujours sans chevauchement en Haut à Gauche, mais tu veux que le Userform3 se Décharge si il est encore ouvert :
CommandButton2 du
UserForm2:
Private Sub CommandButton2_Click()
With UserForm4
.Show 0
.Left = 0
.Top = 0
End With
End Sub
NB Dans le Module de Ce
UserForm4 tu as aussi ceci :
Private Sub UserForm_
Initialize()
If UserForm3.Visible = True Then Unload UserForm3
End Sub
Rien ne t'empêche de faire de même dans le Pricvate Module du
UserForm3
Private Sub UserForm_
Initialize()
If UserForm4.Visible = True Then Unload UserForm4
End Sub
Et ainsi de suite...
Bon Travail et bonne fêtes
@+Thierry