Fermer excell depuis access

Résolu
jeanluc065
Messages postés
134
Date d'inscription
samedi 23 septembre 2006
Statut
Membre
Dernière intervention
1 juin 2007
- 23 nov. 2006 à 12:32
jeanluc065
Messages postés
134
Date d'inscription
samedi 23 septembre 2006
Statut
Membre
Derniè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

16 réponses

jeanluc065
Messages postés
134
Date d'inscription
samedi 23 septembre 2006
Statut
Membre
Dernière intervention
1 juin 2007

27 nov. 2006 à 13:14
VOICI LA REPONSE DE Jean-Marc ( JMO ) qui marche très bien sauf que  c'est objProcess.Terminate   sans les ()
Merci JMO !

******************************
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
NextSet objWMIService = Nothing
Set colProcessList = Nothing
MsgBox vbCrLf&vbCrLf& compteur & " service(s) " & MyProcess &_
       " arrêté(s)",,"script terminé"

jean-marc
3
cs_JMO
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
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


jean-marc
0
Fianchetto
Messages postés
41
Date d'inscription
dimanche 13 février 2005
Statut
Membre
Dernière intervention
14 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...)
0
Fianchetto
Messages postés
41
Date d'inscription
dimanche 13 février 2005
Statut
Membre
Dernière intervention
14 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...)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_JMO
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
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.

jean-marc
0
cs_JMO
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
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



Set objWMIService = Nothing
Set colProcessList = Nothing
MsgBox vbCrLf&vbCrLf& compteur & " service(s) " & MyProcess &_
       " arrêté(s)",,"script terminé"





jean-marc
0
jeanluc065
Messages postés
134
Date d'inscription
samedi 23 septembre 2006
Statut
Membre
Derniè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.

Un tout grand merci à vous deux.
Bonne soirée,
JL
0
jeanluc065
Messages postés
134
Date d'inscription
samedi 23 septembre 2006
Statut
Membre
Dernière intervention
1 juin 2007

23 nov. 2006 à 18:25
Re bonjour Jean-Marc,

J'ai essayé ton code,  et j'obtiens un message d'erreur (surbrillance ) sur

'MsgBox objProcess.Name &vbCrLf& " id:" & objProcess.ProcessID
    objProcess.Terminate()

et sur 
Set colProcessList = Nothing
MsgBox vbCrLf&vbCrLf & compteur & " service(s) " & MyProcess & " arrêté(s)",,"script

Merci
JL
0
cs_MPi
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
20
24 nov. 2006 à 00:13
Si tu ouvres tes fichiers avec New Excel.Application ou CreateObject(....

Tu peux gérer les erreurs

On error goto Erreur

...

ton code...

....

Exit sub

Erreur:

    ObjExcel.Quit

    Set objExcel = Nothing

Normalement, ça devrait terminer la session Excel que tu as démarrée, non ?

Tu pourrais même mettre un MsgBox  avec vbYesNo pour demander si tu fermes ou non la session.

Faut dire que je n'ai pas tout suivi depuis le début...

MPi
0
jeanluc065
Messages postés
134
Date d'inscription
samedi 23 septembre 2006
Statut
Membre
Derniè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
0
cs_JMO
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
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.

jean-marc
0
cs_MPi
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
20
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.

MPi
0
jeanluc065
Messages postés
134
Date d'inscription
samedi 23 septembre 2006
Statut
Membre
Dernière intervention
1 juin 2007

25 nov. 2006 à 07:10
Bonjour MPI,

Effectivement, lors du plantage, j'ai un message d'erreur,


"erreur d'exécution 1004"      fin    débogage


Je clic fin mais le excell.exe  est toujours ouvert et je dois faire ctrl+alt+delete pour aller le fermer.
Merci pour ton intervention
Bonne journée
JL


 
0
cs_MPi
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
20
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

En principe, ça devrait régler le problème

MPi
0
jeanluc065
Messages postés
134
Date d'inscription
samedi 23 septembre 2006
Statut
Membre
Derniè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
0
cs_MPi
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
20
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.

MPi
0