Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

portee et persistance de variables..

6 réponses
Avatar
Emile63
Bonjour a tous,
j'ai plusieurs fichiers Excel (et Word) avec lesquels je travaille
durant la journ=E9e, et je souhaiterais lancer une macro a l'ouverture
de l'application qui me permette quand j'enregistre, modifie ou quitte
les documents (sensibles), faire une copie de sauvegarde sur ma cl=E9
USB automatiquement.
A cet effet je souhaiterais me servir d'une macro de ce type, glan=E9e
pour Word, mais je n'arrive pas =E0 la faire fonctionner avec Excel (Ni
avec Word).
Est-ce que quelqu'un pourrait me mettre sur la voie, :-)

J'essaie d'abord de mettre une table (persistante) en m=E9moire des
diff=E9rents fichiers importants mais les variables ne persistent pas...
Puis =E7a bo=EEte de tous les cot=E9s...
Merci d'avance pour votre aide,

Emile
---------------------------------------------------------------------------=
----------------
Sub TableDesFichiersASauvegarder (MaCle, Mondocument)
Dim Mondocument(10) As String
Mondocument(0) =3D "MonDocument_ImportantA.xls"
Mondocument(1) =3D "MonDocument_ImportantB.xls"
Mondocument(2) =3D "MonDocument_ImportantC.xls"
Mondocument(3) =3D "MonDocument_ImportantD.xls"
Mondocument(4) =3D "MonDocument_ImportantE.xls"
Mondocument(5) =3D "MonDocument_ImportantF.xls"
Mondocument(6) =3D "MonDocument_ImportantG.xls"
Mondocument(7) =3D "MonDocument_ImportantH.xls"
Mondocument(8) =3D "MonDocument_ImportantI.xls"
Mondocument(9) =3D "MonDocument_ImportantJ.xls"
MaCle=3D "F:\Backup"

End Sub

Sub Copie()
Dim Fichier1 As String, Fichier2 As String ', MaCle As String,
MonDocument As String
On Error Resume Next
Call TableDesFichiersASauvegarder (MonDocument , MaCle )
Set Fic =3D ActiveWorkbook
Fic.Save
Fichier1 =3D Fic.FullName
Fichier2 =3D MaCle & Fic.Name
Fic.Close
FileCopy Fichier1, Fichier2
Documents.Open Fichier1
End Sub

Sub FileSave()
'Dim Mondocument As String
If ActiveWorkbook.Name =3D Mondocument Then
Call Copie
Else
ActiveWorkbook.Save
End If
End Sub

Private Sub Document_Close()
If ActiveWorkbook.Saved =3D False Then
Call TableDesFichiersASauvegarder
Application.ActiveWorkbook.SaveAs FileName:=3DMaCle & Mondocument
End If
End Sub

6 réponses

Avatar
Emile63
Bonjour a tous,

Jusqu'a present y'a pas trop d'idees / suggestions sur mon sujet. :-
(

Si je formule ma question differemment, je dirais:
Comment faire pour qu'une variable s'inisialise a l'ouverture d'excel
et reste permanente, quelque soit le nombre de documents qu'on traite
durant la session.
De plus, si cette variable est une table.
Merci de votre aide,

Emile
Avatar
Modeste
Bonsour® Emile63 avec ferveur ;o))) vous nous disiez :

Jusqu'a present y'a pas trop d'idees / suggestions sur mon sujet.
:- (

Si je formule ma question differemment, je dirais:
Comment faire pour qu'une variable s'inisialise a l'ouverture d'excel
et reste permanente, quelque soit le nombre de documents qu'on traite
durant la session.
De plus, si cette variable est une table.




pour creer la variable :
Application.ExecuteExcel4macro "SET.NAME(""Emile"",TRUE)"

pour utiliser la variable :
MsgBox Application.ExecuteExcel4Macro("Emile")

pour une table (Ma_plage) :
Application.ExecuteExcel4Macro "SET.NAME(""Ma_Plage"",Feuil1!R1C1:R1C4)"

voir les explications et détails là :
http://xcell05.free.fr/pages/prog/hnamespace.htm#Particularités
Avatar
Emile63
Bonjour Modeste,

Merci pour cette explication (+lien) ;-)
J'avoue que ça complique un peu. C'est pas ce que "je pensais".... Et
dépasse mon niveau VBA. :-((
Je m'étais imaginé une macro "générique" qui reconnaissant (ou non) le
nom de certains fichiers détermines (dans une table en variable), et
si oui, en faisait également une copie (SaveAs) sur ma clé USB.
Sauf aide"divine" sur le sujet, je crois que je vais devoir revoir un
peu l'idée... En mettant sur chaque fichier à garder ces codes VBA
permettant la copie de mes fichiers sur la clé.
Encore merci pour ton aide,

emile
Avatar
michdenis
Bonjour,

Voici une façon de faire. La procédure suppose
qu'il n'y a qu'un disque dur amovible de brancher et
que c'est sur ce dernier où tu veux faire l'enregistrement.

Il est suggéré d'effectuer la sauvegarde dans un fichier
temporaire directement sur le disque dur et de le copier
dans un deuxième temps sur le disque amovible.

Tu copies ce qui suit dans un module standard.
À tester, je n'ai pas à portée de la main de type de bidule !

'-------------------------------------------------
Sub test()
Dim MonFichier As String, Nom As String
Dim MonLecteur As String, Prêt As Boolean

MonLecteur = RemovableDisk(MonLecteur)
If MonLecteur <> "" Then
Prêt = EstPret(MonLecteur)
Else
MsgBox "Aucun disque amovible détecté."
End If
If MonLecteur <> "" And Prêt = True Then
Nom = ThisWorkbook.Name
'Enregistrement sur le DD de la sauvegarde
'temporairement
Fichier = "c:MonFichierExcel_Temp.xls"
ThisWorkbook.SaveCopyAs Fichier
VBA.FileCopy Fichier, MonLecteur & Nom
'destruction du fichier temporaire
Kill Fichier
Else
MsgBox "Le lecteur amovible n'est pas prêt."
End If
End Sub
'-------------------------------------------------

Function RemovableDisk(MonLecteur As String)
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!" & strComputer & "rootcimv2")
Set colDisks = objWMIService.ExecQuery _
("Select * from Win32_LogicalDisk")
For Each Objdisk In colDisks
'2 constante numérique pour disque dur "removable"
If Objdisk.DriveType = 2 Then
RemovableDisk = Objdisk.Name & ""
Exit Function
End If
Next
End Function
'-------------------------------------------------
Function EstPret(Lecteur As String)
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set colDrives = objFSO.Drives
For Each objdrive In colDrives
If Lecteur = objdrive & "" Then
If objdrive.IsReady = True Then
EstPret = objdrive.IsReady
End If
End If
Next
End Function
'-------------------------------------------------




"Emile63" a écrit dans le message de groupe de discussion :

Bonjour a tous,
j'ai plusieurs fichiers Excel (et Word) avec lesquels je travaille
durant la journée, et je souhaiterais lancer une macro a l'ouverture
de l'application qui me permette quand j'enregistre, modifie ou quitte
les documents (sensibles), faire une copie de sauvegarde sur ma clé
USB automatiquement.
A cet effet je souhaiterais me servir d'une macro de ce type, glanée
pour Word, mais je n'arrive pas à la faire fonctionner avec Excel (Ni
avec Word).
Est-ce que quelqu'un pourrait me mettre sur la voie, :-)

J'essaie d'abord de mettre une table (persistante) en mémoire des
différents fichiers importants mais les variables ne persistent pas...
Puis ça boîte de tous les cotés...
Merci d'avance pour votre aide,

Emile
-------------------------------------------------------------------------------------------
Sub TableDesFichiersASauvegarder (MaCle, Mondocument)
Dim Mondocument(10) As String
Mondocument(0) = "MonDocument_ImportantA.xls"
Mondocument(1) = "MonDocument_ImportantB.xls"
Mondocument(2) = "MonDocument_ImportantC.xls"
Mondocument(3) = "MonDocument_ImportantD.xls"
Mondocument(4) = "MonDocument_ImportantE.xls"
Mondocument(5) = "MonDocument_ImportantF.xls"
Mondocument(6) = "MonDocument_ImportantG.xls"
Mondocument(7) = "MonDocument_ImportantH.xls"
Mondocument(8) = "MonDocument_ImportantI.xls"
Mondocument(9) = "MonDocument_ImportantJ.xls"
MaCle= "F:Backup"

End Sub

Sub Copie()
Dim Fichier1 As String, Fichier2 As String ', MaCle As String,
MonDocument As String
On Error Resume Next
Call TableDesFichiersASauvegarder (MonDocument , MaCle )
Set Fic = ActiveWorkbook
Fic.Save
Fichier1 = Fic.FullName
Fichier2 = MaCle & Fic.Name
Fic.Close
FileCopy Fichier1, Fichier2
Documents.Open Fichier1
End Sub

Sub FileSave()
'Dim Mondocument As String
If ActiveWorkbook.Name = Mondocument Then
Call Copie
Else
ActiveWorkbook.Save
End If
End Sub

Private Sub Document_Close()
If ActiveWorkbook.Saved = False Then
Call TableDesFichiersASauvegarder
Application.ActiveWorkbook.SaveAs FileName:=MaCle & Mondocument
End If
End Sub
Avatar
michdenis
Remplace cette section "sub Test()" par celle-ci :

N.B- Le principe serait le même s'il y avait plusieurs
disques amovibles... il faudrait simplement ajouter
une interaction avec l'usager pour lui demander de
retenir le disque dur amovible où l'enregistrement
doit s'effectuer.

'-------------------------------------------
Sub test()
Dim MonFichier As String, Nom As String
Dim MonLecteur As String, Prêt As Boolean

MonLecteur = RemovableDisk(MonLecteur)
If MonLecteur <> "" Then
Prêt = EstPret(MonLecteur)
If Prêt = False Then
MsgBox "Le lecteur amovible n'est pas prêt."
Exit Sub
End If
Else
MsgBox "Aucun disque amovible détecté."
Exit Sub
End If
'Nom actuel du Classeur
Nom = ThisWorkbook.Name
'Enregistrement sur le DD de la sauvegarde
'temporairement
Fichier = "c:MonFichierExcel_Temp.xls"
ThisWorkbook.SaveCopyAs Fichier
VBA.FileCopy Fichier, MonLecteur & Nom
'destruction du fichier temporaire
Kill Fichier
End Sub
'-------------------------------------------
Avatar
Emile63
Merci Michdenis pour ton aide. :-)

Je test tous ça (ce prochain Week-end) et repasserai pour te tenir au
courant.

Cordialement,

Emile