Dans mon cas, il arrive que le programme ne répond pas.
donc il s'agit bien d'un cas où Excel se bloque en raison de conditions particulières propres au fichier chargé
soit tu utilises la méthode proposée par l_autodidacte qui a l'inconvénient de tuer d'emblée le process Excel même s'il est parfaitement fonctionnel
soit tu tentes de récupérer l'état du process Excel pour détecter le blocage avant d'appeler GetObject
l'objet Win32_Process a une propriété séduisante : ExecutionState mais elle n'a toujours pas été implémentée par MS
tu peux toujours tester un process Excel en cours avec le script ci-dessous qui énumère toutes les propriétés de l'objet Win32_Process
peut-être que tu constateras qu'une propriété prend une valeur discernable lorsque le process ne répond pas (sans garantie)
@ l_autodidacte la ligne 7 comporte une erreur car elle renvoie une collection d'objets incomplets
la bonne syntaxe :
Set colProcessList = objWMIService.ExecQuery("SELECT * FROM Win32_Process WHERE Name = '" & NomProg & "'")
le script :
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
| Option Explicit
Dim NomProg, objItem, objWMIService, colProcessList,oExcel
'Set oExcel= CreateObject("Excel.Application") (neutralisé dans l'exemple)
NomProg = "Excel.exe"
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}\\.\root\cimv2")
Set colProcessList = objWMIService.ExecQuery("SELECT * FROM Win32_Process WHERE Name = '" & NomProg & "'")
If colProcessList.Count = 0 Then
MsgBox "Pas de process Excel"
End If
For Each objItem in colProcessList
Wscript.Echo "Caption: " & objItem.Caption & vbCrLf &_
"CreationClassName: " & objItem.CreationClassName & vbCrLf &_
"CreationDate: " & objItem.CreationDate & vbCrLf &_
"CSCreationClassName: " & objItem.CSCreationClassName & vbCrLf &_
"CSName: " & objItem.CSName & vbCrLf &_
"Description: " & objItem.Description & vbCrLf &_
"ExecutablePath: " & objItem.ExecutablePath & vbCrLf &_
"ExecutionState: " & objItem.ExecutionState & vbCrLf &_
"Handle: " & objItem.Handle & vbCrLf &_
"HandleCount: " & objItem.HandleCount & vbCrLf &_
"InstallDate: " & objItem.InstallDate & vbCrLf &_
"KernelModeTime: " & objItem.KernelModeTime & vbCrLf &_
"MaximumWorkingSetSize: " & objItem.MaximumWorkingSetSize & vbCrLf &_
"MinimumWorkingSetSize: " & objItem.MinimumWorkingSetSize & vbCrLf &_
"Name: " & objItem.Name & vbCrLf &_
"OSCreationClassName: " & objItem.OSCreationClassName & vbCrLf &_
"OSName: " & objItem.OSName & vbCrLf &_
"OtherOperationCount: " & objItem.OtherOperationCount & vbCrLf &_
"OtherTransferCount: " & objItem.OtherTransferCount & vbCrLf &_
"PageFaults: " & objItem.PageFaults & vbCrLf &_
"PageFileUsage: " & objItem.PageFileUsage & vbCrLf &_
"ParentProcessId: " & objItem.ParentProcessId & vbCrLf &_
"PeakPageFileUsage: " & objItem.PeakPageFileUsage & vbCrLf &_
"PeakVirtualSize: " & objItem.PeakVirtualSize & vbCrLf &_
"PeakWorkingSetSize: " & objItem.PeakWorkingSetSize & vbCrLf &_
"Priority: " & objItem.Priority & vbCrLf &_
"PrivatePageCount: " & objItem.PrivatePageCount & vbCrLf &_
"ProcessId: " & objItem.ProcessId & vbCrLf &_
"QuotaNonPagedPoolUsage: " & objItem.QuotaNonPagedPoolUsage & vbCrLf &_
"QuotaPagedPoolUsage: " & objItem.QuotaPagedPoolUsage & vbCrLf &_
"QuotaPeakNonPagedPoolUsage: " & objItem.QuotaPeakNonPagedPoolUsage & vbCrLf &_
"QuotaPeakPagedPoolUsage: " & objItem.QuotaPeakPagedPoolUsage & vbCrLf &_
"ReadOperationCount: " & objItem.ReadOperationCount & vbCrLf &_
"ReadTransferCount: " & objItem.ReadTransferCount & vbCrLf &_
"SessionId: " & objItem.SessionId & vbCrLf &_
"Status: " & objItem.Status & vbCrLf &_
"TerminationDate: " & objItem.TerminationDate & vbCrLf &_
"ThreadCount: " & objItem.ThreadCount & vbCrLf &_
"UserModeTime: " & objItem.UserModeTime & vbCrLf &_
"VirtualSize: " & objItem.VirtualSize & vbCrLf &_
"WindowsVersion: " & objItem.WindowsVersion & vbCrLf &_
"WorkingSetSize: " & objItem.WorkingSetSize & vbCrLf &_
"WriteOperationCount: " & objItem.WriteOperationCount & vbCrLf &_
"WriteTransferCount: " & objItem.WriteTransferCount
Next |
Partager