Supprimer fichier excel avec macro
Résolu
jah_haile_selassie
Messages postés
60
Date d'inscription
Statut
Membre
Dernière intervention
-
jah_haile_selassie Messages postés 60 Date d'inscription Statut Membre Dernière intervention -
jah_haile_selassie Messages postés 60 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
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
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
A voir également:
- Vba supprimer un fichier
- Supprimer rond bleu whatsapp - Guide
- Fichier bin - Guide
- Impossible de supprimer un fichier - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
44 réponses
Salut qmike,
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...
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...
Bonjour,
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
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
Bpnjour Priouman;
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
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 question
Salut,
Tout 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
Tout 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
Salut,
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
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
On vérifie si la date du jour est inscrite dans A1 pour savoir si tu as déjà ouvert ton fichier et donc lancer tes effacement, si la date existe, il ne faut pas lancer les effacements. tu mis l'appel à tes sub d'effacement après le test, elles seront donc toujours lancées. Il faut les mettre dans le test si A1 est vide (donc si c'est la première ouverture du classeur, puisque dès la première ouverture on écrit la date en A1 pour justement ne plus lancer l'effacement)
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
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
salut;
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 :(
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 :(
La solution pour que ma macro de création se lance encore je l'ai appelé après le End If dans workbook. Et en plus ma macro de suppression ne supprime plus les fichiers après une première ouverture.
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
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
Une question bête: as tu enregistré ton classeur avant de fermer. Il ne faudrait pas que ce soit l'ancienne version de ton programme qui tourne!
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 ?
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 ?
J'ai vu cela; j'ai compris qu'il fallait que j'appelle ma procedure de création après le End If de workbook, et l'effacement ne se repete plus! tou va bien. Mais je voulais savoir s'il est possible de passé par un autre moyen que d'écrire la date sur une cellule? on peut pas juste comparer avec la date du système mais sans écrire?
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.
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 n'est pas obligé d'écrire en A1, mais on est bien obligé d'écrire quelque part comme quoi on a déjà fait la suppression du jour (pour ne pas la refaire)!
on pourrait créer un fichier texte ayant pour nom la date , si le fait d'écrire dans une cellule te gênes ?
on pourrait créer un fichier texte ayant pour nom la date , si le fait d'écrire dans une cellule te gênes ?
oui ce sera mieux ainsi! Merci encore ? Stp envoi moi un exemple. Oui écrire dans fichier texte ailleurs mais pas sur le classuer.
Merci
Merci
Voici le code du fichier texte que je crèèe:
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?
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?
peut être comme cela :
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
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
Merci Mille merci!!!
ç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
ç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
Voici le code de ma workbook:
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
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
De retour.
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
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
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