Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 protéger et déprotéger plusieurs feuilles par macro

halecs93

XLDnaute Impliqué
Bonjour à toutes et à tous,

Pour éviter des manipulations "hasardeuses" des utilisateurs de mon fichier, j'ai voulu, par macro, déprotéger une partie des feuilles du classeur à l'ouverture d'un userform et les protéger à nouveau à sa fermeture.

J'ai fait, pour me donner une idée, un enregistrement d'une macro mais le code me parait un peu "lourd". Y aurait-il un moyen de faire plus simple ?

Voici le code

Sub deproteger()
'
' deproteger Macro
'

'
Sheets("JANVIER").Select
ActiveSheet.Unprotect
Sheets("FEVRIER").Select
ActiveSheet.Unprotect
Sheets("MARS").Select
ActiveSheet.Unprotect
Sheets("AVRIL").Select
ActiveSheet.Unprotect
Sheets("MAI").Select
ActiveSheet.Unprotect
Sheets("JUIN").Select
ActiveSheet.Unprotect
Sheets("JUILLET").Select
ActiveSheet.Unprotect
Sheets("AOUT").Select
ActiveSheet.Unprotect
Sheets("SEPTEMBRE").Select
ActiveSheet.Unprotect
Sheets("OCTOBRE").Select
ActiveSheet.Unprotect
Sheets("NOVEMBRE").Select
ActiveSheet.Unprotect
Sheets("DECEMBRE").Select
ActiveSheet.Unprotect
End Sub
Sub proteger()
'
' proteger Macro
'

'
Sheets("JANVIER").Select
ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= _
False
Sheets("FEVRIER").Select
ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= _
False
Sheets("MARS").Select
ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= _
False
Sheets("AVRIL").Select
ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= _
False
Sheets("MAI").Select
ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= _
False
Sheets("JUIN").Select
ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= _
False
Sheets("JUILLET").Select
ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= _
False
Sheets("AOUT").Select
ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= _
False
Sheets("SEPTEMBRE").Select
ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= _
False
Sheets("OCTOBRE").Select
ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= _
False
Sheets("NOVEMBRE").Select
ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= _
False
Sheets("DECEMBRE").Select
ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= _
False
End Sub




Et, au cas où l'ensemble des feuilles composant le classeur.

DONNEES
JANVIER
FEVRIER
MARS
AVRIL
MAI
JUIN
JUILLET
AOUT
SEPTEMBRE
OCTOBRE
NOVEMBRE
DECEMBRE
RECAPITULATIF
FICHE INFOS
CALCULS


Un grand merci par avance.
 

fanfan38

XLDnaute Barbatruc
Bonjour
VB:
dim i as integer
for i=1 to sheets.count
  if sheets(i).name<>"Données" or  sheets(i).name<>"CALCULS" or  sheets(i).name<>"FICHE INFOS" or  sheets(i).name<>"RECAPITULATIF" then
    sheets(i).unprotect 'ou  sheets(i).protect
  endif
next

A+ François
sinon sheets("JANVIER") .protect'(ou unprotect) suffisent
 

halecs93

XLDnaute Impliqué
Merci beaucoup..... tout de suite, c'est plus clair et plus simple
 

fanfan38

XLDnaute Barbatruc
Cela n'a rien à voir avec la question posée...
Faudra patienter ou ouvrir un autre post
De plus revoit ta copie : A22 = septembre
Sur cette ligne je vois des =JANVIER !

A+ François
 
Dernière édition:

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…