Supprimer fichier
Résolu
Pierre1310
Messages postés
8564
Date d'inscription
Statut
Membre
Dernière intervention
-
Scoubi7 Messages postés 88 Date d'inscription Statut Membre Dernière intervention -
Scoubi7 Messages postés 88 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je viens vers vous car j'ai un petit problème ^^'
Actuellement, j'ai une feuille avec une macro d'enregistrement sous.
Ce que j'aimerai c'est que le fichier que j'ai enregistré sous soit automatiquement détruite après fermeture de celle-ci.
J'ai trouvé comment exécuter une macro à la fermeture :
J'ai tenté de le supprimer mais sans résultat, je pense que c'est parce qu'on ne peut pas supprimer un fichier ouvert.
J'avais pensé à passer par la fenêtre de commande, est-ce une bonne idée ou il y a plus simple?
N'hésitez pas à poser des questions, merci d'avance !
Je viens vers vous car j'ai un petit problème ^^'
Actuellement, j'ai une feuille avec une macro d'enregistrement sous.
Ce que j'aimerai c'est que le fichier que j'ai enregistré sous soit automatiquement détruite après fermeture de celle-ci.
J'ai trouvé comment exécuter une macro à la fermeture :
Private Sub Workbook_BeforeClose(Cancel As Boolean) ' avant la fermeture 'Kill ("C:\Users\PGnansounou\Music\Excel\Essai N" + numeroEssai + "\FALSE.xlsm") Kill "C:\Users\PGnansounou\Music\Excel\Essai N" + Sheets("enreg. sécur.moulage comp o").Range("AT5").Value _ & "DPGP-4 7-CS-EPE -01-F01 Demande de s curisationgammeenregistrementcl ture" + " Essai N" + numeroEssai + ".xlsm" End Sub
J'ai tenté de le supprimer mais sans résultat, je pense que c'est parce qu'on ne peut pas supprimer un fichier ouvert.
J'avais pensé à passer par la fenêtre de commande, est-ce une bonne idée ou il y a plus simple?
N'hésitez pas à poser des questions, merci d'avance !
A voir également:
- Vba supprimer fichier
- Supprimer rond bleu whatsapp - Guide
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier impossible à supprimer - Guide
- Fichier rar - Guide
12 réponses
Bonjour,
Curieuse demande!
Je l'ai quand même fait.
voici un dossier où se trouve un fichier vbs pour supprimer le classeur
Pour adapter au nom du classeur, clic droit sur le fichier vbs: Ouvrir avec le Bloc note
ensuite 2 classeurs pour en garder un pour avoir le code!
Ouvrir le classeur Essai allez dans ThisWorbook et activer les 2 lignes en commentaire. A partir de ce moment a la fermeture votre classeur est supprimé.
Bonne programmation
http://www.cjoint.com/c/FFyqsxc7FaQ
@+ Le Pivert
Curieuse demande!
Je l'ai quand même fait.
voici un dossier où se trouve un fichier vbs pour supprimer le classeur
Pour adapter au nom du classeur, clic droit sur le fichier vbs: Ouvrir avec le Bloc note
ensuite 2 classeurs pour en garder un pour avoir le code!
Ouvrir le classeur Essai allez dans ThisWorbook et activer les 2 lignes en commentaire. A partir de ce moment a la fermeture votre classeur est supprimé.
Bonne programmation
http://www.cjoint.com/c/FFyqsxc7FaQ
@+ Le Pivert
Bonsoir,
j'ai également besoin de cette fonction (pour supprimer le fichier, pas uniquement une feuille), mais le fichier joint n'est plus dispo... pouvez-vous le réactiver ?
Autrement, je pensais créer une macro "Sub Workbook_BeforeClose()" dans le classeur 2 via le classeur 1, dans laquelle il serait demandé de supprimer le classeur 1 à la fermeture du classeur 2... Mais j'ai suivi plein de tuto pour créer une macro dans un autre classeur et je n'ai rien réussi à faire fonctionner...
Autrement n°2, peut-on enregistrer un fichier *.xls en *.xlsx sans que le fichier *.xls subsiste ?
j'ai également besoin de cette fonction (pour supprimer le fichier, pas uniquement une feuille), mais le fichier joint n'est plus dispo... pouvez-vous le réactiver ?
Autrement, je pensais créer une macro "Sub Workbook_BeforeClose()" dans le classeur 2 via le classeur 1, dans laquelle il serait demandé de supprimer le classeur 1 à la fermeture du classeur 2... Mais j'ai suivi plein de tuto pour créer une macro dans un autre classeur et je n'ai rien réussi à faire fonctionner...
Autrement n°2, peut-on enregistrer un fichier *.xls en *.xlsx sans que le fichier *.xls subsiste ?
Bonjour,
voici le lien, suivre les instructions données dans le post 1:
http://www.cjoint.com/c/FLygZarsQDQ
voici le lien, suivre les instructions données dans le post 1:
http://www.cjoint.com/c/FLygZarsQDQ
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
cs_Le Pivert, j'ai apprécié ton attitude qui a été d'apporter une réponse à Pierre1310 et à moi-même sans tergiverser sur le pourquoi
Cela fait très longtemps que je cherche cette réponse, j'ai posté sur de multiples forums et à chaque fois, plutôt que de répondre à ma question, les différents intervenants me font perdre mon temps, car je dois me justifier sans relâche car selon eux je n'en ai pas besoin et il n'en voit pas l'utilité.
Merci encore pour cette attitude
Toutefois, la solution que tu as apporté à Pierre1310, ne me correspond pas, si tu le veux bien j'aimerai t'exposer mon problème :
J'ai créé différents fichiers excel et je souhaiterai que lorsqu'un fichier n'est pas présent sur mon disque dur, une macro (contenue dans chaque classeur) vérifie si ce fichier est présent sur le DD.
Auquel cas, elle supprime les mises en forme conditionnelles, les shapes et les macros (en sauvegardant en *.xlsx).
C'est là qu'intervient ton fichier : il faudrait qu'une fois la sauvegarde en *.xlsx faite, le fichier original en *.xls qui lance la macro soit effacé.
As-tu une solution à mon problème ? (avec la solution de pierre, il faudrait que chaque classeur possède son fichier *.vbs)
----- EDIT -----
Autant pour moi : je n'avais pas vu que je n'étais pas obliger de nommer le fichier explicitement...
Je fais mes essais et te tiens au courant
Cela fait très longtemps que je cherche cette réponse, j'ai posté sur de multiples forums et à chaque fois, plutôt que de répondre à ma question, les différents intervenants me font perdre mon temps, car je dois me justifier sans relâche car selon eux je n'en ai pas besoin et il n'en voit pas l'utilité.
Merci encore pour cette attitude
Toutefois, la solution que tu as apporté à Pierre1310, ne me correspond pas, si tu le veux bien j'aimerai t'exposer mon problème :
J'ai créé différents fichiers excel et je souhaiterai que lorsqu'un fichier n'est pas présent sur mon disque dur, une macro (contenue dans chaque classeur) vérifie si ce fichier est présent sur le DD.
Auquel cas, elle supprime les mises en forme conditionnelles, les shapes et les macros (en sauvegardant en *.xlsx).
C'est là qu'intervient ton fichier : il faudrait qu'une fois la sauvegarde en *.xlsx faite, le fichier original en *.xls qui lance la macro soit effacé.
As-tu une solution à mon problème ? (avec la solution de pierre, il faudrait que chaque classeur possède son fichier *.vbs)
----- EDIT -----
Autant pour moi : je n'avais pas vu que je n'étais pas obliger de nommer le fichier explicitement...
Je fais mes essais et te tiens au courant
En fait, ce qui m'embête dans cette méthode c'est que le fichier *.vbs doit être présent sur le DD et dans mon cas, je souhaiterais que quand on lance mon classeur sur un autre ordi (donc où le *.vbs n'est pas présent), les macros s'effacent et le fichier original soit supprimé.
Donc j'ai deux possibilités :
Soit je crée via la macro un *.vbs à chaque fois
Soit je crée une macro dans le 2° classeur via la macro du 1° classeur, où je demande à sa fermeture d'effacer le 1°classeur -> mais aucune des méthode que j'ai trouvé n'a fonctionné...
Soit je crée via la macro un *.vbs à chaque fois
Soit je crée une macro dans le 2° classeur via la macro du 1° classeur, où je demande à sa fermeture d'effacer le 1°classeur -> mais aucune des méthode que j'ai trouvé n'a fonctionné...
Je viens de trouver sur un site pourquoi cela ne marche pas depuis le début : il fallait que je coche "Accès approuvé au modèle d’objet du projet VBA" dans les options de sécurité...
Mais donc mon problème est toujours le même, si cette option n'est pas cocher sur l"autre" ordinateur ma macro ne fonctionnera pas...
Peut-être, puis-je en début de mon classeur vérifier si cette fonction est activé et auquel cas fermer le classeur... mais comment faire pour faire une telle vérif ?
Mais donc mon problème est toujours le même, si cette option n'est pas cocher sur l"autre" ordinateur ma macro ne fonctionnera pas...
Peut-être, puis-je en début de mon classeur vérifier si cette fonction est activé et auquel cas fermer le classeur... mais comment faire pour faire une telle vérif ?
Encore un nouveau problème...
J'ai bien créer mon 2° classeur avec une macro "ThisWorkbook\Workbook_BeforeClose" qui est censé effacé le 1° classeur à sa fermeture
Mais malheureusement, il faut que je ré-ouvre le 2°classeur puis le referme pour que cela fonctionne...
----- EDIT -----
J'ai résolu mon problème en rajoutant dans le 1° Classeur
" Application.DisplayAlerts = True
Application.EnableEvents = True
ThisWorkbook.Close savechanges:=False"
J'ai bien créer mon 2° classeur avec une macro "ThisWorkbook\Workbook_BeforeClose" qui est censé effacé le 1° classeur à sa fermeture
Mais malheureusement, il faut que je ré-ouvre le 2°classeur puis le referme pour que cela fonctionne...
----- EDIT -----
J'ai résolu mon problème en rajoutant dans le 1° Classeur
" Application.DisplayAlerts = True
Application.EnableEvents = True
ThisWorkbook.Close savechanges:=False"
voici un code qui crée un fichier vbs avec son contenu:
a toi de l'adapter, tu remarqueras que lorsqu'il y a des cotes dans le code original, j'ai mis des doubles cotes dans le code d'écriture
Option Explicit Const ForReading = 1, ForWriting = 2 Private Sub CommandButton1_Click() Dim fso, f Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.OpenTextFile("C:\Users\Daniel\Documents\Deletefile.vbs", ForWriting, True) 'adapter le chemin f.write ("On Error Resume Next") & vbCrLf f.write ("Set fso = WScript.CreateObject(""Scripting.FileSystemObject"")") & vbCrLf f.write ("Dim path") & vbCrLf f.write ("path = WScript.ScriptFullName") & vbCrLf f.write ("GetPath = Left(path, InStrRev(path, ""\""))") & vbCrLf f.write ("Dim nomfichier: nomfichier = ""Essai.xls"" ") & vbCrLf f.write ("Dim lieufichier: lieufichier = GetPath & nomfichier") & vbCrLf f.write ("If fso.FileExists(lieufichier) Then") & vbCrLf f.write (" fso.deletefile lieufichier") & vbCrLf f.write ("WScript.echo "" [OK] Le fichier à été supprimé!"" ") & vbCrLf f.write ("Else") & vbCrLf f.write ("WScript.echo "" [ ] Le fichier n'existe pas!"" ") & vbCrLf f.write ("End If") & vbCrLf f.write ("Set fso = Nothing") & vbCrLf f.write ("WScript.Quit") End Sub
a toi de l'adapter, tu remarqueras que lorsqu'il y a des cotes dans le code original, j'ai mis des doubles cotes dans le code d'écriture
Voilà le code opérationnel, a mettre dans ThisWorkbook:
Option Explicit Const ForReading = 1, ForWriting = 2 Private Sub Workbook_BeforeClose(Cancel As Boolean) 'Application.ThisWorkbook.Saved = True ' a activer Application.DisplayAlerts = False Dim oWsh creer_vbs Set oWsh = CreateObject("Shell.Application") 'oWsh.ShellExecute Workbooks(ActiveWorkbook.Name).Path & "\delete_file.vbs"' a activer Set oWsh = Nothing End Sub Private Sub creer_vbs() Dim fso, f Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.OpenTextFile(Workbooks(ActiveWorkbook.Name).Path & "\delete_file.vbs", ForWriting, True) f.write ("On Error Resume Next") & vbCrLf f.write ("Set fso = WScript.CreateObject(""Scripting.FileSystemObject"")") & vbCrLf f.write ("Dim path") & vbCrLf f.write ("path = WScript.ScriptFullName") & vbCrLf f.write ("GetPath = Left(path, InStrRev(path, ""\""))") & vbCrLf f.write ("Dim nomfichier: nomfichier = ""Essai.xls"" ") & vbCrLf 'adapter nom classeur f.write ("Dim lieufichier: lieufichier = GetPath & nomfichier") & vbCrLf f.write ("If fso.FileExists(lieufichier) Then") & vbCrLf f.write (" fso.deletefile lieufichier") & vbCrLf f.write ("WScript.echo "" [OK] Le fichier à été supprimé!"" ") & vbCrLf f.write ("Else") & vbCrLf f.write ("WScript.echo "" [ ] Le fichier n'existe pas!"" ") & vbCrLf f.write ("End If") & vbCrLf f.write ("Set fso = Nothing") & vbCrLf f.write ("WScript.Quit") End Sub Private Sub Workbook_Open() Dim msg As String Dim bln As Boolean 'Teste l'éditeur VBA On Error GoTo ErrorHandler bln = Application.VBE.MainWindow.Visible On Error GoTo 0 Exit Sub ErrorHandler: 'Routine de gestion d'erreur. '------------ 'Évalue le numéro d'erreur. Select Case Err.Description Case "L'accès par programme au projet Visual Basic n'est pas fiable" & vbLf msg = "Erreur " & Err.Number & " : " & Err.Description & vbCr & vbCr msg = msg & "Pour autoriser l'accès au projet Visual Basic : " & vbCr msg = msg & "- Menu « Outils » puis « Options... » ;" & vbCr msg = msg & "- Onglet « Sécurité » puis « Sécurité des macros... » ;" & vbCr msg = msg & "- Onglet « Éditeurs approuvés » ;" & vbCr msg = msg & "- Cocher la case « Faire confiance au projet Visual Basic » ;" & vbCr msg = msg & "- Valider ce choix par Ok (2 fois)." & vbCr & vbCr msg = msg & "- Fermer Excel et réouvrir " & ThisWorkbook.Name 'Il semble qu'une faille de sécurité autorise l'accès au projet lorsque le 'débogueur est lancé ou lorsque ce Handler est exécuté alors que l'option '« Faire confiance au projet Visual Basic » n'est pas cochée !!! 'Pour éviter toute ambiguité il est préférable de cocher cette option MsgBox msg, vbCritical Resume Next Case Else MsgBox Err.Description, vbCritical Stop End 'Resume Next End Select End Sub
Bien que je n'en vois pas la raison, car a quoi sert d'ouvrir un classeur que l'on veut supprimer?
Le fichier vbs supprime le classeur. Pour le démontrer, il suffit de cliquer dessus.
Dans le cas de votre demande je lance le fichier vbs à la fermeture du classeur;
Il n'y a pas de second classeur. Il suffit de mettre le code dans votre classeur et de changer le nom et l'extension dans le fichier vbs par le nom et l'extension de votre classeur. Votre classeur doit être dans le même dossier que le fichier vbs.
Voilà c'est comme cela que ça fonctionne, sinon je n'ai pas compris la question.
@+ Le Pivert
Si c'est ça voici le code à mettre dans l'evenement Private Sub Workbook_BeforeClose(Cancel As Boolean) de ThisWorkbook
@+