Macro Protection d'une feuille à une date précise

  • Initiateur de la discussion Initiateur de la discussion fx83
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

F

fx83

Guest
Bonjour,

j'aimerai savoir s'il est possible à une date précise de cloturer une feuille excel à l'aide d'une macro par exemple.
Et si oui, quelle serait cette macro svp?

Présentation de ma feuille:

B1 affiche la date à l'aide de la formule aujourdhui().
R17 contient la date en chaine de caractère du lundi 31 décembre 2007

J'aimerai qu'au 31 décembre 2007, la feuille se verrouille automatiquement.

une idée svp?
 
Re : Macro Protection d'une feuille à une date précise

Bonjour,

C'est jouable! Il suffit de rajouter la macro suivante sur l'objet "ThisWorkBook" :

Private Sub Workbook_Open()
Dim today As Date
Dim borne As Date
today = Date
borne = "31/12/2007"
If (today < borne) Then
Sheets(1).Unprotect
MsgBox ("L'onglet est déprotégé")
Else
Sheets(1).Protect
MsgBox ("L'onglet est protégé")
End If
End Sub

Ce code est bien sûr à adapter à votre situation, mais l'idée est là!
Bonne continuation.

Yan
 
Re : Macro Protection d'une feuille à une date précise

Yan L à dit:
Bonjour,

C'est jouable! Il suffit de rajouter la macro suivante sur l'objet "ThisWorkBook" :

Private Sub Workbook_Open()
Dim today As Date
Dim borne As Date
today = Date
borne = "31/12/2007"
If (today < borne) Then
Sheets(1).Unprotect
MsgBox ("L'onglet est déprotégé")
Else
Sheets(1).Protect
MsgBox ("L'onglet est protégé")
End If
End Sub

Ce code est bien sûr à adapter à votre situation, mais l'idée est là!
Bonne continuation.

Yan

Merci Yan pour ton aide, ca marche pas mal ton code....
Seulement j'ai encore un petit souci.

Voici mon code:
Code:
Sub verrouillage()
'
' verouillage Macro
' Macro enregistrée le 20/07/2007 par fixou
'

'
Dim today As Date
Dim borne As Date
today = Date
borne = "31/12/2007"
If (today < borne) Then
Range("C4:Q25,C27:Q31,C34:Q40,C42:Q44,C46:Q50,C52:Q63").Select
Selection.Locked = False
Selection.FormulaHidden = False
Range( _
        "A1:Q3,A4:B25,A26:Q26,A27:B31,B32,A32:Q32,A33:Q33,A34:B40,A41:Q41,A42:B44,A45:Q45,A46:B50,A51:Q51,A52:B63,A66:Q66,A68" _
        ).Select
Selection.Locked = True
Selection.FormulaHidden = False
ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:=False
Range("C4").Select
MsgBox ("A tenir à jour régulièrement, merci")
Else
Range("A1:Q100").Select
Selection.Locked = True
Selection.FormulaHidden = False
ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:=False
Range("C4").Select
MsgBox ("Feuille verrouillée car année terminée")
End If
End Sub

Lors de l'ouverture de la feuille, la macro s'execute bien mais un message d'erreur apparait: 'erreur d'éxecution 1004' - Impossible de définir la propriété Locked de la classe range.

Je pense que le problème vient du fait que lorsqu'on ferme la feuille, celle ci est protégée, du coup lorsqu'on la ré-ouvre et que la macro s'éxecute, il y a un conflit. Enfin je pense.

Quelle solution serait envisageable svp?
De plus j'aimerai éxecuter cette macro non plus a chaque ouverture de chaque feuille, mais que la macro check les 11 feuilles du classeur à l'ouverture de celui ci.
 
Dernière modification par un modérateur:
Re : Macro Protection d'une feuille à une date précise

Bonjour FX83, bonjour Yan, bonjour à tous,

En fait j'aurai plutôt fait 2 macros, une pour définir les cellules à déprotéger et une autre pour le verrouillage de fin d'année.

Pour les protections de cellules, il est plus simple de tout verrouiller puis de déprotéger les cellules souhaitées soit (avec une boucle sur toutes les feuilles):

Code:
Sub cellprotect()
Dim WS As Worksheet
For Each WS In Worksheets
    WS.Activate
    ActiveSheet.Unprotect
    Range("A1:Q100").Select
    Selection.Locked = True
    Selection.FormulaHidden = False
    Range("C4:Q25,C27:Q31,C34:Q40,C42:Q44,C46:Q50,C52:Q63").Select
    Selection.Locked = False
    Selection.FormulaHidden = False
    ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:=False
    Range("C4").Select
    MsgBox ("A tenir à jour régulièrement, merci")
Next WS
End Sub

Pour le verrouillage de fin d'année (avec la même boucle sur toutes les feuilles):

Code:
Private Sub Workbook_Open()
'
' verouillage Macro
' Macro enregistrée le 20/07/2007 par fixou
'
'
Dim today As Date
Dim borne As Date
Dim WS As Worksheet
today = Date
borne = "31/12/2007"
If (today >= borne) Then
    For Each WS In Worksheets
    WS.Activate
    ActiveSheet.Unprotect
    Range("A1:Q100").Select
    Selection.Locked = True
    Selection.FormulaHidden = False
    ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:=False
    Range("C4").Select
    MsgBox ("Feuille " & WS.Name & " verrouillée car année terminée")
    Next WS
End If
End Sub

La macro verrouillage est à placer comme l'a précisé Yan dans l'objet "thisworkbook".

La macro "cellprotect" est à mettre dans un module et peut être lancée à la demande.

Est-ce que cela répond à ta demande?
@+

Gael
 
Re : Macro Protection d'une feuille à une date précise

Oui, merci...
J'avais trouvé une autre soluce mais je me suis compliqué la vie...

Je ne gère pas encore très bien le visual basic et ne comprends pas trop la différence entre la partie "microsoft excel objects" et "modules".
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

C
Réponses
1
Affichages
740
D
Réponses
5
Affichages
1 K
débutantplus
D
A
  • Question Question
Réponses
8
Affichages
950
Retour