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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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)
'---------------------------------------------- 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 '----------------------------------------------
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)
'----------------------------------------------
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
'----------------------------------------------
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)
'---------------------------------------------- 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 '----------------------------------------------
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
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.
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
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
' = = = = = = = = = = = = = = = = = = = = = = = = = 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
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.
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"
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"
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"
"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.
Merci. Cordialement. M41
"M41" <boomerang.pro00@wanadoo.fr> a écrit dans le message de news:
48c39d58$0$888$ba4acef3@news.orange.fr...
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" 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.
Jacques93
Bonjour M41,
Il existe aussi MZ-Tools pour VBA :
<http://cjoint.com/?jhxT72n0Bb>
il ne fait pas que ça et fonctionne aussi bien sous Excel, Word ...
<http://www.mztools.com/v3/download.aspx>
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.
Bonjour M41,
Il existe aussi MZ-Tools pour VBA :
<http://cjoint.com/?jhxT72n0Bb>
il ne fait pas que ça et fonctionne aussi bien sous Excel, Word ...
<http://www.mztools.com/v3/download.aspx>
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
il ne fait pas que ça et fonctionne aussi bien sous Excel, Word ...
<http://www.mztools.com/v3/download.aspx>
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