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