jeanluc065
Messages postés134Date d'inscriptionsamedi 23 septembre 2006StatutMembreDernière intervention 1 juin 2007
-
23 nov. 2006 à 12:32
jeanluc065
Messages postés134Date d'inscriptionsamedi 23 septembre 2006StatutMembreDernière intervention 1 juin 2007
-
27 nov. 2006 à 13:14
Bonjour à toutes et tous,
Depuis access 2002, j'importe automatiquement des fichiers excell mais hélas, parfois, à cause de la présentation d'un fichier excell, le système se plante.
Hélas, le fichier excell a été ouvert et il le reste.
Je dois alors avoir recours au CTRL + alt + delete pour aller fermer excell.exe
Quelqu'un connaît il le code à placer sur un seul bouton pour le faire en évitant toutes les commandes manuelles
Merci d'avance.
JL
cs_JMO
Messages postés1854Date d'inscriptionjeudi 23 mai 2002StatutMembreDernière intervention24 juin 201827 23 nov. 2006 à 12:38
Bonjour à tous....
salut jean-luc,
Encore moi,
en vb6, il y a kill.....
sinon:
'Arrêt d'un Process
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\" _
& strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = 'EXCEL.exe'")
For Each objProcess in colProcessList
MsgBox objProcess.Name &vbCrLf& " id:" & objProcess.ProcessID
objProcess.Terminate()
Next
Set objWMIService = Nothing
Set colProcessList = Nothing
Fianchetto
Messages postés41Date d'inscriptiondimanche 13 février 2005StatutMembreDernière intervention14 décembre 2006 23 nov. 2006 à 13:58
un problème similaire m'est déja arrivé. Par contre, adopter directement la solution de Jean-marc me pose un peu problème, car si l'utilisateur a déja lancé Excel avant mon application, je vais tout killer et je suis pas sur que cela soit apprécié . Donc y a t'il un moyen de killer seulement les processus qui sont des fils de mon application (en gardant d'une manière ou d'une autre leur pid ou je ne sais quoi d'autre...)
Fianchetto
Messages postés41Date d'inscriptiondimanche 13 février 2005StatutMembreDernière intervention14 décembre 2006 23 nov. 2006 à 13:58
un problème similaire m'est déja arrivé. Par contre, adopter directement la solution de Jean-marc me pose un peu problème, car si l'utilisateur a déja lancé Excel avant mon application, je vais tout killer et je suis pas sur que cela soit apprécié . Donc y a t'il un moyen de killer seulement les processus qui sont des fils de mon application (en gardant d'une manière ou d'une autre leur pid ou je ne sais quoi d'autre...)
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_JMO
Messages postés1854Date d'inscriptionjeudi 23 mai 2002StatutMembreDernière intervention24 juin 201827 23 nov. 2006 à 16:18
Re,
Effectivement, Fianchetto , objProcess.Terminate() s'effectue pour
tous les processes "excel.exe".
Le problème de jean-luc est qu'il est en période de "grands" tests,
répétés x fois (casssssssséééééé le jean-luc).
Ses fichiers excel ne se ferment pas et les objets utilisés ne sont pas supprimés.
Celà l'évitera de passer manuellement par le gestionnaire de tâches.
Il doit, certainement, bosser sur son poste local et non sur un server de prod.
Donc, en test, il peut rajouter un bouton avec le code proposé
en y ajoutant une inputbox pour le nom du service à supprimer.
cs_JMO
Messages postés1854Date d'inscriptionjeudi 23 mai 2002StatutMembreDernière intervention24 juin 201827 23 nov. 2006 à 16:53
Re,
Avec inputbox:
'Arrêt d'un Process
MyProcess = InputBox(vbCrLf&vbCrLf&"Mettre le service à arrêter"_
&vbCrLf&"Ex: excel","Arrêt du ou des processes", "excel")
strComputer "." : compteur 0
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\" _
& strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = '" & MyProcess & ".exe'")
For Each objProcess in colProcessList
'MsgBox objProcess.Name &vbCrLf& " id:" & objProcess.ProcessID
objProcess.Terminate()
compteur = compteur + 1
Next
jeanluc065
Messages postés134Date d'inscriptionsamedi 23 septembre 2006StatutMembreDernière intervention 1 juin 2007 23 nov. 2006 à 18:08
Bonjour à tous,
Salut Jean-Marc,
Salut Fianchetto ,
Effectivement, comme dit JMO, je suis en période de grands tests et c'est énervant de devoir passer par 36 clics pour simplement fermer excell. JMO a déjà contribué pas mal à mon projet.
Et je ne veux surtout pas "killer" les fichiers.
Je vais tester et je vous tiens au courant.
jeanluc065
Messages postés134Date d'inscriptionsamedi 23 septembre 2006StatutMembreDernière intervention 1 juin 2007 24 nov. 2006 à 07:18
Bonjour à tous,
Salut MPI,
Ta solution, ok si tout se passe bien quoique çà devrait être superflu.
Mon problème, c'est quand la séquence plante et qu'un fichier excell avait été ouvert. Il faut la terminer via ctrl + alt+delete, et j'aurais voulu trouver une commande à placer dans le formulaire pour le faire via un bouton.
Merci, bonne journée.
JL
cs_JMO
Messages postés1854Date d'inscriptionjeudi 23 mai 2002StatutMembreDernière intervention24 juin 201827 24 nov. 2006 à 12:11
Bonjour à tous....
Salut jean-luc,
En vb6, il faut peut-être déclarer les composants de wmi ???
Ce n'est pas la 1ère fois que je propose un code s'y appuyant...
wmi est complexe mais très intéressant.
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 24 nov. 2006 à 23:40
Peut-être que je saisis mal, mais si l'application Access plante lors d'une manipulation avec Excel (ou autre, éventuellement), ça devrait te générer une erreur dans une procédure, non ?
Et dans la gestion de cette erreur, tu peux fermer tes objets qui pointent vers le ou les classeurs que tu as ouverts par code. Il ne devrait donc plus y avoir de session Excel ouverte par la suite.
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 25 nov. 2006 à 13:59
Plutôt que faire FIN, tu devrais faire débogage et voir d'où provient l'erreur. Il est possible que tu doives faire F8 plusieurs fois pour te rendre à la ligne en défaut.
À ce moment, tu places une gestion d'erreur dans la procédure en cause.
En début de procédure:
On error goto Erreur
En fin de procédure:
Exit sub 'ou Function selon le cas
Erreur:
If err.Number = 1004 then
msgbox Err.number & vbcrlf & err.description 'pas nécessaire mais bon...
'ou Msgbox "L'application Excel va se terminer. Il faudra recommencer"
objExcel.Quit 'Fermeture de la session
set objExcel = Nothing
End if
End sub
jeanluc065
Messages postés134Date d'inscriptionsamedi 23 septembre 2006StatutMembreDernière intervention 1 juin 2007 25 nov. 2006 à 15:42
Bonjour,
Oui, tout à fait d'accord, mais vu le nombre d'erreurs possibles dans mes fichiers, je ne saurais pas prévoir toutes les erreurs et leur gestion.
C'est pour çà que je souhaitais un truc basique.
Merci quand même
JL
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 25 nov. 2006 à 16:54
La gestion d'erreur, c'est un truc basique
C'est certain qu'il peut y avoir plusieurs types d'erreurs, mais il arrive souvent avec Excel que l'erreur 1004 survienne. Comme tu es en développement, tu dois t'apercevoir de ces erreurs et tenter de les corriger, mais si tu ne veux pas devoir tout fermer et utiliser Ctrl-Alt-Del à chaque fois, ça peut être intéressant.