Macro de sauvegarde avec critère

bougy

XLDnaute Nouveau
Bonjour a tous

J'essaie de mettre au point une macro qui me permet d'enregsitrer un fichier à chaque fermeture de celui-ci.
Jusque là, pas de problème.

Seulement, je souhaite que la sauvegarde se fasse sous certaines condition
un bout de code valant mieux qu'un long discours...

VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)

'Désactive l 'affichage des messages d'alerte genre "voulez-vous sauvegarder"
 Application.DisplayAlerts = False

                'DEMARRAGE DE LA MACRO
                
'Initialisation des variables "nom", "UserName" comme string, "Hierarchie" et "Modif" comme booléen
Dim nom As String, UserName As String, hierachie As Boolean, Modif As Boolean

                'VERIFICATION DE MODIFICATION
                
'Si le fichier a été sauvegardé, passe modif a true
Modif = False
If ThisWorkbook.Saved = False Then Modif = True

                'VERIFICATION DU NOM DE L'UTILISATEUR
                
                 'Définit le nom d'utilisateur dans la variable UserName
UserName = Application.UserName

'Vérifie suivant le UserName si la variable hierachie est vrai ou fausse
If UserName = "Chef1" Then Hierarchie = True

                'CREATION DU NOM DU FICHIER
                
'donne une valeur à "nom" suivant le nom du fichier, l'heure et la date (DMY)
nom = "modifié par " & UserName & " " & ThisWorkbook.Name & "__" & Day(Date) & "-" & Month(Date) & "-" & Year(Date) & "--" & Hour(Time) & "'" & Minute(Time) & "'" & Second(Time) & ".XLS"
 

                'ENREGISTREMENT DU FICHIER

'Si le fichier n'est pas en lecture seule ou si hierachie= faux et modif = faux alors enregistre
If Hierarchie = False Or Modif = True Or ThisWorkbook.ReadOnly = True Then ThisWorkbook.SaveAs Filename:="D:\Test\" & nom, Password:="XXX", CreateBackup:=False, ReadOnlyRecommended:=True


               'FIN DE LA MACRO
 
'Active l'affichage des messages d'alertes
Application.DisplayAlerts = True


End Sub
Dans la dernière partie du code, celle qui gère l'enregistrement, on peux voir que je demande la chose suivante:
Si Hierarchie est FAUX OU que modif est VRAI OU que le fichier n'est pas en lecture seul, enregistre le fichier

Mes problèmes:

1. La partie "VERIFICATION DE MODIFICATION" avec la vérification
Code:
If ThisWorkbook.Saved = False Then Modif = True
ne semble pas fonctionner : je ne connaissais pas cette fonction, aussi s'agit il d'un essai! la doc m'a la'air cohérente avec ce que je veux faire, a savoir passer un booléen a VRAI si le fichier est enregistré.



2. Si je vérifie seulement 1 critère (nom d'utilisateur ou fichier en lecture seul), l'enregistrement fonctionne
Si je mets 2 ou 3 critères, ça ne fonctionne pas.

3. Je n'arrive pas à mettre plusieurs nom d'utilisateurs différents
Code:
If UserName = "Chef1" Or "Chef2" Or " Chef3" Then Hierarchie = True
Par exemple




Pouvez-vous me donner quelques pistes?

Je n'ai rien trouvé de tel sur le forum, après une rapide recherche, et mon ami google ne m'en a pas dit beaucoup plus (je ne lui ai peut-être pas demandé correctement ^^)

Merci a tous pour vos idées, eclaircissement, etc....

NOTA: le password et le nom d'utilisateur ont été modifié pour la publication sur le forum ;)
 
Dernière édition:

Papou-net

XLDnaute Barbatruc
Re : Macro de sauvegarde avec critère

Bonsoir Bougy,

Essaie avec ce code modifié :

Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Désactive l 'affichage des messages d'alerte genre "voulez-vous sauvegarder"
 Application.DisplayAlerts = False

                'DEMARRAGE DE LA MACRO
               
'Initialisation des variables "nom", "UserName" comme string, "Hierarchie" et "Modif" comme booléen
Dim nom As String, UserName As String, hierachie As Boolean, Modif As Boolean

                'VERIFICATION DE MODIFICATION
               
'Si le fichier a été sauvegardé, passe modif a true

If ThisWorkbook.Saved = False Then Modif = True Else Modif = False

                'VERIFICATION DU NOM DE L'UTILISATEUR
               
                 'Définit le nom d'utilisateur dans la variable UserName
UserName = Application.UserName

'Vérifie suivant le UserName si la variable hierachie est vrai ou fausse
If UserName = "Chef1" Then hierarchie = True Else hierarchie = False

                'CREATION DU NOM DU FICHIER
               
'donne une valeur à "nom" suivant le nom du fichier, l'heure et la date (DMY)
nom = "modifié par " & UserName & " " & ThisWorkbook.Name & "__" & Day(Date) & "-" & Month(Date) & "-" & Year(Date) & "--" & Hour(Time) & "'" & Minute(Time) & "'" & Second(Time) & ".XLS"

                'ENREGISTREMENT DU FICHIER

'Si le fichier n'est pas en lecture seule ou si hierachie= faux et modif = faux alors enregistre
If hierarchie = False Or Modif = True Or ThisWorkbook.ReadOnly = True Then ThisWorkbook.SaveAs Filename:="D:\Test\" & nom, Password:="XXX", CreateBackup:=False, ReadOnlyRecommended:=True


               'FIN DE LA MACRO
 
'Active l'affichage des messages d'alertes
Application.DisplayAlerts = True
End Sub
Pour répondre à tes questions :

1: voir la ligne "If ThisWorkbook.Saved..." dans la macro ci-dessus.

2: ça ne fonctionne pas car si UserName est différent de "Chef1" alors "hierarchie" est vide et non égal à Faux. D'où le rajout du Else.

3: la ligne doit s'écrire ainsi :

Code:
If UserName = "Chef1" Or UserName = "Chef2" Or " UserName = Chef3" Then Hierarchie = True Else hierarchie = False
Espérant avoir répondu.

Cordialement.
 

bougy

XLDnaute Nouveau
Re : Macro de sauvegarde avec critère

OK, merci pour les infos!!!

Petit retour de mon coté également:
après avoir regardé l'aide VBA à propos de saved, je me suis rendu compte que j'utilisais mal cette fonction!!!

voici l'exemple de Microsoft
VB:
If Not ActiveWorkbook.Saved Then
    MsgBox "This workbook contains unsaved changes."
End If
 
Dernière édition:

bougy

XLDnaute Nouveau
Re : Macro de sauvegarde avec critère

Bon: j'avance sur le sujet!!!

Pour la variable Hierarchie, il y avait une faute de frappe dans le code + mauvaise syntaxe de ma part
(merci Papou net!!!)

mais la vérification de modification ne fonctionne pas:
le fichier s'enregistre par la macro lors de la fermeture , même si il n'a pas été modifié (enregistrer par l'utilisateur).
malgré l'utilisation de la ligne ce dessous

VB:
If ThisWorkbook.Saved = False Then Modif = True Else Modif = False
Des idées? peut-etre suis-je dans une mauvaise procédure???
 

Discussions similaires


Haut Bas