Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 VBA - Comment afficher le prompt d'interruption

Dudu2

XLDnaute Barbatruc
Bonjour à tous,

Savez-vous s'il existe une méthode pour afficher ce prompt qu'on obtient par exemple en faisant CTRL + PAUSE sur un MsgBox ?

 
Solution
Alors il est vrai que Stop permet le debug (affichage des valeurs de variables) et la continuation de l'exécution avec l'interface du VBE.
Donc on peut avantageusement remplacer le MsgBox par un Stop.
Ça reste une gestion programmée du Control + Pause mais c'est plus léger.

patricktoulon

XLDnaute Barbatruc
re
bonjour @Dudu2
ben ...
createobject("wscript.shell").sendkeys + ,les touches ctrl et pause
il existe aussi une api windows pour afficher les messages avec leur numero de code windows je dois avoir ça quelque part
mais ou là c'est une autre histoire
 

Dudu2

XLDnaute Barbatruc
En fait c'est un peu compliqué.
Je suis dans un UserForm qui simule un MsgBox et je voudrais que Ctrl + Pause agisse comme pour une MsgBox standard, c'est à dire arrête le code et affiche le dialogue de l'exécution interrompue.

Il y a 2 cas.

1er cas: le UserForm est en vbModal: le code est interrompu sur le .Show mais pas de dialogue (fichier joint).
On peut intercepter le Ctrl + Pause (KeyCode = 3 si EnableCancelKey = False) mais comment afficher le dialogue ?
 

Pièces jointes

  • Modal.xlsm
    19.9 KB · Affichages: 2
Dernière édition:

Dudu2

XLDnaute Barbatruc
2ème cas: le UserForm est en vbModeless (en "pseudo-modal"): le code est interrompu avec dialogue d'exécution interrompue après le MsgBox qu'il a fallu ajouter (c'est pas vraiment ce que je veux) pour que l'interruption soit sortie du code du UserForm (fichier joint). Mais ce n'et pas 100% garanti. A condition de laisser les instructions sans pause (DoEvents) sinon ça ramène l'interruption dans le code du UserForm.

En fait c'est trop compliqué, laissez tomber cette question.
 

Pièces jointes

  • Modeless.xlsm
    21.4 KB · Affichages: 1
Dernière édition:

Dudu2

XLDnaute Barbatruc
Suffit d'essayer.
Mais ne perds pas trop de temps là-dessus. Je crois que c'est un truc imaginaire non réalisable.
Sauf si tu sais via l'API afficher la boite de dialogue d'Exécution Interrompue.
 

Dudu2

XLDnaute Barbatruc
Chez moi, Desktop & Laptop Windows 10 64bits
VB:
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) 
    'Escape
    If KeyCode = 27 Then
        Unload Me
        Exit Sub
    End If
  
    'Control
    If KeyCode = 17 Then Exit Sub
  
    'Pause
    If KeyCode = 19 Then Exit Sub
  
    'Control + Pause
    If KeyCode = 3 Then
        MsgBox "KeyCode = 3 => Control + Pause"
        Exit Sub
    End If
  
    MsgBox "KeyCode = " & KeyCode
End Sub
 

Pièces jointes

  • Test KeyCode.xlsm
    19.5 KB · Affichages: 1
Dernière édition:

Dudu2

XLDnaute Barbatruc
En fait l'idée serait d'inhiber le Control + Pause (Application.EnableCancelKey = False) ce qui n'empêche pas d'intercepter le fait d'entrer Control + Pause (KeyCode = 3) et d'afficher le dialogue d'Exécution Interrompue par un moyen quelconque (API ou SendKeys). Je vais essayer le SendKeys.
 

Dudu2

XLDnaute Barbatruc
En UserForm Modal c'est le mieux que je puisse faire. Mais c'est pas l'idéal car il faut faire un MsgBox en cas d'interruption mais c'est mieux que rien.
 

Pièces jointes

  • Modal.xlsm
    21.7 KB · Affichages: 1

Dudu2

XLDnaute Barbatruc
En fait si on envoie un MsgBox, ça sert à rien de faire un SendKeys de Control + Pause avant puisque on peut le faire manuellement sur le MsgBox.
 

Pièces jointes

  • Modal.xlsm
    23.1 KB · Affichages: 1
  • Modeless.xlsm
    22.6 KB · Affichages: 0

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…