XL 2016 Userform Modal / Non Modal - Suspension code

vgendron

XLDnaute Barbatruc
Bonjour à toutes et tous!

Je viens vers vous pour un souci d'utilisation des formulaires en mode modal et non modal.

De ce que j'ai compris et vu
le mode MODAL (par défaut à la création d'un Userform)
- ne permet pas d'acceder aux feuilles du classeur pendant l'execution du code
- l'appel en cascade de formulaires suspend l'execution du code du formulaire "Amont" jusqu'à ce que le formulaire "aval" soit fermé
- le formulaire "Amont" reste visible, mais est inaccessible

le mode NON modal
- permet d'acceder aux feuilles du classeur pendant l'execution du code
- l'appel en cascade de formulaires ne suspend PAS l'execution du code du formulaire "Amont" ==> Pendant que le formulaire "aval" est executé, tout le code du formulaire du formulaire "amont" se déroule.
- les formulaires sont tous visibles et accessibles indépendamment..

jusque la.. c'est plutot clair..

l'ennui, c'est que moi.. je veux un peu des deux....
du modal avec accces aux feuilles du classeur....
ou du NON modal avec Suspension du code du formulaire amont...

j'étais parti avec des formulaires TOUS en NON modal
et lorsqu'un formulaire "Amont" appel un formulaire "Aval", pour éviter d'interagir sur les deux formulaires en meme temps, je mettais un "formulaire amont.hide" avant d'appeler le formulaireaval .show

l'ennui, c'est que toute une partie du code du formulaire Amont dépend de ce qui a été fait dans le formulaire aval.... et donc.. il me manque le moyen de suspendre le code...
à noter. que dans mon appli, j'ai près de 70 userforms qui peuvent interagir les uns avec les autres.. certains ne peuvent etre appelés QUE par un formulaire, d'autres. par plusieurs..

peut etre est il finalement plus simple de mettre tout le monde en MODAL et avoir une astuce pour garder les feuilles excel accessibles ??

auriez vous une idée ?
 

Pièces jointes

  • Test Formulaire Modal.xlsm
    30.6 KB · Affichages: 17

vgendron

XLDnaute Barbatruc
L'intérêt des évènements, c'est que l'UserForm fils n'a pas besoin de savoir qui l'a appelé, il dit simplement à qui veut l'entendre qu'il a fini son travail, après on en fait ce qu'on veut dans les appelants.
justement si... le userform fils a besoin de savoir qui l'a appelé.. pour pouvoir remplir le bon text box sur le bon formulaire..

dans l'exemple joint, j'ai utilisé ta méthode:
Peux tu me dire stp, si je l'ai bien utilisée ?
Dans chaque Parent
==> je dois déclarer chaque child possible dans l' initialize
==> je dois déclarer les Private WithEvents de chaque Child
==> je dois définir ce que je fais à chaque retour d'un Child : Private Sub USFChild_Finis()

Dans chaque child
==> je dois déclarer la méthode "Event Finis(...)
==> je dois utiliser le RaiseEvent "Finis" pour retourner un contenu.. (ou plusieurs?? ou pas?)

si c'est le cas:
1) je vais devoir reproduire toutes les déclarations pour tous mes formulaires:
certains peuvent appeler jusquà 15 autres formulaires différents

2) dans l'exemple joint, le code du bouton retour des childs met du texte dans le textbox du formulaire appelant== enfin.. c'est ce que je voudrais...

Evidemment, dans mon appli: un Child ne se contente pas de remplir UN textbox
il peut en remplir plusieurs, ou charger une listbox ou mettre à jour plusieurs champ du parent..

si ce n'est pas possible que le child écrive directement dans le parent, je vais effectivement devoir travailler les raisevent pour que toutes les infos soient transmises au parent, qui rechargera lui meme les boites (comme tu l'as fait dans ton exemple)
 

Pièces jointes

  • Test Formulaire Modal Méthode Bernard.xlsm
    37.8 KB · Affichages: 4

dysorthographie

XLDnaute Accro
Bonjour,
je n'es pas lu tous les poste!

Pour le UserForm1
VB:
Dim UsfParent As Object
Dim UsfEnfant As Object

Public Property Set Parent(Value As Object)
Set UsfParent = Value
End Property

Private Sub Enfant_Click()
Set UsfEnfant = New UserForm2
Set UsfEnfant.Parent = Me
UsfEnfant.Show vbModal 'vbModal/vbNormal
End Sub
Pour le UserForm2
Code:
Dim UsfParent As Object
Dim UsfEnfant As Object

Public Property Set Parent(Value As Object)
Set UsfParent = Value
End Property

Private Sub Enfant_Click()
Set UsfEnfant = New UserForm1
Set UsfEnfant.Parent = Me
UsfEnfant.Show vbModal 'vbModal/vbNormal
End Sub
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Oui mais dans l'exemple que j'avais joint c'était l'UserForm appelant qui le faisait, pas l'appelé. Donc l'appelé n'avait pas besoin de savoir qui l'avait appelé.
Maintenant si le rôle de l'appelé était juste de modifier un contrôle de l'appelant, je ferais encore autrement, qui ne nécessiterait pas d'avantage de savoir qui l'a appelé :
Je transmettrais à une méthode de l'appelé le contrôle concerné. Exemple: la méthode Coupler de mon UFmCalend.
 

Pièces jointes

  • MonCalendrier.xlsm
    83.5 KB · Affichages: 9

Discussions similaires

Statistiques des forums

Discussions
315 088
Messages
2 116 089
Membres
112 658
dernier inscrit
doro 76