[EXCEL VBA] Fermeture classeur

Fermé
LeDénicheur Messages postés 565 Date d'inscription samedi 5 janvier 2008 Statut Membre Dernière intervention 1 décembre 2013 - 21 juin 2012 à 21:13
borntobealive Messages postés 138 Date d'inscription jeudi 17 juillet 2014 Statut Membre Dernière intervention 25 février 2019 - 22 août 2014 à 12:23
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




A voir également:

7 réponses

Akiko Nyuki
21 juin 2012 à 21:26
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)

++
0
LeDénicheur Messages postés 565 Date d'inscription samedi 5 janvier 2008 Statut Membre Dernière intervention 1 décembre 2013 358
21 juin 2012 à 22:45
Comment on peut utiliser cette opérateur ? Je trouve pas d'explications claires sur google <.<....
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
22 juin 2012 à 13:17
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...
0
LeDénicheur Messages postés 565 Date d'inscription samedi 5 janvier 2008 Statut Membre Dernière intervention 1 décembre 2013 358
23 juin 2012 à 13:45
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 ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 209
Modifié par eriiic le 23/06/2012 à 17:04
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
0
LeDénicheur Messages postés 565 Date d'inscription samedi 5 janvier 2008 Statut Membre Dernière intervention 1 décembre 2013 358
24 juin 2012 à 11:56
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
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 209
24 juin 2012 à 12:10
Re,

ça a bien marché chez moi avec windows 7 et excel 2003...
C'est sur un fichier particulier ?
Si non, il y a peut-être une histoire de droits.

eric
0
LeDénicheur Messages postés 565 Date d'inscription samedi 5 janvier 2008 Statut Membre Dernière intervention 1 décembre 2013 358
24 juin 2012 à 13:23
Tu as ouvert un fichier, réalisé un transfert de feuille vers un autre fichier, sauvegarder, fermer le fichier, et le supprimer ? et ça a fonctionné ? :(
Je peux avoir ton code complet ?
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 209
Modifié par eriiic le 24/06/2012 à 14:09
Non pas fait de transfert de feuille ni de sauvegarde (SaveChanges:=False) tu n'en parlais pas. Mais je ne vois pas ce que ça changerait.
D'ailleurs, c'est bien l'autre fichier que celui de la macro que tu veux fermer ?
eric
0
LeDénicheur Messages postés 565 Date d'inscription samedi 5 janvier 2008 Statut Membre Dernière intervention 1 décembre 2013 358
Modifié par LeDénicheur le 24/06/2012 à 14:30
Oui, c'est bien l'autre fichier qui ne contient pas la macro que je chercher à fermer.
Mais j'ai l'impression que le fait de copier des éléments, même après fermeture du fichier, il garde des choses en "liaison" qui ne se coupe uniquement que quand l'application Excel se ferme....
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 209
Modifié par eriiic le 24/06/2012 à 15:14
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
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
0
borntobealive Messages postés 138 Date d'inscription jeudi 17 juillet 2014 Statut Membre Dernière intervention 25 février 2019 7
22 août 2014 à 12:23
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
puis
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
0