Accueil > > > FERMER EXCEL CORRECTEMENT ET SIMPLEMENT
FERMER EXCEL CORRECTEMENT ET SIMPLEMENT
Information sur la source
Description
Voici un petit morceau de code qui vous permettra de fermer correctement et simplement un processus Excel, sans pour autant écrire une classe dédiée. 3 fonctions suffisent.
Source
- Public Class Form1
-
- 'Ajouter la référence au projet : Microsoft Excel Object Library
- 'Déclaration de notre objet Excel.
-
- Dim xlApp As Excel.Application
-
- Private Function ListID() As Int16()
- ' Get the ID's processes list in a array and sort it
- ' It is the only way to close Excel:
- ' To close Excel, we need to list the Excel ID's processes before user starts excel
- ' then we list them one more time just after opening Excel.
- ' We compare both of the lists we have to extract the new Excel ID of the brand new Excel
- ' session. So we can kill this process with the ID we got, without killing other Excel user
- ' session.
- ' L'explication ci-dessus résume l'explication générale de la méthode, cf présentation du code
- ' Get ID's processes list
- Dim Processes As Process() = Nothing
- Processes = Process.GetProcessesByName("EXCEL")
- ' Load ID Processes in Array
- Dim intProcesses(Processes.GetUpperBound(0)) As Int16
- Dim i As Int16
- For i = 0 To Processes.GetUpperBound(0)
- intProcesses(i) = CInt(Processes(i).Id.ToString)
- Next
- Return intProcesses
- End Function
-
- Private Function ExtractID(ByVal intFirstIDs As Int16(), ByVal intLastIDs As Int16()) As Int16
- Dim intID As Int16 = Nothing
- Dim intID_FirsList As Int16 = Nothing
- Dim intID_LastList As Int16 = Nothing
- Dim i As Int16 = Nothing
- For i = 0 To intLastIDs.GetUpperBound(0)
- intID_LastList = intLastIDs(i)
- If Array.IndexOf(intFirstIDs, intID_LastList) = -1 Then
- intID = intID_LastList
- Exit For
- End If
- Next
- Return intID
- End Function
-
- Private Sub closeExcelFile(ByVal intIDExcel As int16)
-
- If intIDExcel <> 0 Then
- If Process.GetProcessById(intIDExcel).HasExited = False Then
- Try
- Process.GetProcessById(intIDExcel).Kill()
- intIDExcel = 0
- Catch ex As Exception
- MessageBox.Show(ex.Message & ex.StackTrace, "Error while closing Excel integration.", _
- MessageBoxButtons.OK, MessageBoxIcon.Error)
- End Try
- End If
- End If
- End Sub
-
- Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
-
- dim myIDExcel As int16
-
- 'L'idée ici est de récupérer la liste d'ID des process qui tournent sur le PC. On recupère la
- 'liste avant de faire un New et on recupère la liste après avoir fait le New. Ainci il ne reste
- 'plus qu'à faire la différence des 2 listes grâce à la fonction ExtractID(,) pour retrouver le
- 'bon ID de notre process Excel. Il ne reste plus qu'à la killer une fois notre application
- 'terminée.
-
- 'Première liste
- Dim intFirstExcelIDs() As Int16 = ListID()
-
- 'Création de notre objet et attribution de l'ID
- xlApp = CType(CreateObject("Excel.Application"), Excel.Application)
-
- 'Seconde liste
- Dim intLastExcelIDs() As Int16 = ListID()
-
- 'Différence des 2 listes et récupération de notre ID
- myIDExcel = ExtractID(intFirstExcelIDs, intLastExcelIDs)
-
- 'Ici vous faites ce que vous voulez avec votre application Excel
- '
- '
- '
- 'Une fois terminée, vous pouvez fermer votre processus
-
- closeExcelFile(myIDExcel)
-
- End Sub
-
- End Class
Public Class Form1
'Ajouter la référence au projet : Microsoft Excel Object Library
'Déclaration de notre objet Excel.
Dim xlApp As Excel.Application
Private Function ListID() As Int16()
' Get the ID's processes list in a array and sort it
' It is the only way to close Excel:
' To close Excel, we need to list the Excel ID's processes before user starts excel
' then we list them one more time just after opening Excel.
' We compare both of the lists we have to extract the new Excel ID of the brand new Excel
' session. So we can kill this process with the ID we got, without killing other Excel user
' session.
' L'explication ci-dessus résume l'explication générale de la méthode, cf présentation du code
' Get ID's processes list
Dim Processes As Process() = Nothing
Processes = Process.GetProcessesByName("EXCEL")
' Load ID Processes in Array
Dim intProcesses(Processes.GetUpperBound(0)) As Int16
Dim i As Int16
For i = 0 To Processes.GetUpperBound(0)
intProcesses(i) = CInt(Processes(i).Id.ToString)
Next
Return intProcesses
End Function
Private Function ExtractID(ByVal intFirstIDs As Int16(), ByVal intLastIDs As Int16()) As Int16
Dim intID As Int16 = Nothing
Dim intID_FirsList As Int16 = Nothing
Dim intID_LastList As Int16 = Nothing
Dim i As Int16 = Nothing
For i = 0 To intLastIDs.GetUpperBound(0)
intID_LastList = intLastIDs(i)
If Array.IndexOf(intFirstIDs, intID_LastList) = -1 Then
intID = intID_LastList
Exit For
End If
Next
Return intID
End Function
Private Sub closeExcelFile(ByVal intIDExcel As int16)
If intIDExcel <> 0 Then
If Process.GetProcessById(intIDExcel).HasExited = False Then
Try
Process.GetProcessById(intIDExcel).Kill()
intIDExcel = 0
Catch ex As Exception
MessageBox.Show(ex.Message & ex.StackTrace, "Error while closing Excel integration.", _
MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End If
End If
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
dim myIDExcel As int16
'L'idée ici est de récupérer la liste d'ID des process qui tournent sur le PC. On recupère la
'liste avant de faire un New et on recupère la liste après avoir fait le New. Ainci il ne reste
'plus qu'à faire la différence des 2 listes grâce à la fonction ExtractID(,) pour retrouver le
'bon ID de notre process Excel. Il ne reste plus qu'à la killer une fois notre application
'terminée.
'Première liste
Dim intFirstExcelIDs() As Int16 = ListID()
'Création de notre objet et attribution de l'ID
xlApp = CType(CreateObject("Excel.Application"), Excel.Application)
'Seconde liste
Dim intLastExcelIDs() As Int16 = ListID()
'Différence des 2 listes et récupération de notre ID
myIDExcel = ExtractID(intFirstExcelIDs, intLastExcelIDs)
'Ici vous faites ce que vous voulez avec votre application Excel
'
'
'
'Une fois terminée, vous pouvez fermer votre processus
closeExcelFile(myIDExcel)
End Sub
End Class
Conclusion
Vous pouvez modifier la fonction closeExcelFiles() pour pouvoir lui passer en paramètre l'id du process de manière à pouvoir fermer autant de processus Excel que vous voulez. personnellement je l'ai adapté et j'utilise un tableau d'ID Excel.
Si vous avez des questions, ou si j'ai oublié des morceaux de code qui rend la source ci-dessus illogique, faites m'en part.
Je tiens à remercier gregory_forel de sa contribution. En effet mon code est adapté de son propre code que l'on peut trouver à l'adresse suivante : http://www.vbfrance.com/codes/FERMER-CORRECTEMENT- EXCEL-KILL-EXCEL_43802.aspx
J'ai retravaillé sa source car j'utilise pas mal de propriétés des book/sheets d'excel.
Pour tous commentaire n'hésitez pas
Historique
- 05 octobre 2007 16:16:46 :
- Ajout de quelques commentaires d'explication
- 05 octobre 2007 16:18:33 :
- Correction quelques fautes grossières.
- 05 octobre 2007 16:25:45 :
- Mise en page.
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Fermeture d'une application [ par Charlie ]
Allo... Y'as-tu un API qui peut fermer une application dans le taskmanager. Ce que je veux faire c'est fermer excel lorsque son visible=false sans dev
Excel-process ne se kill pas après fermeture de mon fichier [ par mastere30 ]
Hello,voici un truc encore tout nouveau pour moi.J'ai crée un formulaire Excel avec une grosse macro VBA. Quand je l'utilise via Excel normale, pas de
Fermeture Form et Excel [ par Nikos620 ]
Bonjour,- comment fait-on pour fermer une form avec la croix en haut à droite de la form ? (Pour l'instant j'utilise form.hide...mais l'application n'
Fermeture excel sans devoir repondre oui [ par petiflamand ]
Bonjour je voudrais savoir comment fermer excel sans devoir repondre oui au changement d'excelMerci pour fermer excel j'utiliseClasseurXLS.Workbooks.C
[Excel / VBA] Fermeture Excel [ par sql84 ]
Bonjour,est-ce possible de fermer Excel depuis une macro (Excel / VBA) ?je veux dire fermer completement le logiciel et pas seulement les feuillesPar
Annulation de fermeture d'application Excel [ par pilounet54 ]
Bonjour, J'ai une Application excel dans laquelle 2 classeurs sont ouverts. Je souhaiterais annuler la fermeture de l'application si l'utilisateur c
interdire la fermeture du formulaire vb [ par tchywallace ]
Salut Je suis entrains de faire une application ou je voudrais interdire la possibilité a l'utilisateur de fermer le formulaire par le bouton "FERMER
Fermer un fichier excel à 12h00 [ par johnny67 ]
Bonjour désolé de ma question idiote, je ne suis meme pas sur d'etre dans la bonne section. Voila, je souhaiterais savoir comment faire pour qu'un fic
Mettre des instructions en cas de fermeture d'un document excel par la croix ou le menu office [ par glemoin ]
Bonjour, Je développe une petite application et je souhaiterais pouvoir agir sur la fermeture de mon document, j'explique. Quand une personne vient à
[VBA] MsgBox à la fermeture d'un fichier Excel [ par poulain35 ]
Bonsoir, Je suis bloqué. Je veux mettre un MsgBox dans mon appli lorsqu'un fichier Excel ce ferme, mais je ne veux pas que la macro soit dans mon fi
|
Derniers Blogs
GESTION D'EXCEPTION AVEC LES TASKSGESTION D'EXCEPTION AVEC LES TASKS par richardc
Nous avons vu dans un précédent article comment utiliser Task pour effectuer des opérations dans un autre thread.
Malheureusement, comme tout le monde n'est pas parfait, il se peut que cette exécution se passe mal et qu'une exception se produise.
La...
Cliquez pour lire la suite de l'article par richardc DéMARRONS AVEC LES TASKSDéMARRONS AVEC LES TASKS par richardc
Que vous le vouliez ou non, le développement multi-tâche est maintenant une obligation pour toute nouvelle application. Il est donc vital d'en comprendre les mécanismes et de s'y mettre le plus tôt possible.
En attendant le .NET Framework 4.5 avec le...
Cliquez pour lire la suite de l'article par richardc SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|