Supprimer fichier excel avec macro

Résolu/Fermé
jah_haile_selassie Messages postés 60 Date d'inscription mardi 31 mars 2009 Statut Membre Dernière intervention 25 juin 2009 - 8 avril 2009 à 10:57
jah_haile_selassie Messages postés 60 Date d'inscription mardi 31 mars 2009 Statut Membre Dernière intervention 25 juin 2009 - 10 avril 2009 à 14:44
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
A voir également:

44 réponses

qmike Messages postés 1506 Date d'inscription mardi 19 juillet 2005 Statut Membre Dernière intervention 18 juin 2012 594
8 avril 2009 à 11:06
bonjour
Dans ce cas, utilise le planificateur de tâches windows
bonne journée
0
jah_haile_selassie Messages postés 60 Date d'inscription mardi 31 mars 2009 Statut Membre Dernière intervention 25 juin 2009
8 avril 2009 à 11:46
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...
0
Utilisateur anonyme
8 avril 2009 à 11:47
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
0
jah_haile_selassie Messages postés 60 Date d'inscription mardi 31 mars 2009 Statut Membre Dernière intervention 25 juin 2009
8 avril 2009 à 13:27
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
0

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

Posez votre question
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
8 avril 2009 à 13:38
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
0
jah_haile_selassie Messages postés 60 Date d'inscription mardi 31 mars 2009 Statut Membre Dernière intervention 25 juin 2009
8 avril 2009 à 13:53
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
0
Utilisateur anonyme
8 avril 2009 à 14:20
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
0
jah_haile_selassie Messages postés 60 Date d'inscription mardi 31 mars 2009 Statut Membre Dernière intervention 25 juin 2009
8 avril 2009 à 15:02
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 :(
0
jah_haile_selassie Messages postés 60 Date d'inscription mardi 31 mars 2009 Statut Membre Dernière intervention 25 juin 2009
8 avril 2009 à 15:18
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
0
Utilisateur anonyme
8 avril 2009 à 15:20
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 ?
0
jah_haile_selassie Messages postés 60 Date d'inscription mardi 31 mars 2009 Statut Membre Dernière intervention 25 juin 2009
8 avril 2009 à 15:32
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.
0
Utilisateur anonyme
8 avril 2009 à 15:38
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 ?
0
jah_haile_selassie Messages postés 60 Date d'inscription mardi 31 mars 2009 Statut Membre Dernière intervention 25 juin 2009
8 avril 2009 à 15:39
oui ce sera mieux ainsi! Merci encore ? Stp envoi moi un exemple. Oui écrire dans fichier texte ailleurs mais pas sur le classuer.
Merci
0
jah_haile_selassie Messages postés 60 Date d'inscription mardi 31 mars 2009 Statut Membre Dernière intervention 25 juin 2009
8 avril 2009 à 15:58
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?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
8 avril 2009 à 16:33
Ne dispose tu vraiment pas d'une cellule "libre"? même feuille 18 cellule ZE 32156 ?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
8 avril 2009 à 16:45
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
0
jah_haile_selassie Messages postés 60 Date d'inscription mardi 31 mars 2009 Statut Membre Dernière intervention 25 juin 2009
8 avril 2009 à 17:06
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
0
jah_haile_selassie Messages postés 60 Date d'inscription mardi 31 mars 2009 Statut Membre Dernière intervention 25 juin 2009
8 avril 2009 à 17:09
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
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
8 avril 2009 à 18:32
c'est faisable, cependant cela dépends du nom des fichiers sauvegardés...
0
Utilisateur anonyme
8 avril 2009 à 21:01
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
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
0