Désactiver (ou répondre automatiquement...) à un msgbox [Résolu]

Ericbzc 17 Messages postés lundi 24 novembre 2008Date d'inscription 13 décembre 2010 Dernière intervention - 23 juil. 2010 à 03:26 - Dernière réponse : Ericbzc 17 Messages postés lundi 24 novembre 2008Date d'inscription 13 décembre 2010 Dernière intervention
- 26 juil. 2010 à 01:46
Bonjour,

j'ai fait pas mal de recherche sur le sujet, mais je n'ai pas trouvé de rép. satisfaisante.

Le pb est t simple. je cherche une fonction à la display_alerts false mais pour les msgbox !

En fait j'ai des tas de petites macros qui affichent à la fin de la procédure "Opération terminée". et j'ai une macro principale qui appelle toutes ces petites macros.

Du coup l'exécution de la grande macro est tout le temps interrompue et nécessite l'intervention de l'utilisateur.

Peut-on désactiver l'affichage des msgbox ?

Peut-on envoyer une réponse automatique suite à un msgbox ? (genre sendkeys)

Autre idées ?

je peux tjs les supprimer ou mettre une variable public Affich = true/false et mettre un IF avant chaque msgbox "op. terminée" mais si je peux, je souhaite éviter ces méthodes.

Merci d'avance
Eric
Afficher la suite 

Votre réponse

3 réponses

Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 23 juil. 2010 à 04:37
+3
Utile
L'approche naturelle est bien de mettre un Flag est de conditionner l'apparition des MsgBox...

de toutes facon, meme si tu trouvais un moyen de les fermer automatiquement, a quoi bon ? Il te faudrait ajouter un test...


Enfin, je pense que ton code a un souci de structure.
Le MsgBox doit etre mis dans la macro qui se déclenche sur action de l'utilisateur, pas dans la procédure de traitement...

en clair :

Private Sub Bouton1_Click()
    If LanceTraitement("Param1") Then
        MsgBox "OK"
    Else
        MsgBox "KO"
    End If
End Sub

Private Function LanceTraitement(Param as String) as Boolean
    [...]
End Function


Ainsi, si tu as besoin de faire appel a LanceTraitement ailleurs, tu n'aura pas de Msgbox d'office...




Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Renfield
foliv57 423 Messages postés vendredi 17 novembre 2006Date d'inscription 15 juillet 2014 Dernière intervention - 25 juil. 2010 à 11:00
0
Utile
Bonjour,

+1 pour ce que dit Renfield.

La facon la plus propre est de gérer l'affichage ou non du msgbox.

Par contre, si vous avez vraiment besoin d'afficher des informations multiples tout au long de votre traitement, la solution la plus propre est de créer un formulaire "Informations", affiché de manière non modale au début de l'exécution, contenant un TextBox multiligne.

Ensuite il suffirait d'ajouter les messages (vos msgbox actuellement) au TextBox au fur et à mesure.

L'utilisateur aura comme ca un récap de tous les messages.
Commenter la réponse de foliv57
Ericbzc 17 Messages postés lundi 24 novembre 2008Date d'inscription 13 décembre 2010 Dernière intervention - 26 juil. 2010 à 01:46
0
Utile
Merci bcp à tous les 2 pr vos réponses.

Je retiens donc que un module doit exécuter un code sans interruption aucune... Tous les paramètres étant précisés dans le code qui déclenche l'action (ex : bouton_click) et donc dans le userform.

Je suppose que de même, il est également plus propre de coder les ws.unprotect, application.enableevents, et application.screenupdating au niveau de l'action ??

Merci encore.
Eric
Commenter la réponse de Ericbzc

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.