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 :
Pour arriver à ce message, voici mes différents morceaux de codes...Run -time error '1004':
Cannot run the macro "MessageDLE". The macro may not be available in the workbook or all macros may be disabled
Le fichier batch :
Le module ThisWorkbook (sous Microsoft Excel Objects) :
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 OpenViaBat (sous Modules) :
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
Si çà peut vous aider, la macro à éxecuter : MessageDLE() se situe sous Modules, dans un autre module appelé ReccueilInfo...
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
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
Partager