Vérouillage de cellules irréversible

Choops

XLDnaute Occasionnel
Bonjour à tous!

Je suis entrain de chercher un procédé qui vérouillerait des cellules via un bouton et ferait apparaître des valeurs dans des cellules, et cela, uniquement si une "case à cocher" est cochée pour éviter les clics non voulus sur le bouton.

L'idée est de faire apparaître le taux de productivité quotidien en fin de semaine, une fois que toutes les statistiques de la semaine aient été remplies, mais que ces statistiques ne soient plus modifiables une fois que les taux sont affichés pour éviter la tricherie.

Je pensais donc mettre une "case à cocher" et un bouton qui, une fois la "case à cocher" cochée, verouillerait toutes les cellules de la feuille entière et ferait apparaître les taux de productivité quotidiens et hebdo. (via un changement de mise en forme peut être?)

Il serait peut être intéressant d'utiliser le système "permettre aux utilisateurs de modifier des plages" en activant un mot de passe lorsque la case est cochée et qu'on a cliqué sur le bouton.

Qu'en pensez vous ?

Merci d'avance!

PS: le fichier final aura 54 onglets [Sem1 ; Sem53] + un onglet "Controle".
Le mdp pr enlever la protection est toto .
 
Dernière édition:

jmd2

XLDnaute Accro
Re : Vérouillage de cellules irréversible

'jour

possibilité :
sélectionner toute la feuille, copier, collage spécial "valeurs"
tu enregistres ça en macro et tu l'associes à un bouton.

mais je ne sais pas mettre la condition "si case est cochée"
 

Choops

XLDnaute Occasionnel
Re : Vérouillage de cellules irréversible

Bonjour tout le monde, jmd2 :)

je viens d'écrire un code pour effectuer ce vérouillage de cellules irréversible.

Cependant j'aimerais bien l'améliorer en ajoutant 2 choses:

1/ la première serait que le code arrête son exécution si le mot de passe de la feuille est différent de celui inscrit dans le code pour éviter que le débogueur ne se lance et que tout le monde ait accès au code. J'imagine que cela doit être quelque chose du genre On Error blabla mais je ne connais pas les options et la syntaxe.

2/ Ensuite, j'aimerais bien que le code ne puisse se lancer uniquement si "la case à cocher" à côté du bouton est cochée.

Je ne pense pas que ça soit quelque chose de compliqué mais je n'arrive pas à mes fins avec l'enregistreur.

Merci d'avance!
 
Dernière édition:

Choops

XLDnaute Occasionnel
Re : Vérouillage de cellules irréversible

J'ai lié la case à cocher avec la cellule AM15, puis écrit le code suivant mais ça ne fonctionne pas! Je ne comprends pas trop pourquoi...

J'ai l'impression que ça "m'exit sub" à chaque fois

Code:
Sub Macro2()

If Range("AM15").Value = "VRAI" Then
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
    ActiveSheet.Unprotect "toto"
    Range(Cells(1, 1), Cells([K65000].End(xlDown).Row, 11)).Locked = True
    Range("D163:J167").Locked = False
    Range("D23:J23").Font.ColorIndex = 3
    Range("K23").Font.ColorIndex = 2
    ActiveSheet.Protect "toto"
    ActiveSheet.EnableSelection = xlUnlockedCells
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Else
    Exit Sub
End If
End Sub

J'aimerais bien faire un code basé sur "ActiveSheet" pour éviter de copier le code 53 fois (il y a 53 onglets sur le fichier final).

Merci! :)
 
Dernière édition:

JNP

XLDnaute Barbatruc
Re : Vérouillage de cellules irréversible

Bonjour Choops :),
Je ne sais pas si ma réponse te conviendra mais personnellement, si j'ai suivi ton problème, je ferais différement :
1) Pour éviter l'accès au code, il te suffit de mettre un mot de passe sur le module VBA (clic droit -> propriétés)
2) Plutôt que ton système de case à cocher, je verrais plutôt un MsgBox avec la demande de la confirmation de l'action, en précisant que l'action est irréversible.
3) S'il y a 53 onglets, c'est qu'il y a 1 onglet par semaine, plus un récap... Dans ton code VBA, tu peux faire référence à chacune de tes feuilles avec une variable. De plus, tu peux faire un menu personnalisé qui tiendra compte de la feuille activée au lancement de la macro.
A te lire :cool:
 

Choops

XLDnaute Occasionnel
Re : Vérouillage de cellules irréversible

Hello JNP, merci pour ta réponse ! Par contre vu mon piètre niveau en VBA, tes idées (comme celle du point 2) soulèvent d'autres interrogations car je n'ai aucune idée de comment faire un msgbox demandant la confirmation du lancement de la macro.

Pour le point 3, je n'ai pas tout à fait compris. :eek:
Tiens moi au courant!
 

Choops

XLDnaute Occasionnel
Re : Vérouillage de cellules irréversible

J'ai suivi tes conseils et voilà le résultat:


Code:
Sub Macro2()

Dim rep As Integer
rep = MsgBox("/!\  ATTENTION !!" & vbCrLf & "Toute modification ultérieure de cette page sera impossible." & vbCr & "Êtes-vous sûr de vouloir continuer ?", vbYesNo)
If rep = vbNo Then Exit Sub
If rep = vbYes Then
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
    On Error Resume Next
    ActiveSheet.Unprotect "toto"
    Range(Cells(1, 1), Cells([K65000].End(xlDown).Row, 11)).Locked = True
    Range("D163:J167").Locked = False
    Range("D23:J23").Font.ColorIndex = 3
    Range("K23").Font.ColorIndex = 2
    ActiveSheet.Protect "toto"
    ActiveSheet.EnableSelection = xlUnlockedCells
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End If
End Sub

Par contre je ne comprends pas pourquoi le vbCrLf me fait seulement un retour à la ligne sans le saut de ligne ?? :confused: Tu as une idée ?
 

JNP

XLDnaute Barbatruc
Re : Vérouillage de cellules irréversible

Bonjour Choops :),
Pour ton MsgBox, teste voir :
Code:
Dim rep As Integer, Msg As String
Msg = "Toute modification ultérieure de cette page sera impossible." _
    & vbCr & "Êtes-vous sûr de vouloir continuer ?"
rep = MsgBox(Msg, vbYesNo + vbCritical, "ATTENTION !")
Ça devrait être plus beau.
Pour le point 3 :
A la place d'ActiveSheet, tu peux faire référence à la feuille avec un variable type :
Code:
Dim I as Integer
For I = 1 to 53
Sheets("Feuil" & I).Protect "Toto"
Next I
Bon courage :cool:
 

Discussions similaires