[VBA] ne pas relancer la macro si une MsgBox est affichée

F22Raptor

XLDnaute Impliqué
Hello
J'ai une macro que je lance à l'ouverture d'Excel, et qui se répète ensuite toutes les 10 minutes.
Cette macro déclenche potentiellement une MsgBox.

Problème : je suis parti déjeuner et je suis revenu au bout d'une heure ...
J'avais la boîte, je valide .... la macro retourne et affiche la boîte .... je valide ... et ainsi de suite 6 fois ! :D

Excel.Application.OnTime Now + TimeValue("00:10:00"), "MaMacro"


Avez-vous une idée pour bloquer l'exécution en cas de boîte déjà affichée (un If condition then Exit Sub), mais ne pas arrêter le fait que le macro retournera 10 mn plus tard ?

Merci ! :)
 

tototiti2008

XLDnaute Barbatruc
Re : [VBA] ne pas relancer la macro si une MsgBox est affichée

Bonjour F22Raptor,

Le plus simple est de gérer une variable globale dont tu changes la valeur avant d'afficher ta Msgbox, puis de nouveau juste après
Ta macro MaMacro devra tester la valeur de cette variable avant d'afficher la msgbox
 

tototiti2008

XLDnaute Barbatruc
Re : [VBA] ne pas relancer la macro si une MsgBox est affichée

Re,

Qu'appelles-tu une variable globale

Une variable déclarée en Public en haut d'un module standard

Par exemple

Code:
Public AffMsgbox as Boolean

Dans le code qui affiche la Msgbox
Code:
AffMsgbox = true
Msgbox "Coucou"
AffMsgbox = false

Dans le code qui est appelé par Ontime
Code:
if AffMsgbox then Exit Sub

Tout cela sans voir ton code, donc que des suppositions
 

F22Raptor

XLDnaute Impliqué
Re : [VBA] ne pas relancer la macro si une MsgBox est affichée

ça m'évite d'avoir 6 boîtes au bout d'une heure, mais ça relance une macro tout de même juste après la valid de la boîte.
Donc j'en ai deux à la place de N, ce qui est mieux.
Mais je vais essayer de comprendre ce qui cloche.

Je verrai si je peux adapter mon classeur pour quelque chose de plus simple que je puisse poster ici

En tout cas, merci pour la piste :)
 

F22Raptor

XLDnaute Impliqué
Re : [VBA] ne pas relancer la macro si une MsgBox est affichée

Bon, je ne vois pas trop : j'ai joint un fichier exemple très simplifié.

Donc, une Sub déclenche lance toutes les 10 secondes une autre Sub qui affiche une MsgBox.

Mon problème, c'est que si je ne clique pas de suite sur le bouton OK, et que j'attends 20 secondes ou plus, à peine ai-je cliqué sur la box qu'une autre apparaît, malgré l'astuce de la variable boolean mentionnée ci-dessus.

Une idée pour éviter cette seconde boîte, tout en gardant le cycle de lancement toutes les 10 secondes ? :confused:
 

Pièces jointes

  • F22afficheBox.xls
    45.5 KB · Affichages: 42
  • F22afficheBox.xls
    45.5 KB · Affichages: 53
  • F22afficheBox.xls
    45.5 KB · Affichages: 63

F22Raptor

XLDnaute Impliqué
Re : [VBA] ne pas relancer la macro si une MsgBox est affichée

Bon, je sèche !
Si je comprends bien, plutôt que de lancer directement Now + TimeValue("00:00:10") dans le code OnTime, tu le définis à la line précédente dans une variable.
Je ne comprends pas ce qui change : C'est comme si je définissais une variable MonTexte="Toto" pour faire MsgBox MonTexte, plutôt que MsgBox "Toto" ???:confused:


EDIT : ah oui, pas vu que le lancement de la sous-proc était placé avant ... ce serait ça le truc ?
 
Dernière édition:

tototiti2008

XLDnaute Barbatruc
Re : [VBA] ne pas relancer la macro si une MsgBox est affichée

Re,

oui, je ne relance Ontime qu'après la Msgbox
Ce qui rend surement inutile la variable AfficheBox d'ailleurs :)
Sinon la variable DteNow ne sert qu'à pouvoir arrêter les Ontime (bouton Arreter)
 

Discussions similaires

Réponses
6
Affichages
2 K
Compte Supprimé 979
C

Statistiques des forums

Discussions
314 450
Messages
2 109 731
Membres
110 553
dernier inscrit
loic55