IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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 :

Interception et renvoi de valeur dialog box et message box


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Inscrit en
    Juin 2013
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 2
    Par défaut Interception et renvoi de valeur dialog box et message box
    Bonjour à tous!

    Voilà, je me permets de poster ce message sur ce forum car j'ai cherché une réponse à mes questions depuis maintenant deux jours et je n'ai rien trouvé. Je ne suis même pas sûr que mon problème ait une solution en fait, c'est pourquoi je fais appel à vous, qui êtes certainement bien plus compétents que moi, pour me donner un petit coup de pouce qui serait le bienvenu .

    Je vous expose donc mon problème. Je travaille actuellement en entreprise, sur un fichier excel ayant déjà été réalisé par des collègues étrangers avec un certains nombre de macros que l'on peut utiliser et qui nous sont très utiles. Le code de ces macros est cependant protégé par un mot de passe, que je n'ai pas le droit d'avoir, je n'y ai donc pas accès.

    J'utilise en particulier une macro qui se déclenche via un bouton sur une feuille excel, et qui fait simplement apparaître une dialog box au début, me demandant si je suis sûr de bien vouloir exécuter la macro, et une msg box une fois que la macro s'est exécutée (un vbOkonly) pour me dire que la macro s'est bien exécutée. Étant donné que je dois appliquer cette macro sur une centaine de fichiers, je voudrais essayer d'automatiser cela. Le problème est que cette dialog box et cette message box m'en empêchent. Étant donné que je ne cherche pas à modifier le coeur du code, j'ai donc cherché sur internet s'il y avait des moyens "d'intercepter" les box, de les cacher et de renvoyer les valeurs "Oui" pour la dialog box et "Ok" pour la message box.

    J'ai donc trouvé des explications sur ce qu'était le "hook" permettant la détection de l'activation d'une fenêtre (notamment dans l'exemple où l'on voudrait changer les boutons d'une dialog box) et je me demandais donc s'il n'y avait pas moyen de partir du hook pour faire ce que je recherche c'est à dire intercepter l'ouverture de la dialog box, renvoyer un "oui" et la cacher puis intercepter l'ouverture de la msgbox et renvoyer un "ok" et la cacher. Ca me permettrait d'automatiser l'application de la macro sur ma centaine de fichiers et ça me faciliterait grandement la vie ^^.

    Je mets à la suite le code que j'ai trouvé sur Internet (en exemple sur MSDN) et qui permet de changer les intitulés des boutons d'une Dialogbox :

    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
    Option Explicit
     
    ' Import
    Private Declare Function GetCurrentThreadId Lib "kernel32" () As Long
     
    Private Declare Function SetDlgItemText Lib "user32" _
        Alias "SetDlgItemTextA" _
        (ByVal hDlg As Long, _
         ByVal nIDDlgItem As Long, _
         ByVal lpString As String) As Long
     
    Private Declare Function SetWindowsHookEx Lib "user32" _
        Alias "SetWindowsHookExA" _
        (ByVal idHook As Long, _
         ByVal lpfn As Long, _
         ByVal hmod As Long, _
         ByVal dwThreadId As Long) As Long
     
    Private Declare Function UnhookWindowsHookEx Lib "user32" _
        (ByVal hHook As Long) As Long
     
    ' Handle to the Hook procedure
    Private hHook As Long
     
    ' Hook type
    Private Const WH_CBT = 5
    Private Const HCBT_ACTIVATE = 5
     
    ' Constants
    Public Const IDOK = 1
    Public Const IDCANCEL = 2
    Public Const IDABORT = 3
    Public Const IDRETRY = 4
    Public Const IDIGNORE = 5
    Public Const IDYES = 6
    Public Const IDNO = 7
     
    Public Sub MsgBoxSmile()
        ' Set Hook
        hHook = SetWindowsHookEx(WH_CBT, _
                                 AddressOf MsgBoxHookProc, _
                                 0, _
                                 GetCurrentThreadId)
     
        ' Run MessageBox
        MsgBox "Smiling Message Box", vbYesNo, "Message Box Hooking"
    End Sub
     
    Private Function MsgBoxHookProc(ByVal lMsg As Long, _
                                    ByVal wParam As Long, _
                                    ByVal lParam As Long) As Long
     
        If lMsg = HCBT_ACTIVATE Then
            SetDlgItemText wParam, IDYES, ":-)":ccool:
            SetDlgItemText wParam, IDNO, ":-(":ccool:
     
            ' Release the Hook
            UnhookWindowsHookEx hHook
        End If
     
        MsgBoxHookProc = False
    End Function
    Je me demandais donc si en remplaçant les 2 lignes où j'ai mis le smiley il n'y avait pas moyen de faire quelque chose ^^. Voilà je vous remercie d'avance de votre aide . Bonne journée!

    Estailer

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Si le code initial est protégé (càd ton éditeur vba est inaccessible), où veux tu écrire le nouveau code qui ferait ce que tu veux?

  3. #3
    Nouveau candidat au Club
    Inscrit en
    Juin 2013
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 2
    Par défaut
    Je pensais l'écrire dans le module d'un autre code, auquel je demanderais d'exécuter la macro nommée xxxx sur la feuille xxxx, en paramétrant au préalable les instructions pour que dans le cas où une dlgbox ou une msgbox quelconque apparaisse, répondre Yes ou Ok. Mais après comme je le disais je ne sais pas si c'est possible ^^' je n'ai pas réussi à trouver de réponse après de longues recherches donc il est possible que je ne puisse pas faire cela, mais je voulais juste vous demander votre avis ^^.

    Merci en tout cas de la réponse rapide c'est super sympa .

Discussions similaires

  1. [VB.NET] - Message Box - Intercepter le bouton Aide?
    Par xVINCEx dans le forum Windows Forms
    Réponses: 14
    Dernier message: 03/06/2021, 11h51
  2. jointure externe et renvoi de valeurs NULL
    Par ctobini dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 21/09/2006, 11h57
  3. Recordset vide alors que la requete renvoie des valeurs
    Par lepiou dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 07/06/2006, 11h36
  4. Intercepter le changement de valeur d'une variable
    Par Captain_JS dans le forum C++Builder
    Réponses: 5
    Dernier message: 07/01/2005, 09h04
  5. renvoie une valeur erronée
    Par m@thieu dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 09/12/2004, 18h09

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