[EXCEL VBA] Fermeture classeur
LeDénicheur
Messages postés
565
Date d'inscription
Statut
Membre
Dernière intervention
-
borntobealive Messages postés 138 Date d'inscription Statut Membre Dernière intervention -
borntobealive Messages postés 138 Date d'inscription Statut Membre Dernière intervention -
Bonsoir,
Je réalise une macro effectuant des modifications sur un classeur en fonction d'un autre classeur ouvert. A la fin de la macro, je désire fermer l'un des deux classeurs, et supprimer le fichier correspondant à ce classeur. Pour celà j'utilise ce code :
With Application.FileDialog(msoFileDialogOpen)
.Title = "Commentçamarche"
.InitialFileName = ActiveWorkbook.Path
.AllowMultiSelect = False
.Filters.Clear
.Filters.Add "Excel Files", "*.xlsm"
.Show
old_file = .SelectedItems(1)
Set fs = CreateObject("Scripting.FileSystemObject")
Set filetodelete = fs.GetFile(old_file)
End With
Workbooks.Open "" & old_file & ""
.....
.....
.....
.....
Workbooks(recent_file).Save
Workbooks(old_file).Close
filetodelete.Delete <======== PAS LA PERMISSION
Or il me renvoie que je n'ai pas la permission de le faire, car le fichier est toujours "utilisé". Pourquoi la commande Workbooks.close ne libère pas le fichier ? Comment faire sans fermer totalement l'application (Application.quit) ?
Merci d'avance
Je réalise une macro effectuant des modifications sur un classeur en fonction d'un autre classeur ouvert. A la fin de la macro, je désire fermer l'un des deux classeurs, et supprimer le fichier correspondant à ce classeur. Pour celà j'utilise ce code :
With Application.FileDialog(msoFileDialogOpen)
.Title = "Commentçamarche"
.InitialFileName = ActiveWorkbook.Path
.AllowMultiSelect = False
.Filters.Clear
.Filters.Add "Excel Files", "*.xlsm"
.Show
old_file = .SelectedItems(1)
Set fs = CreateObject("Scripting.FileSystemObject")
Set filetodelete = fs.GetFile(old_file)
End With
Workbooks.Open "" & old_file & ""
.....
.....
.....
.....
Workbooks(recent_file).Save
Workbooks(old_file).Close
filetodelete.Delete <======== PAS LA PERMISSION
Or il me renvoie que je n'ai pas la permission de le faire, car le fichier est toujours "utilisé". Pourquoi la commande Workbooks.close ne libère pas le fichier ? Comment faire sans fermer totalement l'application (Application.quit) ?
Merci d'avance
A voir également:
- [EXCEL VBA] Fermeture classeur
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Si ou excel - Guide
- Excel compter cellule couleur sans vba - Guide
7 réponses
As-tu essayé un DoEvent avant le delete ?
Ne sais t-on jamais... cela permettra peut être de librérer le lock sur le fichier (DoEvent permet de rendre la main au système)
++
Ne sais t-on jamais... cela permettra peut être de librérer le lock sur le fichier (DoEvent permet de rendre la main au système)
++
Bonjour,
Sans savoir comment est déclaré filetodelete, et puisque tu l'affectes par un Set machin = truc (Set filetodelete = fs.GetFile(old_file)), essaye peut être de remplacer :
ça devrait libérer...
Sans savoir comment est déclaré filetodelete, et puisque tu l'affectes par un Set machin = truc (Set filetodelete = fs.GetFile(old_file)), essaye peut être de remplacer :
filetodelete.Deletepar :
Set filetodelete = Nothing
ça devrait libérer...
Il est définit ainsi
Set fs = CreateObject("Scripting.FileSystemObject")
Set filetodelete = fs.GetFile(old_file)
"filetodelete = nothing " libère la variable, mais le fichier est toujours occupé, car même à la main, je ne peux pas le supprimer...il faut avoir attendu que je ferme totalement l'application pour pouvoir le supprimer...
Une autre solution ?
Set fs = CreateObject("Scripting.FileSystemObject")
Set filetodelete = fs.GetFile(old_file)
"filetodelete = nothing " libère la variable, mais le fichier est toujours occupé, car même à la main, je ne peux pas le supprimer...il faut avoir attendu que je ferme totalement l'application pour pouvoir le supprimer...
Une autre solution ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
Une autre solution ?
utiliser kill, plus simple
eric
Une autre solution ?
utiliser kill, plus simple
Sub test() chemin = "D:\tmp\" fichier = "Classeur2.xls" Workbooks(fichier).Close SaveChanges:=False Kill (chemin & fichier) End Sub
eric
Même résultat, permission refusée (Erreur 70)
Le programme considère toujours que le fichier est occupé, même après un Workbook.close
Le programme considère toujours que le fichier est occupé, même après un Workbook.close
re,
réalisé un transfert de feuille vers un autre fichier, sauvegarder, fermer le fichier, et le supprimer ?
Pourquoi l'enregistrer si c'est pour le supprimer ????
Y copier une feuille ne change rien : on ferme et on supprime
eric
réalisé un transfert de feuille vers un autre fichier, sauvegarder, fermer le fichier, et le supprimer ?
Pourquoi l'enregistrer si c'est pour le supprimer ????
Y copier une feuille ne change rien : on ferme et on supprime
Sub test() Dim chemin As String, fichier As String Sheets("Feuil1").Copy Before:=Workbooks("Classeur2.xls").Sheets(1) chemin = "D:\tmp\" fichier = "Classeur2.xls" Workbooks(fichier).Close SaveChanges:=False Kill (chemin & fichier) End Sub
eric
Je ne sais pas si tu as trouvé une solution et si tu t'interesse toujours à la réponse mais si tu as utilisé le presse papier pour copier tes données ( genre
alors les liens entre les données de B et A bloquent toujours la fermeture de B
Montre-nous comment tu as fais tes copie dans un premier temps ça nous fera avancer
blabla.copypuis
blala.paste)
alors les liens entre les données de B et A bloquent toujours la fermeture de B
Montre-nous comment tu as fais tes copie dans un premier temps ça nous fera avancer