[EXCEL VBA] Fermeture classeur
LeDénicheur
Messages postés
624
Statut
Membre
-
borntobealive Messages postés 167 Statut Membre -
borntobealive Messages postés 167 Statut Membre -
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
--
Prenez le temps de bien rédiger vos questions, et nous prendrons le temps d'y répondre.
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
--
Prenez le temps de bien rédiger vos questions, et nous prendrons le temps d'y répondre.
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)
++ -
Comment on peut utiliser cette opérateur ? Je trouve pas d'explications claires sur google <.<....
-
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 :filetodelete.Delete
par :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 ?
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Bonjour,
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
-
-
-
-
-
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 supprimeSub 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
blabla.copy
puisblala.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