Bonjour, j'ai une question toute bête mais qui me trotte en tête depuis un moment. Voila:
j'ai développé une appli qui fait pas mal appel à un classeur Excel. A chaque fois que j'ai besoin de mon classeur: j'utilise:
Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Dim MyExcel As New Excel.Application Dim wbExcel As Excel.Workbook wbExcel = MyExcel.Workbooks.Open(MonChemin)
pour l'ouvrir. Pour la fermeture, j'utilise:
Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 wbExcel.Close() MyExcel.Quit() MyExcel = Nothing wbExcel = Nothing
Et pourtant, il n'est pas rare que, lorsque je ferme mon programme et que je regarde le gestionnaire de tâches, certaines fenêtres Excel restent manifestement actives, parfois un bout de temps, parfois définitivement, mangeant ainsi de la ressource...
Du coup je n'y comprends plus rien, d'où mes questions:
1) Est-ce que je m'y prends mal pour fermer mon classeur? Y-a-t'il quelque chose à rajouter?
2) J'avais pensé opter pour un kill du processus. Mais est-ce aussi propre? Quel est le plus propre des 2?
En fait j'ai essayé ça avant l'ouverture de mon classeur (en utilisant une liste appelée ListeProc déclarée en début de script):
Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 ListProc.Clear() For Each p As Process In process.GetProcesses If p.ProcessName.Contains("EXCEL") = True Then Dim ProcPId = p.Id ListProc.Add(ProcPId) End If Next
puis ça après la fermeture:
Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 For Each p As Process In process.GetProcesses If p.ProcessName.Contains("EXCEL") = True Then Dim ProcPId = p.Id If ListProc.Contains(ProcPId) = False Then p.Kill() End If End If Next
C'est super efficace mais... Est-ce propre? Et lorsqu'une écriture dans le code survient avant la fermeture, est-ce que c'est risqué (genre perte de données si je brusque un peu trop la fermeture de la fenêtre)?
Pour info, tout se fait en arrière plan, sinon je les fermerais moi-même.
3) Dernière question... Y-a-t'il un moyen de connaitre le PPID d'un processus via vb.net? C'est pour fermer ce qui reste d'ouvert en fin de programme... J'avais pensé implémenter un bout de code en début de programme, et un bout de code en fin de programme, mais je risque de kill un document excel que j'aurais moi-même ouvert entre temps
En espérant que ceci inspire quelqu'un! Merci par avance pour vos réponses!
Bonne journée!
Partager