Bonjour,

depuis du code VBA sous excel, je cherche à exécuter la commande suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
svn log D:\SVN\trunk\GIF\face.gif | grep "|" >d:\tmp\fic_res.log
pour cela j'ai codé

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
 
Private Type STARTUPINFO
 cb As Long
 lpReserved As String
 lpDesktop As String
 lpTitle As String
 dwX As Long
 dwY As Long
 dwXSize As Long
 dwYSize As Long
 dwXCountChars As Long
 dwYCountChars As Long
 dwFillAttribute As Long
 dwFlags As Long
 wShowWindow As Integer
 cbReserved2 As Integer
 lpReserved2 As Long
 hStdInput As Long
 hStdOutput As Long
 hStdError As Long
End Type
 
Private Type PROCESS_INFORMATION
 hProcess As Long
 hThread As Long
 dwProcessID As Long
 dwThreadID As Long
End Type
 
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal _
 hHandle As Long, ByVal dwMilliseconds As Long) As Long
 
Private Declare Function CreateProcessA Lib "kernel32" (ByVal _
 lpApplicationName As Long, ByVal lpCommandLine As String, ByVal _
 lpProcessAttributes As Long, ByVal lpThreadAttributes As Long, _
 ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, _
 ByVal lpEnvironment As Long, ByVal lpCurrentDirectory As Long, _
 lpStartupInfo As STARTUPINFO, lpProcessInformation As _
 PROCESS_INFORMATION) As Long
 
Private Declare Function CloseHandle Lib "kernel32" (ByVal _
 hObject As Long) As Long
 
Private Const NORMAL_PRIORITY_CLASS = &H20&
Private Const INFINITE = -1&
 
Public Sub ExecCmd(cmdline As String)
 Dim proc As PROCESS_INFORMATION
 Dim start As STARTUPINFO
 Dim ReturnValue As Integer
 
 ' Initialize the STARTUPINFO structure:
 start.cb = Len(start)
 
 ' Start the shelled application:
 ReturnValue = CreateProcessA(0&, cmdline$, 0&, 0&, 1&, _
 NORMAL_PRIORITY_CLASS, 0&, 0&, start, proc)
 
 ' Wait for the shelled application to finish:
 Do
 ReturnValue = WaitForSingleObject(proc.hProcess, 0)
 DoEvents
 Loop Until ReturnValue <> 258
 
 ReturnValue = CloseHandle(proc.hProcess)
End Sub
 
Sub Testing(sNomFichier As Variant)
Dim ch As String
 
  ' cas qui ne marchent pas
  'ch = "svn.exe log " & sNomFichier & " | grep ""|"" >" & Environ("TMP") & "\fic_res.log"
  'ch = "svn.exe log " & sNomFichier & " | grep ""|"""
  'ch = "svn.exe log " & sNomFichier & " >" & Environ("TMP") & "\fic_res.log"
 
  'cas qui marche
  'ch = "svn.exe log " & sNomFichier
 'ExecCmd ch
 MsgBox "Process Finished"
End Sub
le seul cas où ça marche, c'est quand je fais une commande simple (sans le "|" ni le ">").
Or, je ne veux pas installer un batch (.bat) qui englobe toute la commande et qui serait appelé par le VBA.

Y a t-il une solution ?

Merci