[VBA][Excel] UserForm modeless dans une boucle

UserForm modeless dans une boucle [VBA][Excel] - VB/VBA/VBS - Programmation

Marsh Posté le 02-05-2013 à 14:59:34    

Bonjour,
 
Dans mon programme, j'ai une boucle qui appelle un UserForm  
Pour compléter cet UserForm, l'utilisateur a besoin d'avoir accès à la feuille excel, l'option .Show est donc définie avec False.
Or, avec False, la boucle passe automatiquement à l'étape suivante sans laisser la main à l'user, et seul l'UserForm correspondant au dernier élément de la boucle est affichée à l'écran.
Si je passe le .Show en True, là, tous les UserForm sont affichés les uns après les autres, mais l'user ne peut plus accèder à la feuille excel.
Schématiquement, j'ai besoin d'avoir ceci :
 

Code :
  1. For each c in MyRange
  2. MyUserForm.Show (False)
  3. 'Laisser l'user remplir l'user form
  4. '
  5. Next c


 
J'ai l'impression de manquer un truc simple, genre une commande "break" ou "resume". Une idée ?


Message édité par Tzol le 02-05-2013 à 15:00:16
Reply

Marsh Posté le 02-05-2013 à 14:59:34   

Reply

Marsh Posté le 02-05-2013 à 15:06:45    

 
           Bonjour.
 
           Vraiment pas clair …
 
           Un UserForm a besoin d'être actif afin que ces champs soient saisissables !
 
           Quelle est donc précisément son utilité ?
 

Reply

Marsh Posté le 02-05-2013 à 15:15:39    

Le "mode", ce n'est pas de savoir si l'UserForm est actif ou non, mais de savoir si le reste de l'application excel est accessible ou non lorsque l'UserForm est actif.
 
Cf aide :  
 

Citation :

Remarks
 
When a UserForm is modal, the user must supply information or close the UserForm before using any other part of the application. No subsequent code is executed until the UserForm is hidden or unloaded. Although other forms in the application are disabled when a UserForm is displayed, other applications are not.
 
When the UserForm is modeless, the user can view other forms or windows without closing the UserForm.
 
Modeless forms do not appear in the task bar and are not in the window tab order.

Reply

Marsh Posté le 02-05-2013 à 15:26:17    

 
           Si cela avait été précisé dès le premier message !
 
           Bref, simplement passer une fois pour toutes sa propriété  ShowModal  à  False  dans la fenêtre des propriétés de l'UserForm.
 
           Mais alors il y aurait un souci de conception auquel je ne pourrais répondre sans connaître la problématique la plus précise …
 

Reply

Marsh Posté le 03-05-2013 à 13:55:29    

J'y penserai la prochaine fois :jap:
 
Donc, a priori, c'est du à un souci du design de ShowModal : un UserForm en modeless n'interrompt pas le code (je comprends pas vraiment pourquoi, mais c'est comme ca :o).
 
J'ai testé pas mal de trucs pour essayer de contourner ca (une boucle Do While DoEvents, ou lancer l'UserForm depuis une autre application, mais sans succès).
 
Si quelqu'un a une idée je prends :o

Reply

Marsh Posté le 03-05-2013 à 15:19:35    

 
           C'est tout à fait normal !
 
           Un UserForm en mode non modal sert par exemple à une boîte à outils, une calculatrice, … bref à toute procédure indépendante.
 
           Tu peux insérer l'instruction  Stop  dans ta procédure mais l'utilisateur saura-t-il la relancer ?
 

Reply

Marsh Posté le 03-05-2013 à 16:35:32    

L'user, ce sera moi pour au moins les premiers mois, donc ca devrait aller :o
 
Par la procédure Stop, tu veux dire le bouton rouge qu'on utilise avec F9 dans le code ? Est-ce qu'il y a des moyens de le controler avec des macro/boutons sur l'UserForm ou alors c'est à coup de F5/F9 ?

Reply

Marsh Posté le 03-05-2013 à 16:42:11    

 
           Une instruction …

Code :
  1.     For each c in MyRange
  2.         MyUserForm.Show (False)
  3.         Stop
  4.     '
  5.     Next c


 

Reply

Marsh Posté le 08-05-2013 à 11:16:24    

Bon, ça faisait pas non plus ce que je voulais, du coup j'ai du rusé en important toutes les données utiles dans l'UserForm :o
 
Merci bien quand même :jap:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed