VBA Excel activer 1 UserForm depuis un autre?

Résolu/Fermé
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 20 juil. 2011 à 16:40
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 21 juil. 2011 à 13:59
Bonjour,

Je me bas avec les propriétés "modales" de deux userforms... Grrr!!!

Le principe de ce que je souhaites réaliser:
J'ai deux Userform. Lorsque je lance le fichier, les 2 userforms s'affichent côte à côte. Jusqu'ici pas de souci!
A l'aide d'un bouton sur l'un, je souhaite activer le deuxième, et réciproquement, tout en laissant les deux apparants!
Bien sur, Hide aurait été très utile, mais je souhaite vraiment garder les 2 userform visibles à l'écran.

Est ce possible?
Si oui comment?

Merci beaucoup de vos contributions et/ou conseils avisés...

Excel 2003 (peu important car >97, mais bon j'le mets quand même...)
A voir également:

1 réponse

aquarelle Messages postés 7140 Date d'inscription dimanche 8 avril 2007 Statut Modérateur Dernière intervention 25 mars 2024 1 302
20 juil. 2011 à 19:22
Bonsoir,

Je ne sais pas si cela te conviendra mais tu peux passer tes userforms en non modal :
UserForm1.Show 0
UserForm2.Show 0


Il te suffira de cliquer sur la userform de ton choix pour l'activer.
Cela permet aussi de travailler sur ta feuille de calcul sans fermer tes userforms

Bonne soirée
-1
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
21 juil. 2011 à 08:57
Salut aquarelle et merci.

En fait, je connais la propriété modale des USF.

Cependant, ce que je souhaite faire c'est une activation automatique de l'USF2 à partir de l'USF1 sans que l'utilisateur n'ait à intervenir...

Quelque chose comme :
Dans l'USF1 :
Private Sub CommandButton1_Click()
'Mon code de procédure ici
UserForm2.Activate
End Sub
Private Sub UserForm_Activate()
MsgBox "Coucou l'USF1 est bien activé"
End Sub
Dans l'USF2 :
Private Sub UserForm_Activate()
MsgBox "Coucou l'USF2 est bien activé"
End Sub
Private Sub CommandButton1_Click()
'Mon code de procédure ici
UserForm1.Activate
End Sub

Alors j'ai essayé de remplacer : UserForm1.Activate par : UserForm1.Show 1 , userForm1.Show 0, mais j'obtiens toujours le message d'erreur : "vous ne pouvez pas afficher un USF en mode modal gna gna gna..."

Bah, si c'est pas possible, j'en masquerai un sur les deux avec Hide...
0
aquarelle Messages postés 7140 Date d'inscription dimanche 8 avril 2007 Statut Modérateur Dernière intervention 25 mars 2024 1 302
21 juil. 2011 à 11:14
Salut,

Pour moi cela fonctionne si je mets :
Dans l'USF1 :
Private Sub CommandButton1_Click()
'Mon code de procédure ici
Load UserForm2
UserForm2.Show 0
End Sub
Private Sub UserForm_Activate()
MsgBox "Coucou l'USF1 est bien activé"
End Sub


Dans l'USF2 :
Private Sub UserForm_Activate()
MsgBox "Coucou l'USF2 est bien activé"
End Sub
Private Sub CommandButton1_Click()
'Mon code de procédure ici
Load UserForm1
UserForm1.Show 0
End Sub


Et pour lancer l'affichage des 2 UserForms :
Sub Auto_Open()
Load UserForm1
UserForm1.Show 0
Load UserForm2
UserForm2.Show 0
End Sub
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
21 juil. 2011 à 12:10
Merci encore de t'intéresser à mon souci.
Le problème de "Load" c'est qu'il recharge mon Usf en mémoire. Or dans ma procédure Initialise, je remets à zéro certaines de mes variables public. Donc, j'ai peur que Load ne me remette systématiquement à zéro des variables qui évoluent au fur et à mesure de l'utilisation de mes userform.

J'ai donc fini par trouver une solution alternative. Je la livre ici, ça peux servir...

1- remplacer les appels des procédures : Private Sub UserForm_Activate() par : Sub UserForm1_Activate() (remplacer UserForm1 par le nom de votre UserForm)

2- les appeler depuis l'autre Userform par :
CallByName UserForm1, "UserForm1_Activate", VbMethod
3- dans chaque userform placer un textbox (que l'on rendra invisible)

Alors le code global donne :
Dans l'USF1 :
Private Sub CommandButton1_Click()
CallByName UserForm2, "UserForm2_Activate", VbMethod
With UserForm2.TextBox1
    .Visible = True
    .SetFocus
    .Visible = False
End With
End Sub

Sub UserForm1_Activate()
    MsgBox "USF 1 activé"
End Sub

Dans l'USF2 :
Private Sub CommandButton1_Click()
CallByName UserForm1, "UserForm1_Activate", VbMethod
With UserForm1.TextBox1
    .Visible = True
    .SetFocus
    .Visible = False
End With
End Sub

Sub UserForm2_Activate()
    MsgBox "USF 2 activé"
End Sub

Ci-joint un classeur exemple

Ca pourrait faire une astuce CCM non?
Bonne journée à toi et merci encore
0
aquarelle Messages postés 7140 Date d'inscription dimanche 8 avril 2007 Statut Modérateur Dernière intervention 25 mars 2024 1 302
21 juil. 2011 à 13:56
Ca pourrait faire une astuce CCM non?
Ben, vi...allez au travail ;)

Bonne journée à toi aussi et de rien pour mon aide, finalement peu utile ^^
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
21 juil. 2011 à 13:59
Ben, vi...allez au travail ;)
J'm'y mets dès que j'aurais fini ce boudiou de classeur!!!...
Si si ton aide fut utile car sans toi, j'me s'rais pas cassé le derche davantage et j'aurais utilisé simplement hide...
0