Msgbox qui recapitule toutes les msgbox précédentes

Bonjour à tous,

voici mon GROS problème, j'ai une très longue macro qui s’exécute en boucle et qui m'affiche certains msgbox en fonction du type de fichier traité.

par exemple si le fichier n'est pas compatible : msgbox "fichier xxxx non compatible"

si le fichier n'existe pas : msgbox "fichier xxxx manquant"

le dernier msgbox est: traitement terminé

Problème: ayant des tonnes de fichiers à traiter, j'envisage lancer ma macro le soir et récupérer le résultat le matin, du coup si je garde mes msgbox actuels, il faudra à chaque fois cliquer sur ok et la macro s’arrêtera au premier msgbox.

Mon idée est que quand je lance ma macro le soir avant de partir qu'elle enregistre chaque msgbox qu'elle aurait du afficher (sans s’arrêter) et qu'à la fin du traitement des fichiers, quand je reviens le matin qu'elle me ressorte tout les msgbox que j'aurais du voir si j'étais là.

Quelqu'un peut il m'aider là dessus ?

Merci d'avance.

Bonjour,

je te propose une macro qui permet de rassembler le résulat de toutes tes msgboxs dans une feuille excel, que j'ai appelée msgbox

IL faudra que tu remplaces dans tes codes toutes les instructions msgbox par msgboxs (ctrl-H)

Sub msgboxs(s)
On Error Resume Next
Set ws = Worksheets("msgbox")
If Err <> 0 Then
Set ws = Worksheets.Add
ws.Name = "msgbox"
End If
ws.Cells(ws.Cells(Rows.Count, 1).End(xlUp).Row + 1, 1) = s
Set ws = Nothing
End Sub

Bonjour

Une autre méthode est de remplacer les Msgbox par des Msg qui seront rassemblés à la fin du code

Sub TaMacro()
1er test
Msg = "fichier xxxx non compatible" & vbCr 
2ème test
Msg = Msg & "fichier xxxx manquant" & vbCr 
Xème test
Msg = Msg & " Xème réponse" & vbCr 

If Len(Msg) > 0 Then
    MsgBox vbCr & Msg & vbCr, vbInformation + vbOKOnly, " traitement terminé"
    Exit Sub
End If
End Sub

Amicalement

Nad

Re bonjour à tous

Merci pour vos réponses

J'ai opté pour l'option de Nad et elle marche bien mais j'ai encore un autre soucis: mes msg se trouvent dans plusieurs modules différents et à la fin il ne me sort que les msg du module principal, comment peut on y remédier ?

merci encore pour tout

Re

Je n'ai jamais testé mais essaye

Dans chaque module "complémentaire" le 1er Msg écrit de cette façon = Msg & "xxxx" & vbCr

Tu appelles chaque module complémentaire dans ton module principal

...
Xème test
Msg = Msg & " Xème réponse" & vbCr 

Call Macro2
Call Macro3

If Len(Msg) > 0 Then
    MsgBox vbCr & Msg & vbCr, vbInformation + vbOKOnly, " traitement terminé"
    Exit Sub
End If
End Sub

salut, c'est ce que j'ai fait dans ma macro, dans chaque module complémentaire j'ai commencé par Msg = msg ...

En début de ton module

Public msg as string

en début de mon module principal ou des modules complémentaires? je le met avant ou après sub? parce que quand je le met après sub ça ne passe pas .

Au début de ton module principal.

En effet si la variable n'est pas publique tes autres modules n'y ont pas accès.

d'accord mais quand je met public msg as string dans mon module principal, juste après public sub xxx () et que je lance la macro il m'affiche erreur de compilation: attribut incorrect dans une procédure sub ou function

À mettre avant le sub à la première ligne du module

Salut merci beaucoup à tous ça marche !!!

Mais j'ai un autre tout petit soucis.

En effet j'ai beaucoup de msg et du coup la fenêtre qui m'affiche ces messages est trop petite pour m'afficher tout ces messages, elle ne m'en affiche qu'une partie, quelqu'un peut il m'aider pour ça PLEASE ????

En effet, une msgbox ne peut afficher que 1024 caractères.. soit tu splites ta string en parties de 1024 characterz soit tu creez un userform qui fera office de msgbox soit tu utilises WSH

Set objshell = createobject("Wscript.Shell")

Objshell.popup msg, 0,"titre",0

heu ? ça donne quoi tout ça en français facile (je débute encore avec VBA)

En Français facile:

Une msgbox n'affiche QUE 1024 characteres:

aaaa = 4 caractères

Pour en afficher d'avantage:

Soit tu utilises plusieurs messages box de 1024 chars chacune.

Soit tu construits une messagebox faite maison que tu appelleras en lui donnant l'argument que tu veux

Soit tu utilises les popup de l'objet Windows script host, qui lui n'est pas limité à 1024.

La dernière solution étant la plus simple:

Dans le sub qui va afficher la messagebox;

juste après tes dim et avant le code tu écris:

Set objshell = createobject("Wscript.Shell")

Puis ta msgbox sera appellée par la commande:

Objshell.popup msg, 0,"titre",0

Donc tu remplaces msgbox(msg) par

Objshell.popup msg, 0,"titre",0

salut, voici le code que j'avais avant pour afficher la msgbox:

if len(msg)>0 then

Msgbox vbcr & msg & vbcr, vbinformation + vbokonly, "traitement terminé"

est ce que je dois remplacer ces deux lignes de code par :

Objshell.popup msg, 0,"titre",0 ???

merci pour votre compréhension

T'es pas très débrouillard hein...

if len(msg)>0 then

Objshell.popup vbcr & msg & vbcr, 0,"traitement terminé",0

Sans oublier de créer l'objet en début de routine

Salut, en effet comme tu as pu le remarquer VBA et moi ça fait deux

Bref, ça marche super bien, je suis vraiment satisfait. merci beaucoup

Cependant, à la fin vu que j'ai énormément de messages, la fenêtre qui s'affiche est plus longue que l'écran de mon ordinateur, du coup je ne peux pas voir les messages qui sont sous la barre du menu démarrer en bas, et je ne peux pas non plus diminuer la taille de cette fenêtre pour voir ce qui est en bas, il n' y a pas un moyen d'ajouter à cette fenêtre un bouton de défilement ou quelque chose qui me permettrait de tout lire ?

( MERCIIIIIII )

Non. Pour le coup soit tu en fais apparaitre plusieurs

if len(msg)>0 then 
while len(msg)>10000
Objshell.popup vbcr & mid(msg,1,10000) & vbcr, 0,"traitement terminé",0
msg = right(msg,len(msg) - 10000)
wend
Objshell.popup vbcr & msg & vbcr, 0,"traitement terminé",0
end if

Soit tu construis un userform avec un bouton de défilement.

superrrr ça marche merci

Rechercher des sujets similaires à "msgbox qui recapitule toutes precedentes"