Supprimer fichier

Résolu/Fermé
Pierre1310 Messages postés 8564 Date d'inscription lundi 21 décembre 2015 Statut Membre Dernière intervention 21 juillet 2020 - 24 juin 2016 à 10:45
Scoubi7 Messages postés 88 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 22 février 2017 - 28 janv. 2017 à 18:15
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 :
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 !

12 réponses

cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
Modifié par cs_Le Pivert le 24/06/2016 à 18:18
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
2
Pierre1310 Messages postés 8564 Date d'inscription lundi 21 décembre 2015 Statut Membre Dernière intervention 21 juillet 2020 649
24 juin 2016 à 18:42
Mais donc je dois forcément ouvrir un autre classeur excel pour supprimer le 1er :x
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
25 juin 2016 à 06:47
La question: supprimer le classeur à la fermeture

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
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
Modifié par cs_Le Pivert le 25/06/2016 à 08:32
En relisant la question, j'ai un doute, ne serait-ce pas la feuille que tu veux supprimer à la fermeture?

Si c'est ça voici le code à mettre dans l'evenement Private Sub Workbook_BeforeClose(Cancel As Boolean) de ThisWorkbook

Application.DisplayAlerts = False 'empecher message alerte
    Sheets("Feuil2").Delete 'adapter nom feuille
    Application.DisplayAlerts = True


@+
0
Scoubi7 Messages postés 88 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 22 février 2017 1
Modifié par Scoubi7 le 24/12/2016 à 02:03
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 ?
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
24 déc. 2016 à 07:52
Bonjour,

voici le lien, suivre les instructions données dans le post 1:

http://www.cjoint.com/c/FLygZarsQDQ
0
Scoubi7 Messages postés 88 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 22 février 2017 1
24 déc. 2016 à 22:55
Merci cs_Le Pivert
0

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

Posez votre question
Scoubi7 Messages postés 88 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 22 février 2017 1
Modifié par Scoubi7 le 24/12/2016 à 23:41
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
0
Scoubi7 Messages postés 88 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 22 février 2017 1
25 déc. 2016 à 19:33
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é.
0
Scoubi7 Messages postés 88 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 22 février 2017 1
25 déc. 2016 à 21:39
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é...
0
Scoubi7 Messages postés 88 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 22 février 2017 1
Modifié par Scoubi7 le 25/12/2016 à 22:50
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 ?
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
26 déc. 2016 à 08:07
0
Scoubi7 Messages postés 88 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 22 février 2017 1
Modifié par Scoubi7 le 26/12/2016 à 00:33
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"
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
26 déc. 2016 à 08:30
voici un code qui crée un fichier vbs avec son contenu:

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
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
26 déc. 2016 à 09:30
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

0
Scoubi7 Messages postés 88 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 22 février 2017 1
28 janv. 2017 à 18:15
Désolé cs_Le Pivert pour ma réponse tardive, je n'avais pas vu la notification...

Merci beaucoup pour ton aide !
0