Supprimer fichier excel avec macro
Résolujah_haile_selassie Messages postés 61 Statut Membre -
Je suis devenu un inconditionnel du forum comment ça marche? En effet j'ai déjà fait un post ici qui a été resolu. Je dis un merci a tout le forum. Le but c'est que j'ai une macro qui me crèè , copie et sauvegarde mon fichier excel courant dans un repertoire différent et cela toutes les heures. Ce problème a été resolu maintenant j'ai envie de créer une macro qui supprimera automatiquement les fichiers sauvegarder la veille. Cette suppression doit se faire qu'une seule fois dans la journée; J'ai pu trouver une macro qui fonctionne et me supprime le contenu du dossier, car après la sauvegarde du (des) fichier(s) il va falloir faire en sorte que les fichiers ayant quelques jours soient automatiquement détruits. Mais la macro de destruction doit se déclencher une seule fois dans la journée. voic le code ma macro:
Sub SupprContenu()
Dim Fic As String
Fic = Dir("\\Ds-srv-hector\commun\DPAPH\Service Tarification\Sauvegarde temps réel\")
Do While Fic <> ""
Kill "\\Ds-srv-hector\commun\DPAPH\Service Tarification\Sauvegarde temps réel\" & Fic
Fic = Dir
Loop
End Sub
Elle supprime tout le contenu du dossier mais je ne sait pas comment faire pour l'obliger a se démarrer automatiquement a l'ouverture du fichier excel et une seule fois dans la journée et où la mettre exactement.
Merci pour toutes les bonnes volontés
Configuration: Windows XP Internet Explorer 7.0
- Vba supprimer un fichier
- Comment ouvrir un fichier epub ? - Guide
- Fichier bin - Guide
- Impossible de supprimer un fichier - Guide
- Supprimer le fichier hiberfil.sys - Guide
- Comment ouvrir un fichier 7z - Guide
44 réponses
- 1
- 2
- 3
Un utilisateur cherche à automatiser la suppression quotidienne des fichiers de sauvegarde Excel dans un répertoire, déclenchée une fois par jour à l'ouverture d'un classeur. Plusieurs solutions ont été proposées: utiliser une macro déclenchée à l'ouverture, créer un dossier daté pour les sauvegardes et lancer l'effacement une seule fois par jour. Des échanges ont aussi porté sur l'utilisation de MkDir et du chemin UNC, sur des erreurs comme chemin introuvable et sur l'intérêt d'un fichier témoin pour n'autoriser l'effacement qu'une fois. Une approche plus robuste peut consister à déclencher l'opération via le planificateur de tâches Windows ou via une macro qui écrit une marque dans un fichier texte et vérifie cette marque à chaque ouverture.
oui mais le planificateur de tâche ne spécifie pas la macro mais tout le programme qui doit s'exécuter et en plus comment faire si par exemple je veux supprimer uniquement les fichiers sauvegardés de plus de 3 jours? Et a vrai dire je ne sait pas trop comment le faire avec...
pour démarrer à l'ouverture du classeur:
aller dans la proc : Private Sub Workbook_Open() qui se trouve dans 'thisworkbook' (dans la partie visual basic)
le problème elle se lancera à chaque ouverture du classeur. S'il est ouvert plusieurs fois par jour , rajouter du code pour écrire dans une cellule (la date du jour par exemple) quand la proc se lance. Dans cette proc vérifier que la date du jour existe avant de lancer les actions .
Si je n'ai pas été assez clair
Oui j'ai compris la methode; merci en tout et je l'ai deja testé mais le problème c'est que je ne sais pas comment écrire cela-----> "rajouter du code pour écrire dans une cellule (la date du jour par exemple) ".
J'ai pu faire que ma macro se demarre automatiquement , mais elle me supprime tout le contenu du dossier alors que je veux qu'elle supprime en fonction de la date.
Un exemple vaut mieux que mille discours. Stp , je suis un vrai débutant en excel et VBA. C'est pour mon stage que je taff dessus depuis deux semaines.
Merci d'avance a toutes les bonnes volontés
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionTout au début de ta macro dans : Private Sub Workbook_Open() place ce petit test :
Private Sub Workbook_Open()
If Activesheet.Range("A1") = "" then <---- Si la cellule A1 de ta feuille active est vide Alors ----->
Activesheet.Range("A1") = CDate(Date) <----- inscrit la date du jour dans la cellule A1 de ta feuille active --->
else <----- Sinon ----->
If Activesheet.Range("A1") = CDate(Date) then <---- Si la cellule A1 de ta feuille active est égale à la date du jour Alors ----->
exit sub <---- cette macro ne s'exécutera pas ----->
end if
end if
Je l'ai fait mais rien ne fonctionne :( j'ai fait ceci dans mon workbook:
Private Sub Workbook_Open()
If ActiveSheet.Range("A1") = "" Then
ActiveSheet.Range("A1") = CDate(Date)
Else
If ActiveSheet.Range("A1") = CDate(Date) Then
Exit Sub
End If
End If
Call auto_open
Call creation
End Sub
Call auto_open c'est une procedure que j'ai dans un module pour me supprimer mes fichiers sauvegarder la veille et creation idem mais lui il copie et sauvegarde mes fichiers. Je n'ai aucune erreur de compilation mais il m'efface tjrs tout le contenu du dossier.
Voici le code de la procédure création qui crèè la copie et sauvegarde ailleurs, ce code marche bien:
Sub creation()
Dim Chemin As String
Dim fname As String
debut:
Start = Timer
intervalle = 60
Do While Timer < Start + intervalle
DoEvents ' Donne le contrôle à d'autres processus.
Loop
Chemin = "\\Ds-srv-hector\commun\DPAPH\Service Tarification\Sauvegarde temps réel\"
fname = Chemin & "test- " & Day(Date) & "-" & Month(Date) & "-" & Year(Date) & " - " & Hour(Time) & "H" & Minute(Time) & "m" & Second(Time) & "s" & ".xls"
ActiveWorkbook.SaveCopyAs Filename:=fname
GoTo debut
End Sub
et auto_open qui supprime voici son code:
Sub auto_open()
Dim Fic As String
Fic = Dir("\\Ds-srv-hector\commun\DPAPH\Service Tarification\Sauvegarde temps réel\")
Do While Fic <> ""
Kill "\\Ds-srv-hector\commun\DPAPH\Service Tarification\Sauvegarde temps réel\" & Fic
Fic = Dir
Loop
End Sub
Peut-être que je fait mal quelque chose mais je ne sait pas comment ça marche. Merci encore
Private Sub Workbook_Open()
If ActiveSheet.Range("A1") <> CDate(Date) Then 'si A1 différent de la date du jour (vide ou date de la veille...)
ActiveSheet.Range("A1") = CDate(Date) 'on écrit la date du jour
Call auto_open ' on lance l'effacement
Call creation
End If ' Il n'y a pas de sinon puisque si A1 = date du jour on ne fait rien
End Sub
Bon courage
Je tiens tout d'abords a te remercier du temps consacré. J'avance a tout petit pas, et je comprends des choses c'est déjà ça bon bref. la macro m'écrit la date comme voulue. J'arrive a lancer mon effacement, puis j'arrive a lancer ma création. Jusque là tout va bien. Puis je referme mon dossier ou fichier excel et je le réouvre. et voilà que la macro d'éffacement se lance et éfface tout le contenu du dossier alors qu'elle ne devait pas se lancer... elle doit se lancer qu'une seule fois dans la journée et en plus ma macro création ne se lance plus! Alors qu'elle devrait se lancer.
Voici la code que j'ai dans le workbook:
Private Sub Workbook_Open()
If ActiveSheet.Range("A1") <> CDate(Date) Then 'si A1 différent de la date du jour (vide ou date de la veille...)
ActiveSheet.Range("A1") = CDate(Date) 'on écrit la date du jour
Call auto_open ' on lance l'effacement
Call creation
End If ' Il n'y a pas de sinon puisque si A1 = date du jour on ne fait rien
End Sub.
Je ne rien modifier dans auto_open et creation. Normalement la création doit se faire même après effacement mais la rien. et l'éffacement doit se faire qu'une fois par jour.
Help me please :(
C'est deja un très bon départ! Mais pour des raisons d'espace ou technique n'est-il pas possible de faire une comparaison avec la date du système(date du jour) sans pour autant l'écrire sur une cellule?
Ensuite permettre la suppression uniquement de fichiers sauvegarder il y'a par exemple 3 jours de cela?
J'approche du but grace a vous merci encore pour votre aide
Par ailleurs si ta proc de création doit se lancer à chaque ouverture, sort son appel du test si...<>...
Es tu sur que dans ta programmation il n'y a pas un autre appel à ta proc de suppression ?
C'est juste un détail que je veux savoir si c'est possible sans écrire
Merci a toi encore! vraiment merci pour l'aide.
on pourrait créer un fichier texte ayant pour nom la date , si le fait d'écrire dans une cellule te gênes ?
Merci
Sub creerFichierTexte()
Dim fichierTexte As String
fichierTexte = Day(Date) & "-" & Month(Date) & "-" & Year(Date) & " - " & Hour(Time) & "H" & Minute(Time) & "m" & Second(Time) & "s" & ".txt"
End Sub
Comment l'intégrer dans ma condition?
Dim fichiertexte as string
fichiertexte = Dir "CheminComplet\" & Day(Date) & "-" & Month(Date) & "-" & Year(Date) & " - " & Hour(Time) & "H" & Minute(Time) & "m" & Second(Time) & "s" & ".txt"
if fichiertexte = "" then
fichierTexte = Day(Date) & "-" & Month(Date) & "-" & Year(Date) & " - " & Hour(Time) & "H" & Minute(Time) & "m" & Second(Time) & "s" & ".txt"
Call auto_open
Call creation
else
Call creation
end if
ça marche!!! je vais célébré ça! Mais je m'aperçoit que j'ai tjrs un souci. Est-ce que je ne peut pas supprimer un certaine nombre de fichier en fonction de la date? Par exemple supprimer tous les fichiers qui ont été enregistrés il y'a de cela 2 ou 3 jours? Parceque la dans mon état du code je supprime tout les fichier contenu dans le dossier.
Point avancé: macro effacement se lance q'une fois ça c'est bien mais comment supprimer juste les fichiers d'il y'a un mois par exemple?
Salut a toi et bonne fin de soirée. Merci encore
Private Sub Workbook_Open()
Dim fichiertexte As String
Dim Chemin As String
Chemin = Dir("\\Ds-srv-hector\commun\DPAPH\Service Tarification\Sauvegarde temps réel\\")
fichiertexte = Chemin & Day(Date) & "-" & Month(Date) & "-" & Year(Date) & " - " & Hour(Time) & "H" & Minute(Time) & "m" & Second(Time) & "s" & ".txt"
If fichiertexte = "" Then
fichiertexte = Day(Date) & "-" & Month(Date) & "-" & Year(Date) & " - " & Hour(Time) & "H" & Minute(Time) & "m" & Second(Time) & "s" & ".txt"
Call auto_open
Call creation
Else
Call creation
End If
End Sub
Ca avance!
Je doute que ça fonctionne comme tu veux :
1)Je ne vois pas quand le fichier (pour indiquer que l'effacement est effectué) est crée
2)Le nom du fichier comportant les minutes et secondes de la date d'enregistrement du fichier, 15 secondes plus tard si on ouvre ton classeur il ne trouvera pas l'existence du fameux fichier et considérant que c'est la première ouverture de la journée et donc lancera de nouveau l'effacement.
de plus
fichiertexte = Chemin & Day(Date) & "-" & Month(Date) & "-" & Year(Date) & " - " & Hour(Time) & "H" & Minute(Time) & "m" & Second(Time) & "s" & ".txt" If fichiertexte = "" Then fichiertexte = Day(Date) & "-" & Month(Date) & "-" & Year(Date) & " - " & Hour(Time) & "H" & Minute(Time) & "m" & Second(Time) & "s" & ".txt" Call auto_open Call creation
Tu initialises ta variable 'fichiertexte' , et dans la foulée tu testes si elle ext vide !!
les instructions de ton if ne seront jamais exécutées
Bon courage et à bientôt
- 1
- 2
- 3