Ne plus voir un UserForm

P

PF

Guest
Bonjour à tous, ma squestion risque de vous paraître facile voir stupide mais malheureusement c'est ainsi.

J'ai crée un Userform (appelons le 1), dedans l'utilisateur doit remplir différents champs, et si il ne le fait pas et qu'il appuit sur Ok, j'avais un beug, erreur 13.
Pour éviter le beug, j'ai crée un Userform (appelons le 2), indiquant à l'utilisateur qu'il doit remplir tous les champs. (2, ne doit pas se superposer en entier à 1) Et j'aimerai lorsque l'utilisateur à lu le message qu'il appuit sur Ok pour revenir à 1 et que 2 disparaisse.

J'ai bien essayé :
Userform2.hide

Mais il reste à l'écran.
Donc j'ai essayé Unload Me (pour le supprimer de la mémoire, mais même constat).

Que me conseillé vous ?

Merci d'avance
 
P

PF

Guest
Bonsoir Laurent.

Que veux tu dire par modal ??? (Je débute sur VBA, et je ne connais pas ..., y a d'ailleurs plein de choses que je ne connais pas).

Mais, moi je veux que mon Userform1 reste toujours à l'écran et que ce soit le 2, celui qui indique Attention ..., qui disparaisse.

Hier, j'ai essayé avec 2 Userform, en effet sa fonctionne facilement (même sans le 0), mais dès que je mets mon code avec sa foire, pourquoi ???
Enfin, si tu ne peux pas me dire pourquoi le principal et de me résoudre ce problème.

Nb: Mets tu 0 également pour l'userform 2 ???

Bonne soirée, à +

Patrick
 
L

LaurentTBT

Guest
Bonjour Patrick

Bon, c'est pas facile à expliquer, alors le plus simple, c'est de prendre les explications de l'aide de VBA:

"Lorsqu'un objet UserForm est modal, l'utilisateur doit fournir des informations ou fermer l'objet UserForm pour pouvoir utiliser toute autre partie de l'application. Aucun code suivant n'est exécuté tant que l'objet UserForm est masqué ou déchargé. Bien que d'autres feuilles de l'application soient désactivées lorsqu'un objet UserForm est affiché, les autres applications ne le sont pas.

Lorsqu'un objet UserForm n'est pas modal, l'utilisateur peut afficher d'autres feuilles ou fenêtres sans fermer cet objet.

Les feuilles non modales ne sont pas affichées dans la barre des tâches et ne figurent pas dans l'ordre de tabulation de la fenêtre.

Note Si vous tentez d'ouvrir un objet UserForm qui possède la propriété ShowModal dans Microsoft Office 97, une erreur au moment de l'exécution est générée car Office 97 affiche uniquement les objets UserForm de type modal. Office 97 ignore la propriété ShowModal et affiche l'objet de façon modale."


Voilà, alors je résume avec mes mots:
Jusqu'à Excel97, un UserForm ne pouvait être QUE MODAL. La propriété "ShowModal" n'est apparue que dans les versions suivantes.
Depuis, par défaut, un UserForm est aussi affiché en mode MODAL, sauf si on spécifie le contraire (ce qui peut se faire en ajoutant le 0: TonUserForm.Show 0)

Dans ton cas, ton premier UserForm s'affichait donc en étant MODAL.
Cela veut dire que, à part ce qui le concerne, toutes les autres feuilles ne peuvent être utilisées. Cependant, le deuxième s'affiche bien, car la demande provient du premier userform. En revanche, lorsque tu cliques sur le bouton OK du 2ème userform, sa fermeture n'est pas prise en compte, car seules les demandes émanant du premier sont faisables.

Pas sûr du tout d'être très clair, si tu as compris, cela va tenir du miracle!

Concrètement, dans ton cas: mets ton premier Userform en mode NON MODAL, de manière à pouvoir ensuite travailler sur le second indépendament. En revanche, il vaut mieux laisser le second en mode MODAL, de manière à ne pas laisser l'utilisateur modifier le premier sans avoir cliquè sur le bouton OK du second.


Une remarque, qui permettra peut-être finalement de mieux comprendre: Si on affiche un userform MODAL, on ne peut pas travailler sur la feuille excel. On ne peut que utiliser les contrôles de l'usf.
En revanche, si on affiche un USF NON MODAL, on peut très bien le laisser dans son coin, et travailler directement sur la feuille Excel.

Voilà, Patrick, bon courage...
Laurent.

PS: pour être complet, où presque, si tu crées un userform et que, à un moment, tu l'utilises en NON MODAL, et si ensuite tu ouvres ton appli sur une version d'avant Excel98, tu auras une erreur.
Il existe des possibilités pour contourner ce problème, dans le cas d'utilisation simultanée de plusieurs userforms sous Excel 97, mais c'est souvent un casse-tête.
 
S

Sylsyl

Guest
Salut,

Laurent: j'ai deja essaye plusieurs fois d'expliquer la difference entre modal/non-modal et j'ai jamais franchement reussi, par contre je trouve que TON explication (pas l'extrait de l'aide) est claire comme de l'eau de roche. Je me permet donc de faire un super copier/coller, comme ca je pourrais la ressortir si besoin est. Tu n'y vois pas d'inconvenient ?

Patrick: ma premiere reponse sur ce fil etait la bonne (enfin je crois), a la ligne 42 (ligne vierge inclus) de ton USF1 tu as un application.screenupdating=false.
Lorsque tu supprime cette ligne, il n'y a plus de probleme de "trainee" sur ton USF2. (et dans ce cas les 2 usf peuvent rester "modal").

Joyeux noel et bonne annee.
A++, Sylsyl.
 
L

LaurentTBT

Guest
Salut à tous.

Sylsyl, pas de problème pour reprendre l'explication.

C'est vrai, sur l'explication de l'aide de VBA, je me suis longtemps demandé si la deuxième phrase que j'ai citée :"Aucun code suivant n'est exécuté tant que l'objet UserForm est masqué ou déchargé" ne devait pas être remplacée par: "Aucun code suivant n'est exécuté tant que l'objet UserForm n' est pas masqué ou déchargé"

Sinon, nien vu pour le problème de Patirck. S'il faut vraiment désactiver la mise à jour pour le premier Usf, on peut laisser sa ligne, et en revanche, mettre à la procédure du deuxième Userform:
Private Sub CommandButton1_Click()
Unload Me '(Le Hide précédent peut être omis)
Application.ScreenUpdating = True
Application.ScreenUpdating = False
End Sub

Bonne soirée.
Laurent.
 
E

EMG

Guest
salut le forum

j'ai pas tout suivi mais le code VBA fait ça, ainsi les barres de défilement horizontal et vertical sont opérationel en gardant a l'écran la boîte de dialogue

Sub AfficherUserForm()
Verif_VersionXL ' UserForm1.Show vbModeless
End Sub

'Par défaut, chaque UserForm est Modal. Cela signifie qu'il doit
'être fermé avant de pouvoir faire autre chose. Dans Excel 2000,
'cependant, vous pouvez rendre un UserForm non Modal en écrivant
'vbModeless comme argument pour la méthode Show. Voici un exemple
'
'Détermine la version d'Excel de l'utilisateur, puis exécutez une
'Fonction séparée si la version est Excel 2000 (ou ultérieur).
'Le code suivant montre comment :
'Puisque la Fonction USFORM_VbModeless_OK n'est pas exécutée
'dans Excel 97, elle ne causera pas d'erreur de compilation.

Public Function Verif_VersionXL()
If Val(Application.Version) >= 9 Then
USFORM_VbModeless_OK
Else
UserForm1.Show
End If
End Function

Public Function USFORM_VbModeless_OK()
Dim Frm As Object
Set Frm = UserForm1
Frm.Show vbModeless
End Function
 

Discussions similaires

Réponses
18
Affichages
1 K

Statistiques des forums

Discussions
314 017
Messages
2 104 582
Membres
109 083
dernier inscrit
Stef06