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 ?

1708243804520.png
 
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.

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
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.
 

Discussions similaires

Statistiques des forums

Discussions
312 211
Messages
2 086 292
Membres
103 171
dernier inscrit
clemm