Sortie de boucle (VBA - Excell)

irrypetagoyen Messages postés 8 Date d'inscription samedi 25 février 2006 Statut Membre Dernière intervention 11 février 2009 - 9 févr. 2009 à 22:28
irrypetagoyen Messages postés 8 Date d'inscription samedi 25 février 2006 Statut Membre Dernière intervention 11 février 2009 - 11 févr. 2009 à 21:01
Bonjour,
..... pour un vrai débutant....

J'exécute ne routine sans fin dans une boucle while 1=1 .......wend.
Je voudrais sortir de cette boucle, à l'appui d'une touche quelconque.
Comment faire ?

Merci d'avance pour vos réponses.
Panchoa.
 

3 réponses

cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
10 févr. 2009 à 00:04
Bonjour

Je peux te fournir la solution suivante, malheureusement elle ne fonctionne que sur l'appui d'une touche de ton choix, ici la touche F4.

Colle le code suivant dans un module, exécute la procédure test(), puis appuie la touche F4.
<hr />
Option Explicit

    Declare Function RegisterHotKey Lib "User32" (ByVal hwnd As Long, _
        ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long
    Declare Function UnregisterHotKey Lib "User32" (ByVal hwnd As Long, ByVal id As Long) As Long
    Declare Function PeekMessage Lib "User32" Alias "PeekMessageA" (lpMsg As msg, _
        ByVal hwnd As Long, ByVal wMsgFilterMin As Long, ByVal wMsgFilterMax As Long, _
        ByVal wRemoveMsg As Long) As Long
    Declare Function WaitMessage Lib "User32" () As Long

    Type POINTAPI
        x As Long
        y As Long
    End Type

    Type msg
        hwnd As Long
        Message As Long
        wParam As Long
        lParam As Long
        time As Long
        pt As POINTAPI
    End Type

    Const MOD_ALT = &H1
    Const MOD_CONTROL = &H2
    Const MOD_SHIFT = &H4
    Const PM_REMOVE = &H1
    Const WM_HOTKEY = &H312

Sub test()
    Dim Message As msg
    Dim ret As Long
' Enregistre la touche F4 comme hotkey
    ret = RegisterHotKey(Application.hwnd, &HBFFF&, &H0, vbKeyF4) 
    Do
' attend un message
        WaitMessage
' Verifie si c'est un message Hotkey
        If PeekMessage(Message, Application.hwnd, WM_HOTKEY, WM_HOTKEY, PM_REMOVE) Then
            Call UnregisterHotKey(Application.hwnd, &HBFFF&)
            Exit Do
        End If
' permet l'exécution d'autres procédures
        DoEvents
    Loop
' annule l'enregistrement de la hotkey
    Call UnregisterHotKey(Application.hwnd, &HBFFF&)
    MsgBox "Terminé"
End Sub

Amicalement
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
10 févr. 2009 à 08:49
possible aussi d'interroger l'etat via un GetAsyncKeyState
0
irrypetagoyen Messages postés 8 Date d'inscription samedi 25 février 2006 Statut Membre Dernière intervention 11 février 2009
11 févr. 2009 à 21:01
WAAHHHHH!

Cela me semble long et compliqué !!!
Quand je pense qu'en GWbasic je faisais simplement :

 rep$ = ""
 WHILE rep$ = ""
    rep$ = INKEY$
 WEND

Merci tout de même pour vos réponses
Panchoa.
0