VBA sauvegarde clef USB récalcitrante

gaelick

XLDnaute Nouveau
Bonsoir à tous, bonsoir au forum XLD et à tous les excéliens !
Voici mon grooooooooos problème.
J'ai crée une macro qui quand on ferme le fichier (17 megas!) par la croix en haut à droite sauvegarde sur place et enregistre le fichier dans le disque dur "maître" jusque là rien de bien nouveau mais en suivant il envoie et sauvegarde sur une clef USB ce même fichier en ajoutant la date et l'heure dans le titre. Mais en plus il fait cela 7 fois puis arrivé à la 8° il "écrase" la 1° sauvegarde
(de sorte que sur la clef il ne doit rester que les 7 dernières sauvegardes).
Ouep mais problème il y a... Le débogueur dit = Erreur d'execution 70:permission refusée sur FichSauv.Delete
Je joins mon code.
------------------
Sub SauvegardeClasseur1()
Dim Nom As String, Fichier As String, Jour As String, Mois As String, Année As String, Heure1 As String, Heure2 As String
'Permet de sauvegarder le classeur sur son emplacement, rien d'extraordinaire'
ActiveWorkbook.Save
'Mise en forme de la date et l'heure. Le 0 semble permettre de gérer la forme "04" janvier au lieu de "4" janvier''
Année = Year(Date)
Mois = Format(Month(Date), "0#")
Jour = Format(Day(Date), "0#")
Heure1 = Format(Hour(Time), "0#")
Heure2 = Format(Minute(Time), "0#")
'Mise en forme de la dénomination de la sauvegarde'
Fichier = "Happy Hour 7.8 " & "du " & Année & "-" & Mois & "-" & Jour & " à " & Heure1 & "H" & Heure2
'Chemin de destination'
Fichier = "E:\SauvegardeFichiers\" & Fichier
'Mise en forme de la sauvegarde'
ActiveWorkbook.SaveAs Filename:=Fichier, FileFormat:=xlNormal
'Début de la partie gestion des archives de sauvegarde'
Dim Dossier As Object, FichSauv As Object
Dim Chemin As String, Nb As Byte
'Indication du chemin où se trouve la sauvegarde'
Chemin = "E:\SauvegardeFichiers\"
Set Dossier = CreateObject("Scripting.FileSystemObject").GetFolder(Chemin)
'Gestion des 7 sauvegardes avec écrasement systématique de la plus ancienne'
Nb = Dossier.Files.Count
For Each FichSauv In Dossier.Files
If Nb > 7 Then
FichSauv.Delete
Exit Sub
End If
Next
Application.Quit
End Sub
--------------------------
Je soumet mon problème à votre sagacité.
J'ai essayé de virer le End If mais evidemment ça march pô :rolleyes:
Etc etc Je suis à cours d'arguments. Pouvez vous m'aider
Merci d'avance
XP Pro SP2 - Excel 2000
 

ninbihan

XLDnaute Impliqué
Re : VBA sauvegarde clef USB récalcitrante

Bonsoir Gaelick,

A mon avis, soit les fichiers sont en lecture seul, soit ta boucle commence par le fichier actif et donc ne peut le supprimer. Il faudrait que tu puisses déteminer le fichier le plus ancien.

Bonne soirée,

Ninbihan
 

gaelick

XLDnaute Nouveau
Re : VBA sauvegarde clef USB récalcitrante

Bonsoir ninbihan, rebonsoir à tous!

1) Les fichiers ne sont pas en lecture seule mais en "Archive"
2) La boucle commence evidemment sur un fichier actif ( Happy Hour 7.8.xls) mais qui vient d'être sauvegardé sur le disque dur maitre et ensuite va vers la clef qui ne contient que des fichiers tel que = Happy Hour 7.8 du 2007-12-29 à 21H56.xls

En tout cas, ninbihan , merci de te pencher sur mon problème
 

ninbihan

XLDnaute Impliqué
Re : VBA sauvegarde clef USB récalcitrante

Re,

Et pour contourner, et si tu supprimais le fichier avant de sauver ?

Code:
Sub SauvegardeClasseur1()

'Début de la partie gestion des archives de sauvegarde'
Dim Dossier As Object, FichSauv As Object
Dim Chemin As String, Nb As Byte
'Indication du chemin où se trouve la sauvegarde'
Chemin = "E:\SauvegardeFichiers\"
Set Dossier = CreateObject("Scripting.FileSystemObject").GetFold er(Chemin)
'Gestion des 7 sauvegardes avec écrasement systématique de la plus ancienne'
Nb = Dossier.Files.Count
For Each FichSauv In Dossier.Files
If Nb > 6 Then
FichSauv.Delete

End If
Next
Dim Nom As String, Fichier As String, Jour As String, Mois As String, Année As String, Heure1 As String, Heure2 As String
'Permet de sauvegarder le classeur sur son emplacement, rien d'extraordinaire'
ActiveWorkbook.Save
'Mise en forme de la date et l'heure. Le 0 semble permettre de gérer la forme "04" janvier au lieu de "4" janvier''
Année = Year(Date)
Mois = Format(Month(Date), "0#")
Jour = Format(Day(Date), "0#")
Heure1 = Format(Hour(Time), "0#")
Heure2 = Format(Minute(Time), "0#")
'Mise en forme de la dénomination de la sauvegarde'
Fichier = "Happy Hour 7.8 " & "du " & Année & "-" & Mois & "-" & Jour & " à " & Heure1 & "H" & Heure2
'Chemin de destination'
Fichier = "E:\SauvegardeFichiers\" & Fichier
'Mise en forme de la sauvegarde'
ActiveWorkbook.SaveAs Filename:=Fichier, FileFormat:=xlNormal

Application.Quit
End Sub

Pas testé

Ninbihan
 

gaelick

XLDnaute Nouveau
Re : VBA sauvegarde clef USB récalcitrante

Re bonsoir ninbihan,

Je fais des essais d'où mon temps de latence.
Il faut environ 3 mn pour ouvrir et refermer le fichier.
Euh sinon d'ores et déja il m'a viré les 7 fichiers de sauvegarde !!!
(Non c'est pas grave je les ai copiés avant de commençer!!)
Et je reviens pour tenir au courant ...
 

ninbihan

XLDnaute Impliqué
Re : VBA sauvegarde clef USB récalcitrante

Re,

Ah ben oui, excuse
il faut ajouter exit for... à la place du exit sub que j'avais enlevé:
Nb = Dossier.Files.Count
For Each FichSauv In Dossier.Files
If Nb > 6 Then
FichSauv.Delete
Exit for
End If
 

gaelick

XLDnaute Nouveau
Re : VBA sauvegarde clef USB récalcitrante

Re également ninbihan,

Il ne bugue pas !! C'est deja beaucoup !
Il incrémente les fichiers et empile les fichiers je suis à 5 fichiers le moment de vrité approche!
A de suite
Pour la modif j'avieserai !
 

gaelick

XLDnaute Nouveau
Re : VBA sauvegarde clef USB récalcitrante

Re

Bon eh bien c'est mieux qu'avant !!!:D
Il monte à 7 fichiers mais malgré l'additif "Exit For" il retombe à 1 fichier et supprime les 6 autres avant "d'empiler" à nouveau au fil des ouvertures fermetures du fichier.
Mais c'est super car la clef ne sera plus en disque plein !! Merci je vais essayer de rebondir à partir de ton code .
Merci pour ton précieux coup de main. Ben ouias j'étais coincé merci du boulot et du temps et ton expérience !:D
 

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : VBA sauvegarde clef USB récalcitrante

Salut à tous et meilleurs voeux pour l'année qui va commencer

Gaelick, essaie ceci........................ça marche super bien
remarque que le copier-coller ci-dessous fait un peu bordélique :confused: mais comment les autres font-ils pour que ce soit plus présentable ???
alors je joint le fichier sur lequel tu pourras récupérer le macro
le seul petit problème rencontré est qu'il est nécessaire ce confirmer à chaque sauvegarde.............si tu as la solution pour eviter cela, ça m'intéresse


Sub Macro1()

'le classeur actif est sauvegardé sous le mon "Classeur transit.xls"

ActiveWorkbook.SaveAs Filename:="E:\Classeurtransit.xls", FileFormat:=xlNormal, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False
'et on le garde toujours actif donc pas de "ActiveWindow.Close"


' maintenant le fichier6 va être sauvegardé en le renommant fichier7
' maintenant le fichier5 va être sauvegardé en le renommant fichier6
' maintenant le fichier4 va être sauvegardé en le renommant fichier5
' maintenant le fichier3 va être sauvegardé en le renommant fichier4
' maintenant le fichier2 va être sauvegardé en le renommant fichier3
' maintenant le fichier1 va être sauvegardé en le renommant fichier2


For i = 6 To 1 Step -1
Workbooks.Open Filename:="E:\Classeur" & i & ".xls"
' à toi de modifier le filename en fonction de tes besoins mais la numérotation est un bon moyen de ne pas se planter
ActiveWorkbook.SaveAs Filename:="E:\Classeur" & i + 1 & ".xls", FileFormat:=xlNormal, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False
ActiveWindow.Close 'je suis obligé de le refermer sinon j'ai une erreur

Next i

' maintenant le fichiertransit est sauvegardé en le renommant fichier1

ActiveWorkbook.SaveAs Filename:="E:\Classeur1", FileFormat:=xlNormal, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False


End Sub
 

Pièces jointes

  • sauvegarde en cascade.zip
    7.4 KB · Affichages: 31

gaelick

XLDnaute Nouveau
Re : VBA sauvegarde clef USB récalcitrante

Bonjour le Forum, bonne fetes à tous, bonjour phlaurent55

Je pensais que le fil était "fini" mais ta réponse relance ma réflexion.
Merci de ta cogitation.
Je vais me remettre à y réfléchir mais malheureusement je serais pas là jusqu'a ce soir.
Cette notion de choisir les fichiers à effacer est super interressante, ça me plait pas mal, je vais y plancher dés mon retour et je tiens au courant sur ce même fil !!
A plus !
 

JNP

XLDnaute Barbatruc
Re : VBA sauvegarde clef USB récalcitrante

Bonsoir le forum :),
Juste pour Phlaurent55 qui se pose des questions sur la présentation :
En bas, en dessous de la réponse rapide, tu as 2 boutons : Envoyer la réponse rapide ou ... Aller en mode avancé
Si tu cliques sur Aller en mode avancé, tu vas avoir plein de possibilités comme mettre du code
Code:
Sub SuperLaPrésentation()
ou ajouter un lien, une image, citer, etc.
Google


Bonne année :cool:
 

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : VBA sauvegarde clef USB récalcitrante

Gaelick,

il ne s'agit pas de fichier à effacer mais plutôt d'écraser le fichier le plus ancien par celui qui le précède.
c'est un peu comme si dans une famille de 7 enfants on tuait le plus vieux lors de la naissance du petit dernier et qu'on recommencerait :eek: à chaque fois qu'une autre naissance surviendrait.:eek:
c'est un peu dur comme image mais c'est exactement comme cela que la macro fonctionne

a+
 

gaelick

XLDnaute Nouveau
Re : VBA sauvegarde clef USB récalcitrante

Bonsoir le Forum XLD, bonsoir à tous, bonsoir phlaurent55
Je suis rentré plus tôt ; ton idée me turlupinait !

Voilà j'ai adapté un peu ton code en modifiant les liens bien sûr en dimensionnant i comme Integer
----------------------------------------------------
Sub SauvegardeClasseur1()
'le classeur actif est sauvegardé sous le mon "Classeurtransit.xls"
ActiveWorkbook.SaveAs Filename:="E:\SauvegardeFichiers\Classeurtransit.xls", FileFormat:=xlNormal, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False
'et on le garde toujours actif donc pas de "ActiveWindow.Close"

Dim i As Integer
For i = 6 To 1 Step -1
Workbooks.Open Filename:="E:\Classeur" & i & ".xls"
ActiveWorkbook.SaveAs Filename:="E:\Classeur" & i + 1 & ".xls", FileFormat:=xlNormal, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False
ActiveWindow.Close

Next i

' maintenant le fichiertransit est sauvegardé en le renommant fichier1

ActiveWorkbook.SaveAs Filename:="E:\Classeur1", FileFormat:=xlNormal, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False


End Sub
-----------------------------------------------------
1) L'inconvénient c'est qu'il me demande d'écraser le classeur 7 puis 2 minutes aprés le classeur 6 etc et ceci 7 fois (soit 7 fois 2 minutes de sauvegarde) tous les classeurs y passent !!! Damned

2)Le fichier Classeurtransit n'est pas renommé en classeur 1

3)Le classeur d'origine n'est pas enregistré sur son propre emplacement sur le disque dur

En fait je comprends pas bien si c'est normal qu'il demande à écraser, si c'est normal qu'il écrase les 7.
Pour le moment je sais pas modifier la boucle. Mais j'y arriverai !
 

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : VBA sauvegarde clef USB récalcitrante

salut gaelick
je remarque que tu as laissé trainer un espace dans "x ls"

Code:
Sub SauvegardeClasseur1()
'le classeur actif est sauvegardé sous le mon "Classeurtransit.xls"
ActiveWorkbook.SaveAs Filename:="E:\SauvegardeFichiers\Classeurtransit.[COLOR="Red"]x ls[/COLOR]", FileFormat:=xlNormal, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False
'et on le garde toujours actif donc pas de "ActiveWindow.Close"

corrige et réessaye
 

Discussions similaires

Statistiques des forums

Discussions
312 684
Messages
2 090 916
Membres
104 698
dernier inscrit
miespetico