VB.NET Problème pour fermer un fichier Excel déja ouvert
Bonjour,
J'ai créer une petite application VB.NET qui ouvre un fichier Excel (Listing.xlsx) qui sert de modèle.
Je travaille avec VisualStudio 2010 et Excel version 2108 Microsoft 365.
C'est un tableau avec uniquement des titres dans la première ligne.
Comme je ne souhaite pas modifier ce fichier, j'utilise une boite de dialogue pour enregistrer une copie de celui-ci avec un nouveau nom (New_Listing.xlsx) en laissant également la possibilité de choisir l'emplacement.
Mon script rempli le tableau et lorsqu'il est terminé, celui-ci s'affiche.
Tout fonctionne sauf dans un cas, c'est si jamais l'utilisateur a lancé une première fois le script, que le fichier "New_Listing.xlsx" reste ouvert et qu'on relance le script.
Comme le fichier est ouvert, je ne parviens pas à l'écraser.
Donc juste avant de faire le "save as", j'ai ajouté une ligne pour fermer un eventuel fichier "New_Listing.xlsx" qui serait toujours ouvert.
J'ai rajouté un Try au cas où ce fichier doublon n'existerait pas mais j'ai une erreur sur cette nouvelle ligne où je tente de fermer le fichier ouvert.
Sur un forum, j'avais trouvé une idée intéressante, c'est d'utiliser la fonction kill, mais çà ne marche pas, je suppose que le kill efface le fichier uniquement si il n'est pas ouvert.
J'ai l'impression que le MsExcel est uniquement associé au fichier de départ "Listing.xlsx" et que l'utiliser pour aller lire un autre fichier n'est pas possible mais je ne comprends pas comment faire.
Voici mon code :
Code:
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
|
MsExcel = CreateObject("Excel.Application")
MsExcel.DisplayAlerts = False
Using sfd As SaveFileDialog = New SaveFileDialog() With {.InitialDirectory = "c:\users\" & Environment.UserName & "\Documents\", .FileName = "New_Listing", .Filter = "Excel Workbook|*.xlsx"}
If sfd.ShowDialog() = DialogResult.OK Then
Try
MsExcel.Workbooks(sfd.FileName).close(False) 'Bug sur cette ligne
Catch ex As Exception
End Try
MsExcel.workbooks.Open(Application.StartupPath & "\Listing.xlsx")
MsExcel.Workbooks(1).SaveAs(sfd.FileName)
Else
MsExcel.quit()
Exit Sub
End If
End Using
MsExcel.DisplayAlerts = True
'
' Remplissage du tableau
'
MsExcel.visible = True |
Quelqu'un peut-il m'aider ?
Merci par avance.
VB.NET Problème pour fermer un fichier Excel déja ouvert
Bonjour Popo et un grand merci pour ces explications.
En effet, il peut y avoir d'autres fichiers ouverts que je ne dois pas fermer.
J'étais en train d'essayer le paramètre "shell" mais pour l'instant sans succés.
Je n'ai pas encore tenté la fonction GetObject, je vais donc déja faire une boucle pour essayer d'identifier toutes les instances ouvertes.
Par contre, je ne comprends pas pourquoi repasser par un CreateObject en cas d'erreur, un try si on ne trouve rien ne marchera pas ?
Comme mon problème c'est de fermer un fichier Excel ouvert pourquoi devoir recréer une nouvelle instance ?
Merci d'avance.
VB.NET Problème pour fermer un fichier Excel déja ouvert
Merci pour cet exemple très complet, je vais m'en inspirer pour mon problème de fichier ouvert !