Copie de sauvegarde et protection de la copie

Bonjour

j'ai trouvé ce code de galopin01 sur ce merveilleux forum, et il fonctionne à merveille.

Je me demandais s'il était possible de mettre automatiquement un mot de passe sur la copie de sauvegarde, mais pas sur le fichier source.

Sub sauve() 
Dim Wb$, TWay$, WbDest$, TDest$
    Application.ScreenUpdating = False
Wb = ThisWorkbook.Name
    TWay = "C:\excel2008\forum\Sauvegarde_"
    WbDest = "remplir2.xls"
    TDest = TWay & WbDest
    Application.DisplayAlerts = False
    Workbooks(Wb).SaveCopyAs TDest
End Sub

Merci

Bonjour,

Pourquoi ne pas simplement utiliser la méthode "SaveAs" ?

Bonsoir SoumZoum

j'aimerais bien vous répondre, mais mes connaissances sont limité en cette matière.

Qu'entendez vous par la méthode "SaveAs"? Est-ce un bout de code à ajouter? Y a-t-il un lien avec le code que j'ai mis dans le post?

merci

Sub aaa
Dim wbi as string
Set aWb = Activeworkbook
aWb.Save
wbi = aWb.Fullname 'Enregistre le nom complet, chemin compris
aWb.SaveAs( "C:\excel2008\forum\Sauvegarde\Remplir2.xls",, [Ton password ici])
Application.Workbooks.Open(wbi)
aWb.Close True

On contourne le problème en bidouillant, parce que à ma connaissance, saveascopy ne supporte pas les passwords.

En fait, on enregistre le classeur actif sous un autre nom, MAIS c'est une copie : le classeur original est toujours à l'emplacement indiqué, on en fait juste un doublon.

Ensuite on ré-ouvre le classeur original, et voilà

Bonjour,

met-toi en enregistrement de macro et fais 'enregistrer sous...'

A gauche du bouton Enregistrer tu as Outils, tu choisis 'Options générales'.

Là tu peux enregistrer en lecture seule et éventuellement choisir un mot de passe pour la modification.

Enregistre en type .xlsm si tu veux récupérer les paramètres qui t'intéressent pour SaveAs.

Sinon plus sûr et plus simple, tu enregistres ta copie sous l'explorateur de fichier (sur un autre support tant qu'à faire mais pas une clé usb) et tu le mets en lecture seule ici, ça le protégera de l'effacement.

eric

Bonjour à tous, SoumZoum et Eriiic

merci pour vos réponses.

Cher SoumZoum, cette ligne semble incomplète. À son application, elle indique des erreurs de compilation; erreur de syntaxe, entendu =, etc.

aWb.SaveAs( "C:\Users\ulangzx\backup\beta2.xls",, [mlbk])

Est-ce que tu peux la vérifier, svp.

je n'ai pas encore exploré la proposition de ériiic, mais cela ne serait tardé.

merci encore

Bonjour Eriic

@VDMICHEL

Il faut que je change cette habitude que j'ai de modéliser les "invite" en [ ].

En fait les [ ] n'étaient là que pour t'indiquer qu'il s'agissait d'une donnée que tu devais renseigner, mea culpa.

Le mot de passe doit sûrement suivre une syntaxe "mot de passe" (avec les guillemets, mais sans accolades)

Bonjour SoumZoum.

merci beaucoup pour le retour rapide. J'avais effectivement essayé avec les "", mais cela ne corrige pas le problème de syntaxe et de compilation!

merci

Arg ! On va y arriver.

aWb.SaveAs "C:\Users\ulangzx\backup\beta2.xls",, "mlbk"

Foutues paranthèses

Bonjour SoumZoum,

je ne dois pas suivre la procédure correctement!

J'applique le code au fichier source. Le fichier source se nomme Registre de comblement 2015_BETA. Je fais une copie de ce classeur dans une autre dossier nommé backup et renomme le classeur beta2.

En principe, quand je modifie le classeur source, je retrouve ces modifications dans le classeur doublon lequel est protégé par une mot de passe.

Est-ce les bonne étapes à suivre pour obtenir une copie de sauvegarde protégé? Si c'est le cas, je n'ai pas obtenu ce résultat.

merci encore pour votre aide.

En principe, quand je modifie le classeur source, je retrouve ces modifications dans le classeur doublon lequel est protégé par une mot de passe.

Ben ? SaveCopyAs n'est ni plus ni moins qu'une copie du classeur, figée

En principe, tu ne dois pas retrouver ces modifications dans le classeur "doublon" mais la copie figée à l'instant où tu l'as sauvegardée.

Si j'ai bien compris ton message initial, tu souhaites disposer d'un back-up, c'est ça ?

Au cas où, comme je l'ai dit, le code que je t'ai fourni revient à SaveCopyAs mais avec un password ; cependant ça reste une "bidouille" donc il faut mettre toutes les instructions fournies. Si jamais tu ne mets que la ligne "SaveAs", ça ne conviendra pas à tes attentes.

Bonjour SoumZoum

Désolé si je vous ai induit en erreur.

Effectivement, c'est un backup protégé que je souhaite obtenir.

J'ai essayé en mettant le code que vous m'avez fourni ici:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Fermeture
If ActiveSheet.AutoFilterMode = True Then ActiveSheet.AutoFilterMode = False

Dim wbi As String
Set aWb = ActiveWorkbook
aWb.Save
wbi = aWb.FullName 'Enregistre le nom complet, chemin compris
aWb.SaveAs "C:\Users\ulangzx\Desktop\backup\beta2.xls", , "mlbk"
Application.Workbooks.Open (wbi)
aWb.Close True

End Sub

Le beta2 dans le dossier backup est bien protégé, mais à la fermeture du dossier, il y a l'erreur 1004 la méthode SaveAs de la classe workbook a échoué.

Quant au fichier source, en voulant quitter, il y a le message «un fichier "C:\Users\ulangzx\Desktop\backup\beta2.xls" existe déjà, voulez vous le remplacer». Si je répond oui, le classeur ne se ferme pas. Si je répond non il y a le même message d'erreur du classeur beta2!

Vraiment désolé de vous importuner avec ces problèmes qui s'accumulent. J'apprécie beaucoup votre aide.

Merci

Si je te fournis un code qui ne fonctionne pas, tu ne m'importunes pas, c'est moi qui ait pas été top

Le problème vient du fait que je pensais que tu souhaitais une procédure de back-up ponctuelle et non à chaque fermeture de classeur. Du coup, ben lorsque tu quittes, le classeur va se fermer avant de ré-essayer de se fermer...ou un paradoxe du genre.

Concernant l'aide...tu vas rire, mais ça fait quelques jours que je dois sortir un code dans le genre pour mon projet. Donc, d'une pierre deux coups

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Fermeture
If ActiveSheet.AutoFilterMode = True Then ActiveSheet.AutoFilterMode = False
With Activeworkbook
.Save 'Sauvegarder la copie actuelle du fichier.
.SaveAs "C:\Users\ulangzx\Desktop\beta2.xls", 51, "mlbk" 'Créée une copie
End with
'51 enregistre le classeur sans macros, pour gain de place. Vire si tu le souhaites

End Sub

Maintenant... Faire un backup à chaque fermeture, pourquoi pas. Mais l'écraser ? Ca fait que tu n'auras qu'une possibilié de back-up que TRES limitée. Si tu veux, on peut numéroter les backup avec la date ou quoi. Ou un sur deux. Ou un sur 10. Bref

Bonjour SoumZoum

Après vérification, ce dernier code fonctionne parfaitement.

J'apprécie ta suggestion de numéroté les backups. C'est une très bonne idée.

Je devrai revenir plus tard en septembre pour pousser cette idée plus loin. Mes vacances arrivent dans quelques minutes...

à bientôt et merci infiniment pour tout.

Les backups :

(A appeler dans wb.close)

Sub MWRun()

  ' Exit if macros are not allowed
    If MacrosAllowed = 1 Then
        With thisworkbook
.Save 'Sauvegarder la copie actuelle du fichier.
.SaveAs replace("C:\Users\ulangzx\Desktop\beta2.xls", ".xls", " S" & isoweeknumber(date) & ".xls"), 51, "mlbk" 'Créée une copie
End with
        MacrosAllowed True 'On donne l'instruction de MaJ la date de ref de l'argument n
    End if
end sub

Function MacrosAllowed(Optional UpdateW As Boolean) As Integer
Dim W As Date
    If UpdateW Then 'Si le deuxième argument est passé (= si on veut MaJ la date de ref)
        ThisWorkbook.Names.Add "BlockedDateW", Now, False 'On met à jour
    Else
        W = [BlockedDateW]
        If IsoWeekNumber(W) < IsoWeekNumber(Now) Then MacrosAllowed = 1 'Si la semaine de la date de ref est inférieure à la semaine actuelle, on donne l'instruction correspondante
    End if
    End function

Public Function IsoWeekNumber(InDate As Date) As Long
    IsoWeekNumber = DatePart("ww", InDate, vbMonday, vbUseSystem)
End Function

J'ai tronqué le mien et je n'ai pas le temps de le tester donc il y a une infime (mal)chance que tu aies 1 mineure modif à faire.

Bonjour SoumZoum

juste pour être certain, j'intègre le code dans le ThisWorkbook?

Après avoir testé, le W provoque une incompatibilité dans la séquence de cette section de la macro:

Function MacrosAllowed(Optional UpdateW As Boolean) As Integer
Dim W As Date
    If UpdateW Then 'Si le deuxième argument est passé (= si on veut MaJ la date de ref)
        ThisWorkbook.Names.Add "BlockedDateW", Now, False 'On met à jour
    Else
        W = [BlockedDateW]
        If IsoWeekNumber(W) < IsoWeekNumber(Now) Then MacrosAllowed = 1 'Si la semaine de la date de ref est inférieure à la semaine actuelle, on donne l'instruction correspondante
    End If
    End Function

merci beaucoup

Hello,

Ca doit être parce que [BlockedDateW] n'a pas été initialisé.

Lance l'instruction suivante dans la fenêtre exécution

ThisWorkbook.Names.Add "BlockedDateW", Now, False

Si ça ne marche pas, renvoie le code erreur :]

Bonjour Soum Zoum

le # d'erreur d'exécution est 13!

Merci

Mea culpa, j'entendais par là l'erreur et la ligne retournées

Bonjour Soum Zoum

j'avoue avoir perdu le fil du poste.

Vous me proposiez de numéroter les backup, et vous m'aviez proposé un code qui pour l'heure renvoi a une erreur d'incompatibilité sur cette ligne W = [BlockedDateW].

Pour une petite remise à jour, je vous joins le fichier pour vérification.

merci d'y jeter un œil.

Rechercher des sujets similaires à "copie sauvegarde protection"