Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Clear Screen pour Debug.?

5 réponses
Avatar
M41
Bonjour
Existe t il un moyen pour effacer la page d'exécution avec VBA avant de
relancer un nouveau test avec de nouveaux Debug.? "..."
J'ai essayé des Debug.? Chr(nombres inférieurs à 32) mais ça ne marche pas.
Cordialement

M41

NB : ? produit un Print après Debug.

5 réponses

Avatar
michdenis
Enfin, une question simple ....

Dans un module standard tu inscris ceci :
Et pour effacer le contenu de la fenêtre "Exécution"
tu appelles la procédure : proClearImmediate

Maintenant pour la communauté de ce forum, il serait
intéressant que tu nous expliques chacune des lignes
de code de cette solution....et compte toi chanceux, c'est
probablement la façon la plus simple de le faire par "code"


Type INPUT_TYPE
dwType As Long
xi(0 To 23) As Byte
End Type

Type KEYBDINPUT
wVk As Integer
wScan As Integer
dwFlags As Long
time As Long
dwExtraInfo As Long
End Type

Declare Function SendInput Lib "user32" _
(ByVal nInputs As Long, pInputs As INPUT_TYPE, _
ByVal cbSize As Long) As Long

Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
(Destination As Any, Source As Any, ByVal Length As Long)

Const INPUT_KEYBOARD = 1
Const KEYEVENTF_KEYUP = &H2
Const VK_CONTROL = &H11

'----------------------------------------------
Sub proClearImmediate()

Dim inputevents(0 To 7) As INPUT_TYPE
Dim keyevent As KEYBDINPUT
Dim myArray As Variant
Dim n As Integer

'Set key name to send
myArray = Array(VK_CONTROL, vbKeyG, vbKeyA, vbKeyDelete)

For n = 0 To UBound(myArray)
keyevent.wVk = myArray(n) ''key name
keyevent.wScan = 0
keyevent.dwFlags = 0 '0 means press the key down
keyevent.time = 0
keyevent.dwExtraInfo = 0
inputevents(n).dwType = INPUT_KEYBOARD
CopyMemory inputevents(n).xi(0), keyevent, Len(keyevent)
Next

For n = 0 To UBound(myArray)
keyevent.wVk = myArray(n)
keyevent.wScan = 0
keyevent.dwFlags = KEYEVENTF_KEYUP 'release the key
keyevent.time = 0
keyevent.dwExtraInfo = 0
inputevents(n + UBound(myArray) + 1).dwType = INPUT_KEYBOARD
CopyMemory inputevents(n + UBound(myArray) + 1).xi(0), keyevent,
Len(keyevent)
Next

'place the events into the stream
SendInput n + UBound(myArray) + 1, inputevents(0), Len(inputevents(0))

End Sub
'----------------------------------------------
Avatar
Frédéric Sigonneau
Cette procédure de Dana DeLouis fait le travail :

' = = = = = = = = = = = = = = = = = = = = = = = = = Sub ClearImmediateWindow()
Dim objWindow As Object
Dim objImmediateWindow As Object

For Each objWindow In ThisWorkbook.VBProject.VBE.Windows
If objWindow.Type = 5 Then 'vbext_wt_Immediate Then
Set objImmediateWindow = objWindow
Exit For
End If
Next

objImmediateWindow.Visible = True
objImmediateWindow.SetFocus
SendKeys "^(a)"
SendKeys "{Del}"
End Sub
' = = = = = = = = = = = = = = = = = = = = = = = = =
FS
---
Frédéric Sigonneau
http://frederic.sigonneau.free.fr

M41 a écrit :
Bonjour
Existe t il un moyen pour effacer la page d'exécution avec VBA avant de
relancer un nouveau test avec de nouveaux Debug.? "..."
J'ai essayé des Debug.? Chr(nombres inférieurs à 32) mais ça ne marche pas.
Cordialement

M41

NB : ? produit un Print après Debug.




Avatar
michdenis
A ) la première procédure que j'ai publié sur ce fil
fonctionne bien lorsqu'elle est lancée à partir de la
fenêtre VBE...Testé sur Excel 2003 . Elle ne fait pas
le travail si elle est exécutée à partir de la feuille de calcul.


B ) La procédure de Frédéric Sigonneau fonctionne bien
mais si une macro s'exécute et que l'usager se retrouve
dans une fenêtre VBE ... ça peut être problématique et
dérangeant à plus d'un égard.

L'utilité d'une ligne de code comme celle-ci dans le code
d'une procédure : Debug.Print MaVariable
C'est qu'elle permet d'afficher dans la fenêtre exécution la
valeur de MaVariable a un endroit précis d'une procédure.
Ainsi on peut définir dans des procédures complexes divers
moments où l'on désire voir évoluer le contenu de la variable.

Ce qui est intéressant avec la ligne de code "Debug.Print..."
et la fenêtre "Exécution" , c'est que nous pouvons tout laisser
en place, utiliser la procédure à volonté et revenir quelques
semaines ou quelques mois plus tard pour "débugger" une
situation qui n'avait pas été prévue à l'époque.

L'intérêt de la procédure suivante que je soumets permet de tout
laisser en place et elle s'aquitte "très bien" de sa tâche lorsqu'elle
est activée à partir de la feuille (si l'interface de la fenêtre VBE
n'est pas ouvert, il n'est pas sollicité) de calcul et de l'interface VBE.
Et c'est là toute la difficulté de la tâche.


La procédure qui suit a été testé sur excel 2003

Copie tout ceci dans un module standard et au besoin
tu appelles la procécure : ClearImmediateWindow

Private Declare Function FindWindow _
Lib "user32" Alias "FindWindowA" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx _
Lib "user32" Alias "FindWindowExA" _
(ByVal hWnd1 As Long, ByVal hWnd2 As Long, _
ByVal lpsz1 As String, _
ByVal lpsz2 As String) As Long
Private Declare Function GetKeyboardState _
Lib "user32" (pbKeyState As Byte) As Long
Private Declare Function SetKeyboardState _
Lib "user32" (lppbKeyState As Byte) As Long
Private Declare Function PostMessage _
Lib "user32" Alias "PostMessageA" ( _
ByVal hwnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, ByVal lParam As Long _
) As Long

Private Const WM_ACTIVATE As Long = &H6
Private Const WM_KEYDOWN As Long = &H100
Private Const VK_CONTROL As Long = &H11
Private Const KEYSTATE_KEYDOWN As Long = &H80

Private m_KeyboardState(0 To 255) As Byte
Private m_hSaveKeystate As Long
'--------------------------------------------
Sub ClearImmediateWindow()

Dim hChild As Long
Dim hParent As Long
Dim strCaptionVbe As String

Const CLASS_VBE As String = "wndclass_desked_gsk"
Const CLASS_IMMEDIATE As String = "VbaWindow"
Const CAPTION_IMMEDIATE As String = "Exécution"

' Get handle to Immediate Window
strCaptionVbe = Excel.Application.VBE.MainWindow.Caption
hParent = FindWindow(CLASS_VBE, strCaptionVbe)
hChild = FindWindowEx(hParent, ByVal 0&, _
CLASS_IMMEDIATE, CAPTION_IMMEDIATE)

If hChild = 0 Then
MsgBox "Immediate Window not found."
Exit Sub
End If

' Activate Immediate Window
PostMessage hChild, WM_ACTIVATE, 1, 0&

' Simulate depressing of CTRL key
GetKeyboardState m_KeyboardState(0)
m_hSaveKeystate = m_KeyboardState(VK_CONTROL)
m_KeyboardState(VK_CONTROL) = KEYSTATE_KEYDOWN
SetKeyboardState m_KeyboardState(0)
DoEvents

' Send CTRL+A (select all) and Delete keystokes
PostMessage hChild, WM_KEYDOWN, vbKeyA, 0&
PostMessage hChild, WM_KEYDOWN, vbKeyDelete, 0&

' Schedule cleanup code to run
Application.OnTime Now + TimeSerial(0, 0, 0), "DoCleanUp"

End Sub
'--------------------------------------------
Sub DoCleanUp()

' Restore keyboard state
GetKeyboardState m_KeyboardState(0)
m_KeyboardState(VK_CONTROL) = m_hSaveKeystate
SetKeyboardState m_KeyboardState(0)

End Sub
'--------------------------------------------


Et pour ceux que cette situation passionne, vous pouvez les
retrouver sur le blog de Dick Kusleika , MVP excel à cette adresse :

http://www.dailydoseofexcel.com/archives/2004/06/09/clear-the-immediate-window/
Avatar
M41
Merci. Cordialement. M41

"M41" a écrit dans le message de news:
48c39d58$0$888$
Bonjour
Existe t il un moyen pour effacer la page d'exécution avec VBA avant de
relancer un nouveau test avec de nouveaux Debug.? "..."
J'ai essayé des Debug.? Chr(nombres inférieurs à 32) mais ça ne marche
pas.
Cordialement

M41

NB : ? produit un Print après Debug.



Avatar
Jacques93
Bonjour M41,

Il existe aussi MZ-Tools pour VBA :

<http://cjoint.com/?jhxT72n0Bb&gt;

il ne fait pas que ça et fonctionne aussi bien sous Excel, Word ...

<http://www.mztools.com/v3/download.aspx&gt;

M41 a écrit :
Bonjour
Existe t il un moyen pour effacer la page d'exécution avec VBA avant de
relancer un nouveau test avec de nouveaux Debug.? "..."
J'ai essayé des Debug.? Chr(nombres inférieurs à 32) mais ça ne marche pas.
Cordialement

M41

NB : ? produit un Print après Debug.






--

Cordialement,

Jacques.