VBA Excel activer 1 UserForm depuis un autre?
Résolu
pijaku
Messages postés
13513
Date d'inscription
Statut
Modérateur
Dernière intervention
-
pijaku Messages postés 13513 Date d'inscription Statut Modérateur Dernière intervention -
pijaku Messages postés 13513 Date d'inscription Statut Modérateur Dernière intervention -
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...)
--
Cordialement,
Franck P
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...)
--
Cordialement,
Franck P
1 réponse
-
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-
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... -
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
-
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 -
-
-