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

  • Initiateur de la discussion Initiateur de la discussion Dudu2
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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.
Bonjour,
J'avais utilisé initialement l'instruction Stop mais elle ne propose pas Continuer ou Debug, ce fameux Dialogue qui intervient en Control + Pause sur un MsgBox que je tente avec un succès mitigé de reproduire.
 
Bonjour à tous
perso je pense qu'avant d'essayer de réinventer la roue
il faudrait apprendre a connaitre touts les event userform et leur property
donc cela étant dit je fait ce que je dis
donc on utilisera les event adéquats
avant tout je rappelle pour la Nième fois que le userform est un module classe avant tout et qu'il transporte avec lui le CLISD permettant d'afficher un object de la classe Forms
quel est l'event qui est déclenché quand on ""nothing"" une classe

le but c'est quoi ?
faire un control+pause sur un textBox

ok
donc question
d'après toi @Dudu2
1° quel sont les event déclenchés lorsque l'on ferme un userform ?
2° les quels concerne l'object forms et les quels concerne la classe(nomdel'userform)

essaie donc cela voir un peu

VB:
Public interruption As Boolean

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 3 Then interruption = True: Unload Me
End Sub

Private Sub UserForm_Terminate()
If interruption Then MsgBox "intérrompu"
End Sub

pas besoins de display ou de show perso et tout y couintiti


😉
 
ou même encore plus simplement
VB:
Public interruption As Boolean

Public Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 3 Then interruption = True: une_sub
End Sub


Sub une_sub()
    If interruption Then
          x = MsgBox("interruption", vbYesNo)
        If x = vbYes Then Unload Me
    End If
End Sub
 
Quand tu fais un MsgBox et Control + Pause dessus, tu as le dialogue affiché et le code arrêté sur la 1ère instruction qui suit le MsgBox.
C'est ce que j'essaie de reproduire avec le UserForm.
Faire le l'arrêt dans le code du UserForm n'a pas d'intérêt car on ne sait pas d'où il a été appelé et c'est l'instruction qui suit son appel qui nous intéresse pour le debug.
 
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.
 

Pièces jointes

Bonjour @Dudu2 🙂, @patricktoulon 🙂 , @dysorthographie 🙂, à tous 🙂,

Ma p'tite version (sans doute une tentative malheureuse) avec un code plus concis.
  • version v1 -> le userform1 reste ouvert quand on exécute l'instruction STOP
  • version v2 -> le userform1 est refermé quand on exécute l'instruction STOP
  • dans les deux versions, c'est la touche ESC qui provoque une fermeture directe du userform1
  • dans les deux versions, c'est la touche "Pause" (avec ou sans Ctrl) qui provoque le "Stop"
 

Pièces jointes

Dernière édition:
re Bonjour à tous
juste en passant
si la touche ctrl ne doit être utilisée pour autre chose dans le textbox
comme les messages application et vbe sont prioritaires par rapport au msgbox vba
le message d'interruption apparait
VB:
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If Shift <> 0 Then Shift = 0: MsgBox KeyCode
End Sub
les touches ctrl+pause font l'effet recherché
 
Bonjour @patricktoulon,
C'est bien vu mais même avec un If KeyCode = 17 Then MsgBox 1, on reste dans le code UserForm (au niveau du TextBox1_KeyDown()) et pas moyen de renvoyer l'interruption sur l'instruction suivante si l'appel du UserForm est fait par une fonction publique. J'ai essayé des dizaines de trucs et pas moyen.

En fait quand on fait un SendKeys (API keybd_event ou pas) de "^{BREAK}", on ne sait jamais quand ça va arriver au gestionnaire d'interruption. Un boucle de 10.000 DoEvents après se solde par des interruptions à des valeurs plus ou moins grande de l'indice de boucle.
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
12
Affichages
304
  • Question Question
Réponses
6
Affichages
286
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…