Salut à tous!

Je cherche à éxecuter une macro par un .bat ... J'ai lu pas mal de trucs dont je me suis inspiré (inspiré = copier-coller)
Seulement, j'ai un message très méchant qui s'affiche me disant :

Run -time error '1004':

Cannot run the macro "MessageDLE". The macro may not be available in the workbook or all macros may be disabled
Pour arriver à ce message, voici mes différents morceaux de codes...

Le fichier batch :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
"C:\Program Files\Microsoft Office\Office12\EXCEL.EXE" /cmd/MessageDLE "C:\Users\Symone\Desktop\EPI\Suivi_EPI_v1.1.xls"
Le module ThisWorkbook (sous Microsoft Excel Objects) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
Private Sub Workbook_Open()
 
    Call ExecuterViaBatch
    'MsgBox macmdline
 
End Sub
Le module OpenViaBat (sous Modules) :

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
Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (lpString As Any) As Long
 
Private Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (lpString1 As Any, lpString2 As Any) As Long
 
Private Declare Function GetCommandLine Lib "kernel32" Alias "GetCommandLineA" () As Long
 
'fonction proposée par Tony Proctor sur le forum public de Microsoft : microsoft.public.vb.winapi
Private Function GetCmd() As String
 
   Dim lpCmd As Long
   lpCmd = GetCommandLine()
   GetCmd = Space$(lstrlen(ByVal lpCmd))
   lstrcpy ByVal GetCmd, ByVal lpCmd
 
End Function
 
 
Sub ExecuterViaBatch()
 
    'Call MessageDLE
 
Dim macmdline As Variant
Dim monparam As Variant 'déclare une variable
 
    'macmdline = "/cmd/MessageDLE"
    macmdline = GetCmd 'affecte la valeur de la ligne de commande
    If Not IsNull(macmdline) Then 'si la variable est nulle
        If Len(macmdline) > 0 Then 'on s'assure qu'il y a eu une ligne de commande passée
            If InStr(macmdline, "/cmd") > 0 Then
                macmdline = Replace(macmdline, ThisWorkbook.FullName, "", , , vbTextCompare)
                monparam = Split(macmdline, "/cmd")
                Application.Run Mid(monparam(1), 2, Len(monparam(1)) - 1)
                'Call MessageDLE
            End If
        End If
    End If
 
    MsgBox macmdline
 
End Sub
Si çà peut vous aider, la macro à éxecuter : MessageDLE() se situe sous Modules, dans un autre module appelé ReccueilInfo...

J'avais, au départ, remplacé le code de Workbook_Open() par celui de ExecuterViaBatch() pour éxectuer directement la macro mais rien ne se passait :
¤Il semble qu'une Private Function ne peut être appelée que par une Sub / Function du même module (je me trompe peut être)
¤En plus, j'ai lu qu'il ne fallait pas placer la fonction dans un module dépendant du classeur ou d'une feuille...

NB : j'ai mis en place un mot de passe pour accéder au code, mais je ne pense pas qu'il pose problème pour l'éxecution des macros...

Des idées?!

Merci Beaucoup