[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   -
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
 
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   Statut Membre Dernière intervention   365
 
Comment on peut utiliser cette opérateur ? Je trouve pas d'explications claires sur google <.<....
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
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   Statut Membre Dernière intervention   365
 
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 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 275
 
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   Statut Membre Dernière intervention   365
 
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 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 275
 
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   Statut Membre Dernière intervention   365
 
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 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 275
 
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   Statut Membre Dernière intervention   365
 
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 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 275
 
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   Statut Membre Dernière intervention   7
 
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