Protéger son classeur si les macros ne sont pas activées dans Excel

zephir94

XLDnaute Impliqué
Bonjour à tous,

Afin de protéger mon classeur j'aurais besoin de protéger ce dernier si les macros ne sont pas activées lors de l'ouverture de celui-ci pour le rendre inutilisable.

Pour cela j'ai trouvé une déclaration dans Thisworkbook comme ceci :
Code:
Private Sub Workbook_Open()
   For s = 2 To Sheets.Count
     Sheets(s).Visible = True
   Next s    
....
End sub

et dans Workbook_BeforSave :

Code:
 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
   For s = 2 To Sheets.Count      ' on masque les feuilles
     Sheets(s).Visible = xlVeryHidden
   Next s
End Sub

Cela fonctionne bien sauf que je voudrais le déplacer de l'événement befor save car il protège le classeur si un utilisateur le sauvegarde.
Donc j'ai tenté de le déplacer à la fermeture du classeur en utilisant l'événement beforClose comme ceci :

Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
   For s = 2 To Sheets.Count      ' on masque les feuilles
     Sheets(s).Visible = xlVeryHidden
   Next s
End Sub
Le classeur à la fermeture ferme bien toutes les pages de ce côté la pas de soucis, par contre à l'ouverture il ne masque plus les feuilles alors qu'il le fait avant avec l'événement beforeSave ?

Quelqu'un pourrait-il me dire pourquoi ?

Par avance merci
 
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re : Protéger son classeur si les macros ne sont pas activées dans Excel

Bonjour Zephir, bonjour le forum,

S
i tu masques les onglets à la fermeture sans sauver, il est logique qu'à la réouverture, quand tu désactives les macros, tes onglets soient affichés.
je te propose donc :
Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim S as Object

For S = 2 To Sheets.Count      ' on masque les feuilles
    Sheets(S).Visible = xlVeryHidden
Next S
ThisWorkook.Save
End Sub
 

zephir94

XLDnaute Impliqué
Re : Protéger son classeur si les macros ne sont pas activées dans Excel

Merci robert,

Effectivement c'est logique !!!!
Je me décerne le Boudin d'or du jour sous tes applaudissements !!!

Mais j'obtient une erreur de compilation : incompatibilité de type et la variable S est en jaune dans l'éditeur vba
Encore merci à toi
 
Dernière édition:

zephir94

XLDnaute Impliqué
Re : Protéger son classeur si les macros ne sont pas activées dans Excel

Bonjour à toi pour l'instant 8 mais si je remets dans beforSave ca fonctionne parfaitement quelqye soit le nombre de feuilles.
Après un pas à pas dans l'éditeur il semblerait que se soit :
Code:
ThisWorkook.Save
qui entraîne cette erreur
 

zephir94

XLDnaute Impliqué
Re : Protéger son classeur si les macros ne sont pas activées dans Excel

Merci à toi,

Effectivement je suis un boulet !
Par contre il y a t'il un moyen en vba d'éviter lors de l'ouverture du classeur une fois les macros activées que visuellement tous les fenêtres s'ouvrent et qu'il n'affiche qu'une feuille ?
Je connais :
Code:
Application.ScreenUpdating = False

Te remerciant encore
 

JCGL

XLDnaute Barbatruc
Re : Protéger son classeur si les macros ne sont pas activées dans Excel

Bonjour à tous,

Peux-tu essayer ceci dans le ThisWorkBook :

VB:
Option Explicit
Dim S&


Private Sub Workbook_BeforeClose(Cancel As Boolean)
    With Application
        .ScreenUpdating = False
        .Calculation = xlCalculationManual
    End With


    For S = 2 To Sheets.Count
        Sheets(S).Visible = xlVeryHidden
    Next S
  
    With Application
        .ScreenUpdating = True
        .Calculation = xlCalculationAutomatic
    End With
    
      ThisWorkbook.Save
End Sub


Private Sub Workbook_Open()
    With Application
        .ScreenUpdating = False
        .Calculation = xlCalculationManual
    End With


    For S = 2 To Sheets.Count
        Sheets(S).Visible = True
    Next S


    With Application
        .ScreenUpdating = True
        .Calculation = xlCalculationAutomatic
    End With
End Sub

A+ à tous
 
C

Compte Supprimé 979

Guest
Re : Protéger son classeur si les macros ne sont pas activées dans Excel

Re,
Salut l'ami JC ;)

Je rajouterai à ce qu'a mis JCGL, l'instruction au début
Code:
Application.EnableEvents = False
et
Code:
Application.EnableEvents = True
à la fin

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 095
Messages
2 085 249
Membres
102 835
dernier inscrit
Alexandrax971