Microsoft 365 Validation (bouton "no") automatique d'une Msgbox après 1mn

Fab117

XLDnaute Impliqué
Hello,
Je souhaiterais faire une macro qui tourne en boucle, mais m'offre régulièrement une porte de sortie.
J'ai donc fait une boucle qui m'ouvre une Msgbox.
Si je clique "yes", il sort de la macro.
Si je clique "No" il déroule la macro et retourne sur la Msgbox.

Existe-t-il un moyen pour qu'après 1mn il "clique" tout seul sur le bouton "No" de la Msgbox si entre temps je n'ai pas réagit.

Autrement dit:
Il ouvre la Msgbox.
J'ai 1mn pour cliquer sur "yes", sinon il déroule le reste de la macro, puis relance la Msgbox.
Et ainsi de suite jusqu'à ce que je clique "yes"
VB:
Do Until Condition
    If MsgBox("Cliquer Yes pour sortir de la macro", vbYesNo, "Demande de confirmation") = vbYes Then
            Exit Sub
    End If
Loop

Merci d'avance de votre aide.

Fab
 

Fab117

XLDnaute Impliqué
Hello,
Tout d'abord un grand grand merci à vous tous.
Je ne pensais pas que ma question susciterait un tel intérêt.
Toutes vos propositions sont super intéressantes et j'ai trouvé mon bonheur.
Encore merci et excellente journée

Fab
 

Dudu2

XLDnaute Barbatruc
Bonjour les temporisateurs,

Perso je trouve qu'un MsgBox non Modal c'est aussi sympa car ça permet de l'utiliser à d'autres fin que celles liées à l'exigence stricte d'une réponse.

Ceci dit, le MsgBox, le vrai, il est pas facile à Time-Outer. Il est Modal et prend la main sur toute tentative de Application.Ontime pour le dézinguer. Par contre, avec SetTimer, la situation devient plus intéressante.

Ci-joint, un MsgBox standard Modal et temporisé.

Edit: Fichier modifié 16/08 à 16h35 pour de petites améliorations (Déclaration LongPtr, titre par défaut, timer en millisecondes, simplification de code).
Et pour une grosse correction sur la fermeture de la fenêtre MsgBox qui n'a pas d'option de fermeture (X en barre de menu) pour vbYesNo et vbAbortRetryIgnore et donc insensible au SendMessage WM_CLOSE mais qu'il est possible de fermer avec un simple SendKeys "{ENTER}".
 

Pièces jointes

  • MsgBox Modal Temporisé par SetTimer.xlsm
    24 KB · Affichages: 3
Dernière édition:

patricktoulon

XLDnaute Barbatruc
oui avec un usf c'est complètement personnalisable et je préfère
car l'api settimer est très très très très sensible et ne pardonne pas quand ça déraille c'est le crash 100% destruction
par exemple sur mon vieux pc portable W7 excel 2007, il arrive parfois (APPAREMMENT SANS RAISONS) de me planter et c'est aléatoire ce qui rend le problème plus difficile a cerner
 

Dudu2

XLDnaute Barbatruc
En effet SetTimer est délicat à manipuler. Dans ces tests (et d'autres auparavant) oùj'ai vu à plusieurs reprises Excel dégager brusquement à cause de Timers en suspend. Là dans ce code, c'est très limité dans l'usage Set / Kill.
 

Dudu2

XLDnaute Barbatruc
@Bernard,
Il faudrait que tu l'écrives complètement car je ne te suis pas pour le moment.
Reprends le code car j'ai retiré un flag inutile en fait. Il reste 15 lignes de code au final.
Le hWnd de la fenêtre MsgBox je ne peux pas l'avoir avant de passer en TimeOut.
 

Dranreb

XLDnaute Barbatruc
Ça m'est aussi arrivé jadis. Je suppose que c'est parce que par cette voie Excel peut être ainsi dérangé n'importe quand, au beau milieu d'une réorganisation impliquée par des calculs ou autres, où ce n'est absolument pas possible d'exécuter une méthode demandée. MSForms est bien plus tolérant.
 

Dranreb

XLDnaute Barbatruc
Oui, VBA non plus n'est pas sensible, je parlais d'autre cas. Ce qui est dangeureux c'est d'utiliser une méthode Excel dans un timer. C'est ça qui peut entrainer un plantage sévère et silencieux de l'application. On peut tout au plus espérer qu'un Application.OnTime Now, … y est assez tolérant pour savoir reporter cette exécution jusqu'au moment où elle est possible pour Excel.
 

Discussions similaires

Statistiques des forums

Discussions
312 240
Messages
2 086 514
Membres
103 239
dernier inscrit
wari