Info sur la notion Modal / Non Modal

L

lolo

Guest
Rebonjour à toutes et à tous,

Je n'arrive pas à bien comprendre les notions de modal - non modal pour les userform, et surtout les implications que ça a dans la manipulation des userform.

Savez-vous où je peux trouver de la doc la dessus ? (j'ai rien dans mon bouquin VBA et l'aide en ligne VBA est très pauvre sur le sujet...).

Merci d'avance à ceux qui pourront m'aider.

lolo
 
E

EMG

Guest
Salut lolo et le Forum

Voila un petit code qui fait ça, pour avoir l'information sur Modal ou vbModeless dans l'éditeur VBE sélectionne vbModeless et presse la touche "F1" pour ouvrir l'aide d'Excel


'G.Moriceau - janvier 2004 pour XLD

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 '-----> ici le nom de ton UserForm
End If
End Function

Public Function USFORM_VbModeless_OK()
Dim Frm As Object
Set Frm = UserForm1 '-----> ici le nom de ton UserForm
Frm.Show vbModeless
End Function

Sub VisualVBA_Click()
Application.VBE.MainWindow.Visible = True
Application.VBE.MainWindow.WindowState = 2
End Sub

'ainsi le formulaire reste afficher a l'écran et permet
'l'utilisation des barres de défilement Horizontal et vertical
'alors tu peu continuer a travailler sur la feuille de calcul en cours

@+ Gérard
 
@

@+Thierry

Guest
Salut Lolo, le Forum

Voici des bases pour les UserForms :

La notion Modal / Non Modal signifie :

Mode Modal :
Un objet UserForm est toujours modal par défaut, il en résulte que l'utilisateur doit toujours répondre avant d'utiliser une autre partie de l'application. Aucun autre code ne s'exécutera tant que l'objet UserForm ne sera pas masqué ou déchargé. Bien que les autres feuilles de l'application soient désactivées pendant l'affichage d'un objet UserForm, les autres applications ne le sont pas.


Mode NON Modal :
Lorsqu'un objet UserForm n'est pas modal, le code suivant est exécuté dès qu'il apparait. Il résulte aussi que l'utilisateur peut toujours utiliser une autre partie de l'application (par exemple saisir sur une feuille) sans avoir à répondre en premier au UserForm. Ce mode permet aussi de lancer plusieurs UserForms en même temps et de permetre à l'utilisateur de répondre indifféremment à chachun d'eux. (Etc...)

Mise en Garde Excel 97
Les objets UserForms d'Office 97 sont toujours de forme modale, le mode vbModeless (non modal) n'est pas supporté. IL existe une API capable de simuler ce mode Non MOdal pour Excel 97)



La syntax pour lancer un UserForm Modal ou Non Modal :

b]Mode Modal : [/b]

exemples depuis un Bouton ActiveX sur Feuille en Private Module de Sheet
Private Sub CommandButton1_Click()
UserForm1.Show vbModal
End Sub

Mais en fait, vu que c'est par défaut, il est inutile de le préciser, ceci est équivalent :
Private Sub CommandButton1_Click()
UserForm1.Show
End Sub

Ou encore :
b]Mode Modal : [/b]
Private Sub CommandButton1_Click()
UserForm1.Show 1
End Sub


b]Mode NON Modal : [/b] 'Non supporté par Excel 97

Private Sub CommandButton1_Click()
UserForm1.Show vbModeless
End Sub

Ou encore :
Private Sub CommandButton1_Click()
UserForm1.Show 0
End Sub


Voilà à peu près l'aide que je peux te donner, en espérant que çà t'éclairera...

Bon Samedi à tous et toutes
@+Thierry
 
L

lolo

Guest
Merci à Gérard et Thierry, ça m'éclaire un peu mieux. Mais je comprends pas pourquoi, sous Excel 2002, lorsque je ferme un formulaire modal et qu'il rend la main à la procédure qui l'a ouvert, ça termine l'exéctuion du projet...

En fait j'ai par exemple un formulaire userform1 qui lance un formulaire userform2 à l'aide d'un comandbutton. J'ai constaté que quand je déclare userform2 modal (valeur par défaut) lorsque je ferme userform2 par l'instruction Unload me (dans un commandbutton fermer par exemple) et bien non seulement userform2 se ferme mais également userform1 et donc le projet se termine. Alors que quand je déclare userform2 "non modal" lorsque je ferme userform2 par unload me, je retombe tout simplement sur userform1 ce qui me parait plus normal.
 
@

@+Thierry

Guest
Re Lolo, le Forum

Huum tu devrais bien lire mes paragraphes ci-dessus :

Modal
Aucun autre code ne s'exécutera tant que l'objet UserForm ne sera pas masqué ou déchargé

Non Modal
Lorsqu'un objet UserForm n'est pas modal, le code suivant est exécuté dès qu'il apparait.

Car là est la vérité ! pas comme dans les X-Files où elle est ailleurs !! )

En clair, tu dois avoir un code qui n'est pas sous ton contrôle (contrôle en français pas un de tes 75 Controls ActiveX comme sur l'autre post, lol )

Par exemple ton CommandButton du USF1 qui lance le USF2 est comme ceci :

exemple Modal
Private Sub CommandButton1_Click()
UserForm2.Show
Unload Me
End Sub
Résulat : les 2 USF ouvert en même temps
En Modal, il est normal que le Unload Me se Déclenche uniquement quand le USF2 sera fermé....

exemple NON Modal
Private Sub CommandButton1_Click()
UserForm2.Show 0
Unload Me
End Sub
Résulat : Seul le USF2 sera ouvert
En NON Modal, le Unload Me se Déclenche immédiatement....

Voilà grosso modo le style de problème

Bonne Programmtion
@+Thierry
 
E

EMG

Guest
Bonjour @+Thierry,

ben j'avais pas vue ta réponse pour Lolo car j'ai entendu dans la maison une voix qui disais comme ça , à table svp alors j'ai tout laisser tomber le casse croûte n'attend pas quand ça urge

Lolo a de l'info premier choix, tiens sur ce je vais me mettre ce mini tutorial en un fichier txt au cas où

@+ Gérard
 

Discussions similaires

Statistiques des forums

Discussions
312 202
Messages
2 086 180
Membres
103 152
dernier inscrit
Karibu