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

fx83

XLDnaute Nouveau
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?
 

Yan L

XLDnaute Nouveau
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
 

fx83

XLDnaute Nouveau
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 édition:

Gael

XLDnaute Barbatruc
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
 

fx83

XLDnaute Nouveau
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".
 

Discussions similaires

Statistiques des forums

Discussions
312 489
Messages
2 088 854
Membres
103 975
dernier inscrit
denry