Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Clear la fenêtre Exécution [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Expert éminent Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juillet 2009
    Messages
    3 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : juillet 2009
    Messages : 3 017
    Points : 6 166
    Points
    6 166
    Par défaut Clear la fenêtre Exécution
    Bonjour la Forum,

    Pour le contrôle de mes procédures, j'utilise souvent la méthode

    Question :

    Comment coder pour la fenêtre Exécution
    1 - son ouverture si elle n'est pas ouverte
    2 - son effacement
    3 - sa fermeture

    J'ai cherché en utilisant

    ce lien

    sans succès

    Merci par avance, et bonne journée à tous.

    Bien Cordialement.

    Marcel

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.



  2. #2
    Expert éminent
    Homme Profil pro
    Inscrit en
    août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : août 2010
    Messages : 3 453
    Points : 6 858
    Points
    6 858
    Par défaut
    Bonjour,

    Regarde avec ceci mais SendKeys n'est pas top :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    Sub FenetreExecution()
     
        With Application.VBE.ActiveWindow.Collection("Exécution")'depuis le VBE
     
            .Visible = True 'affiche
     
            .SetFocus 'donne le focus
     
            SendKeys "^(A)" 'sélectionne tout le texte présent dans la fenêtre (quand ça veut marcher :o(( )
     
            SendKeys "{DELETE}" 'le supprime
     
            .Close 'ferme la fenêtre
     
        End With
     
    End Sub
    Hervé.

  3. #3
    Expert éminent Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juillet 2009
    Messages
    3 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : juillet 2009
    Messages : 3 017
    Points : 6 166
    Points
    6 166
    Par défaut Clear Exécution
    Bonsoir Theze,

    (Heureux de te retrouver.)

    OK pour tout le code sauf pour le SendKeys qui ne fonctionne pas.

    Sur le web, (à moins que j'aie mal cherché), je n'ai pas trouvé l'API Windows correspondant.

    Merci à toi.

    Bien Cordialement.

    Marcel

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.



  4. #4
    Expert éminent Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juillet 2009
    Messages
    3 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : juillet 2009
    Messages : 3 017
    Points : 6 166
    Points
    6 166
    Par défaut
    Un début de réponse.

    (D'après Frédéric Sigonneau)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Sub ClearDebugWindow()
    'Bill Manville, mpep
      Dim i As Integer
      ' put in some test data
      For i = 1 To 10
        Debug.Print "test"
      Next
     
    'Marcel : afin de voir le contenu de la fenêtre  
    Application.wait Now + TimeValue("00:00:05")
     
      ' go to VB editor
      Application.CommandBars.FindControl(ID:=1695).Execute
      ' ensure debug window is displayed and active
      Application.VBE.CommandBars.FindControl(ID:=2554).Execute
      SendKeys "^{HOME}+^{END}{DEL}"
    End Sub
    Cela étant, l'idéal serait, à mon avis, de se débarraser des SenKeys.

    Bien Cordialement.

    Marcel

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.



  5. #5
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    juillet 2008
    Messages
    9 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : juillet 2008
    Messages : 9 430
    Points : 31 834
    Points
    31 834
    Par défaut
    Simplement avec SendKeys
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  6. #6
    Expert éminent Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juillet 2009
    Messages
    3 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : juillet 2009
    Messages : 3 017
    Points : 6 166
    Points
    6 166
    Par défaut CLEAR EXECUTION
    Bonsoir mercatog,

    (ravi de te retrouver)

    SendKeys inefficaces sur mon poste.

    Apparemment, je ne suis pas le seul en ce cas.

    API Windows??

    (je dois partir jusqu'à lundi)

    Bien Cordialement.

    Marcel

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.



  7. #7
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    juillet 2008
    Messages
    9 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : juillet 2008
    Messages : 9 430
    Points : 31 834
    Points
    31 834
    Par défaut
    Bonsoir Marcel
    API Windows??
    Code trouvé sur le net tel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    Option Explicit
     
    Private Declare Function GetWindow Lib "user32" (ByVal hWnd As Long, ByVal wCmd As Long) As Long
    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_KEYDOWN As Long = &H100
    Private Const KEYSTATE_KEYDOWN As Long = &H80
    Private SAVSTATE(0 To 255) As Byte
     
     
    Sub ClearImmediateWindow()
    Dim TmpState(0 To 255) As Byte
    Dim lPane As Long
     
    lPane = GetImmHandle
    If lPane = 0 Then MsgBox "Immediate Window not found."
    If lPane < 1 Then Exit Sub
     
     
    'Save the keyboardstate
    GetKeyboardState SAVSTATE(0)
     
     
    'Sink the CTRL (note we work with the empty TmpState)
    TmpState(vbKeyControl) = KEYSTATE_KEYDOWN
    SetKeyboardState TmpState(0)
    'Send CTRL+End
    PostMessage lPane, WM_KEYDOWN, vbKeyEnd, 0&
    'Sink the SHIFT
    TmpState(vbKeyShift) = KEYSTATE_KEYDOWN
    SetKeyboardState TmpState(0)
    'Send CTRLSHIFT+Home and CTRLSHIFT+BackSpace
    PostMessage lPane, WM_KEYDOWN, vbKeyHome, 0&
    PostMessage lPane, WM_KEYDOWN, vbKeyBack, 0&
     
     
    'Schedule cleanup code to run
    Application.OnTime Now + TimeSerial(0, 0, 0), "DoCleanUp"
     
     
    End Sub
     
     
    Sub DoCleanUp()
    ' Restore keyboard state
    SetKeyboardState SAVSTATE(0)
    End Sub
     
     
    'This function finds the Immediate Pane and returns a handle.
    'Docked or MDI, Desked or Floating, Visible or Hidden
    Function GetImmHandle() As Long
    Dim oWnd As Object, bDock As Boolean, bShow As Boolean
    Dim sMain As String, sDock As String, sPane As String
    Dim lMain As Long, lDock As Long, lPane As Long
     
     
    On Error Resume Next
    sMain = Application.VBE.MainWindow.Caption
    If Err <> 0 Then
        MsgBox "No Access to Visual Basic Project"
        GetImmHandle = -1
        Exit Function
    End If
    On Error GoTo 0
     
    For Each oWnd In Application.VBE.Windows
        If oWnd.Type = 5 Then
            bShow = oWnd.Visible
            sPane = oWnd.Caption
            If Not oWnd.LinkedWindowFrame Is Nothing Then
                bDock = True
                sDock = oWnd.LinkedWindowFrame.Caption
            End If
            Exit For
        End If
    Next oWnd
     
    lMain = FindWindow("wndclass_desked_gsk", sMain)
     
    If bDock Then
        'Docked within the VBE
        lPane = FindWindowEx(lMain, 0&, "VbaWindow", sPane)
        If lPane = 0 Then
            'Floating Pane.. which MAY have it's own frame
            lDock = FindWindow("VbFloatingPalette", vbNullString)
            lPane = FindWindowEx(lDock, 0&, "VbaWindow", sPane)
            While lDock > 0 And lPane = 0
                lDock = GetWindow(lDock, 2)            'GW_HWNDNEXT = 2
                lPane = FindWindowEx(lDock, 0&, "VbaWindow", sPane)
            Wend
        End If
    ElseIf bShow Then
        lDock = FindWindowEx(lMain, 0&, "MDIClient", vbNullString)
        lDock = FindWindowEx(lDock, 0&, "DockingView", vbNullString)
        lPane = FindWindowEx(lDock, 0&, "VbaWindow", sPane)
    Else
        lPane = FindWindowEx(lMain, 0&, "VbaWindow", sPane)
    End If
    GetImmHandle = lPane
    End Function
    Lance ClearImmediateWindow
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  8. #8
    Expert éminent
    Homme Profil pro
    Inscrit en
    août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : août 2010
    Messages : 3 453
    Points : 6 858
    Points
    6 858
    Par défaut
    Bonsoir,

    Ceci fonctionne assez bien chez moi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    Sub FenetreExecution()
     
        With Application.VBE.MainWindow.Collection("Exécution")
     
            .Visible = True 'affiche
     
            .SetFocus 'donne le focus
     
            Application.VBE.CommandBars.FindControl(, 756).Execute 'sélectionne tout
     
            SendKeys "{DELETE}" 'supprime
     
          .Close 'ferme la fenêtre
     
        End With
     
    End Sub
    Hervé.

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : juin 2009
    Messages : 652
    Points : 1 223
    Points
    1 223
    Par défaut
    Bonjour à tous,

    Une piste d'après Mokurin

    ATTENTION : ne pas lancer la procédure à partir d'Excel mais exclusivement dans le VBE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    '###################################################################################
    '### D'aprés l'article de Mokurin (February 14, 2006 at 5:32 am). Voir le lien   ###
    '### http://dailydoseofexcel.com/archives/2004/06/09/clear-the-immediate-window/ ###
    '###################################################################################
     
    Declare Function SendInput& Lib "user32.dll" ( _
      ByVal nInputs As Long, pInputs As INPUT_TYPE, ByVal cbSize As Long)
    Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" ( _
      Destination As Any, Source As Any, ByVal Length As Long)
     
    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
     
    Const INPUT_KEYBOARD = 1
    Const KEYEVENTF_KEYUP = &H2
    Const VK_CONTROL = &H11
     
    Sub ClearFenetreExecution()
    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 n
     
    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

  10. #10
    Expert éminent Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juillet 2009
    Messages
    3 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : juillet 2009
    Messages : 3 017
    Points : 6 166
    Points
    6 166
    Par défaut Clear exécution - Précision
    Bonsoir le Forum,

    Merci à tous pour vos réponses.

    Le code de merrcatog est bien effectif.

    Je dois y ajouter ceci pour informer puis activer la fenêtre Exécution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim i As Byte
    For i = 1 To 5
        Debug.Print "le grand mercatog du seigneur des anneaux"
    Next i
     
    Dim fen_exéc As Object
    Set fen_exéc = Application.VBE.ActiveWindow.Collection("Exécution")
    With fen_exéc
            .Visible = True 'affiche
            .SetFocus 'donne le focus
    End With
    Et si je souhaite fermer cette fenêtre, alors

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    fen_exéc.Close
    Set fen_exéc = Nothing
    Merci encore

    Bien Cordialement.

    Marcel

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.



  11. #11
    Expert éminent Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juillet 2009
    Messages
    3 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : juillet 2009
    Messages : 3 017
    Points : 6 166
    Points
    6 166
    Par défaut Le code de PMO2017
    Bonsoir PMO2017,

    Après celui de mercatog (voir mon post précédent), j'ai tenté l'activation de ton code.
    Celui-ci est aussi effectif (avec le même ajout)

    Merci à toi.

    Bien Cordialement.

    Marcel

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.



+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Codeblocks : Régler taille fenêtre exécution
    Par Jessycaz dans le forum Code::Blocks
    Réponses: 1
    Dernier message: 18/01/2012, 08h05
  2. Réponses: 3
    Dernier message: 05/12/2011, 10h30
  3. [Lazarus] [Ubuntu] Affichage fenêtre exécution / debugger
    Par ouzmoutous dans le forum Lazarus
    Réponses: 1
    Dernier message: 04/02/2011, 21h35
  4. [AC-2007] Exporter le contenu de la fenètre exécution en fin de traitement
    Par tenebriox dans le forum VBA Access
    Réponses: 2
    Dernier message: 28/10/2009, 15h53
  5. Réponses: 9
    Dernier message: 21/08/2007, 09h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo