VBA : PERSONAL.XLSB - sauvegarder par macro

DoubleZero

XLDnaute Barbatruc
Bonjour à toutes et à tous,

Après quelques « désagréments :mad: », j’ai pour habitude de sauvegarder régulièrement mes données sur disque dur externe.

Or, il m’arrive d’oublier (merci, Aloïs :rolleyes:) de faire le nécessaire pour les macros personnelles, en copiant le fichier « PERSONAL.XLSB » vers le répertoire dédié.

Une macro pourrait-elle pallier mes défaillances à l’ouverture, quasi quotidienne, de mon fichier Excel nommé « Agenda » ?

Je vous remercie pour l’aide que vous pourrez m’apporter.

A bientôt :)
 

GIBI

XLDnaute Impliqué
Re : VBA : PERSONAL.XLSB - sauvegarder par macro

Bonjour,


déjà tu peux utiliser la sauvegarde automatique standard (Fichier/option Excel/enregistrement).

Sinon tu peux en VBA utiliser un Timer (Application.OnTime) pour enregistrer ton fichier mais est-ce nécessaire? Personnellement je l'utilise pour forcer la fermeture d'un classeur inactif depuis un certain temps.

Merci de préciser ton problème

GIBI
 

DoubleZero

XLDnaute Barbatruc
Re : VBA : PERSONAL.XLSB - sauvegarder par macro

Re-bonjour,

Merci, GIBI :), pour ton aide.

Pour faire mes sauvegardes, j’utilise un logiciel gratuit, lequel passe en revue les éventuelles modifications apportées à l’ensemble de mes fichiers préalablement choisis (images, .doc , .docx, .xls, .xlsm…).

Cependant, les modifications du fichier « PERSONAL.XLSB » demeurent exclues du champ d’application.

Dès lors, il me faut faire un copier-coller « manuel » dudit fichier vers le répertoire que j’ai créé, nommé « MACROS PERSONNELLES ». Or, ce copier-coller « manuel » dépend de ma vigilance du moment, soit opérationnelle, soit « oublieuse » :rolleyes:

C’est la raison pour laquelle je souhaiterais savoir si la sauvegarde du fichier « PERSONAL.XLSB » peut être automatisée dès l’ouverture du fichier Excel « Agenda », mentionné en #1.

Plus précisément, j’ouvre le fichier Excel nommé « Agenda » : une procédure dans « ThisWorkbook » effectue la sauvegarde du fichier « PERSONAL.XLSB » vers le répertoire « MACROS PERSONNELLES ».

Si mon souhait est irréalisable, peu importe : aucune vie n’est en péril !

A bientôt :)
 

david84

XLDnaute Barbatruc
Re : VBA : PERSONAL.XLSB - sauvegarder par macro

Bonjour,
je n'ai pas testé sur ce classeur particulier mais sur un fichier lambda que j'ai recopié sur un disque dur externe.
Vois si cela peut t'aider :
Code:
Sub OO()
'cocher la librairie Microsoft Scripting Runtime
Dim oFso As Scripting.FileSystemObject
Dim oDrive As Scripting.Drive
Dim oFl As Scripting.File
Dim CheminFichier As String
CheminFichier = "C:\toto.xls" 'chemin à adapter
Set oFso = New Scripting.FileSystemObject
If oFso.FileExists(CheminFichier) Then
    Set oFl = oFso.GetFile(CheminFichier)
Else
    MsgBox "Dossier non trouvé": Exit Sub
End If

For Each oDrive In oFso.Drives
'si c'est un disque dur et que sa lettre est G (à adapter)
If oDrive.DriveType = Fixed And oDrive.DriveLetter = "G" Then _
    oFl.Copy "G:\", True: Exit Sub
Next oDrive
End Sub
A+
 

DoubleZero

XLDnaute Barbatruc
Re : VBA : PERSONAL.XLSB - sauvegarder par macro

Re-bonjour,

@ david84,

Ton code fonctionne à la perfection :D ! Je t'en remercie 1:):):) fois.

J'ai tenté de le modifier pour faire en sorte que la copie ne soit pas dirigée vers le disque dur externe mais vers un répertoire, lequel est sauvegardé grâce au locigiel que j'évoquais en #3.

Ta Sub OO, devenue Sub OO_non_OK :(, ne fonctionne pas...

Code:
Option Explicit
Sub OO_non_OK()
'cocher la librairie Microsoft Scripting Runtime
Dim oFso As Scripting.FileSystemObject
Dim oDrive As Scripting.Drive
Dim oFl As Scripting.File
Dim CheminFichierA As String
Dim CheminfichierB As String
CheminFichierA = "C:\Users\00\AppData\Roaming\Microsoft\Excel\XLSTART\PERSONAL.XLSB" 'chemin à adapter
CheminfichierB = "C:\Users\00\Documents\009 Ordinateur\MACROS PERSONNELLES" 'chemin à adapter
Set oFso = New Scripting.FileSystemObject
If oFso.FileExists(CheminFichierA) Then
    Set oFl = oFso.GetFile(CheminFichierA)
Else
    MsgBox "Dossier non trouvé": Exit Sub
End If
For Each oDrive In oFso.Drives
oFl.Copy CheminfichierB, True: Exit Sub  '============================>>Blocage sur cette ligne
Next oDrive
End Sub

et, bien sûr :rolleyes:, je ne parviens pas à corriger mes âneries :eek:.

A nouveau, un très grand merci.

:):)
 

MJ13

XLDnaute Barbatruc
Re : VBA : PERSONAL.XLSB - sauvegarder par macro

Bonjour 00, Gibi, David

Sur une de mes applications, j'ai ce code pour créer une copie sur C:\Temp\Sauvegarde. Comme je transporte toujours mon fichier sur clé USB, si je l'oublie, je peux le retrouver sur mon C:\Temp\sauvegarde. En plus cela me crée le dossier si il n'existe pas si je suis sur un autre PC.

Code:
Private Declare Function SHCreateDirectoryEx Lib "Shell32.dll" Alias "SHCreateDirectoryExA" _
                                             (ByVal hwnd As Long, ByVal pszPath As String, ByVal lngsec As Long) As Long


Sub Sauve_ce_fichier_sur_le_C_Temp()
On Error GoTo suite
    NOMW = ActiveWorkbook.Name
    ThisWorkbook.Save

Suite2:
        ActiveWorkbook.SaveCopyAs Filename:="C:\Temp\Sauvegarde\Programme\" & NOMW  ', FileFormat:= _
        xlOpenXMLWorkbookMacroEnabled , CreateBackup:=False
        End
suite:
CreationDossier ("C:\Temp\Sauvegarde\Programme")
GoTo Suite2
End Sub

Sub CreationDossier(sNomRep As String)
    'ChDrive "D"
    SHCreateDirectoryEx 0&, sNomRep, 0&
End Sub
 

david84

XLDnaute Barbatruc
Re : VBA : PERSONAL.XLSB - sauvegarder par macro

Re

Je pensais que tu voulais recopier ton fichier sur un disque dur externe...d'où cette partie de code
Code:
For Each oDrive In oFso.Drives
'si c'est un disque dur et que sa lettre est G (à adapter)
If oDrive.DriveType = Fixed And oDrive.DriveLetter = "G" Then _
    oFl.Copy "G:\", True: Exit Sub
Next oDrive
qui te permet de boucler sur l'ensemble des disques de l'ordinateurs ou connectés à l'ordinateur ou clé USB, etc.

Je ne peux tester ton code mais le problème est que si tu enlèves la condition permettant de vérifier le type du disque et sa lettre
Code:
If oDrive.DriveType = Fixed And oDrive.DriveLetter = "G" Then
, il va te copier le fichier sur tous les disques !

Ceci-dit, si tu veux simplement copier ton fichier dans un autre dossier cette boucle ne te sert à rien :
Code:
Sub OO2()
'cocher la librairie Microsoft Scripting Runtime
Dim oFso As Scripting.FileSystemObject
Dim CheminFichierA As String
Dim CheminfichierB As String
CheminFichierA = "C:\Users\00\AppData\Roaming\Microsoft\Excel\XLSTART\PERSONAL.XLSB"
CheminfichierB = "C:\Users\00\Documents\009 Ordinateur\MACROS PERSONNELLES" 'placer le chemin complet
Set oFso = New Scripting.FileSystemObject
If oFso.FileExists(CheminFichierA) Then
    oFso.CopyFile CheminFichierA, CheminfichierB, True
Else
    MsgBox "Fichier non trouvé"
End If
End Sub
Attention : ton chemin pour le fichier B doit être complété avec le nom du fichier de destination (comme pour le fichier A).
A+

Edit : bonjour Michel
 

Staple1600

XLDnaute Barbatruc
Re : VBA : PERSONAL.XLSB - sauvegarder par macro

Bonsoir

...
Pour faire mes sauvegardes, j’utilise un logiciel gratuit, lequel passe en revue les éventuelles modifications apportées à l’ensemble de mes fichiers préalablement choisis (images, .doc , .docx, .xls, .xlsm…).
Cependant, les modifications du fichier « PERSONAL.XLSB » demeurent exclues du champ d’application.
00:
Juste de passage pour une petit requête (relative aux partage des connaissances, signe distinctif d' XLD)
Peux-tu indiquer le nom de ce logiciel et son URL, stp? (cela pourrait peut-être intéresser certains d'entre nous)
Merci d'avance

PS: Je suis joueur ce soir: je parie sur Cobian Backup ;) Perdu ou gagné ? ;)
 

DoubleZero

XLDnaute Barbatruc
Re : VBA : PERSONAL.XLSB - sauvegarder par macro

Bonjour, le Fil, bonjour, Michel :), Staple1600 :), le Forum,

@ Michel,

Sur une de mes applications, j'ai ce code pour créer une copie sur C:\Temp\Sauvegarde.

Merci beaucoup :D pour ton code ! Je ne pense pas qu'il réponde à mon besoin évoqué supra mais me sera certainement très utile. Il a sa place dans mon coffre aux trésors :cool: !

@ David,


Merci beaucoup :D pour les corrections apportées que je testerai au plus vite.

@ Staple1600,

Peux-tu indiquer le nom de ce logiciel et son URL, stp? (cela pourrait peut-être intéresser certains d'entre nous)

Bien sûr et très volontiers.

je parie sur Cobian Backup ;) Perdu ou gagné ? ;)

Perdu !

C'est celui-ci :

attachment.php


Je n'ai pas testé celui que tu évoques et ne peux dire lequel des deux est le meilleur.

A bientôt :):)
 

Pièces jointes

  • C'est celui-ci !.PNG
    C'est celui-ci !.PNG
    16.8 KB · Affichages: 324

DoubleZero

XLDnaute Barbatruc
Re : VBA : PERSONAL.XLSB - sauvegarder par macro

Re-bonjour,

David, hier, je te remerciais 1:):):) fois...

Aujourd'hui, je te dis 1:):)1 fois merci
: les corrections que tu as faites font de mon torchon :eek: une broderie d'art !

Merci à tous pour votre aide et...

...A bientôt :D:D
 

david84

XLDnaute Barbatruc
Re : VBA : PERSONAL.XLSB - sauvegarder par macro

Re

Content d'avoir pu te dépanner !
2 infos en passant :

- si tu préfères ne pas cocher la bibliothèque Microsoft Scripting Runtime, tu remplaces alors
Code:
Dim oFso As Scripting.FileSystemObject
par
Code:
Dim oFso as Object
et
Code:
Set oFso = New Scripting.FileSystemObject
par
Code:
Set oFso = CreateObject("Scripting.FileSystemObject")
Mais bon, l'un des intérêts de cocher la DLL adéquate est que tu bénéficies de l’auto complétion ce qui est très utile en phase de construction de code ou d'apprentissage de l'objet.

- Si tu veux en savoir plus sur la manipulation des fichiers en VBA, je te conseille ce lien.
A+
 

Staple1600

XLDnaute Barbatruc
Re : VBA : PERSONAL.XLSB - sauvegarder par macro

Bonjour à tous

@ Staple1600,
Je n'ai pas testé celui que tu évoques et ne peux dire lequel des deux est le meilleur.

A bientôt :):)

00:
Apparemment tu as fait le bon choix ;) (si on se fie aux notes => voir ci-dessous)
Syncback
Cobian Backup

Mais ce qui prime c'est ton avis à toi, si tu es contente de Syncback, c'est le principal ;)
 

Statistiques des forums

Discussions
312 239
Messages
2 086 503
Membres
103 236
dernier inscrit
Menni