Avertir l'usager qu'il ôte la protection de la feuille

Résolu/Fermé
Nai Messages postés 709 Date d'inscription vendredi 29 avril 2005 Statut Membre Dernière intervention 23 janvier 2025 - Modifié par Nai le 8/07/2014 à 19:00
Nai Messages postés 709 Date d'inscription vendredi 29 avril 2005 Statut Membre Dernière intervention 23 janvier 2025 - 16 juil. 2014 à 13:55
Bonjour tout le monde !

Je reviens à vous (et reviendrais probablement encore plus tard) pour un tout petit problème.

Toujours un lien avec ce sujet : https://forums.commentcamarche.net/forum/affich-30361189-afficher-les-enfant-de-moins-de-x-ans-uniquement#p30365885

Le séjour de juillet vient de débuter, et, inévitablement, la personne en charge du pointage (je suis en vacances) a fait quelques erreurs. De type : Ôter la protection => Copier une ligne => Insérer les cellules copiées. Du coup, en bas, les chiffres ne correspondaient plus. Dans mon fichier, c'est pas bien. L'utilisateur avait à sa disposition un bouton appelant une macro qui le faisait correctement, et bien plus vite... M'enfin.

La macro en question fait tout ça, rapidement. Je voudrais que :
Si l'utilisateur clique sur la macro => Pas de problème, pas d'avertissement.
Si l'utilisateur va dans "Révisions" puis clique sur "Ôter la protection de la feuille" => Avertissement, de type : "Soyez certain de ce que vous faites ! La modification d'une seule formule peut entraîner de graves erreurs !"
Oui, c'est dur, mais il faut bien ça :D

Je ne pense pas que le fichier soit nécessaire, mais s'il le faut, je le mettrais en ligne ;)

Ainsi, cela vous semble-t-il possible ?



Bien à vous,
Naï
ps: je surveille tous mes sujets non résolus, si solution vous avez, je la lirais à coup sûr :)

5 réponses

via55 Messages postés 14512 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 18 janvier 2025 2 740
8 juil. 2014 à 19:05
Bonjour

Il faudrait peut être mieux mettre un mot de passe qu'un avertissement !
Comme cela pas possible de modifier intempestivement sauf "l'administrateur"

Cdlmnt
0
Nai Messages postés 709 Date d'inscription vendredi 29 avril 2005 Statut Membre Dernière intervention 23 janvier 2025 55
8 juil. 2014 à 21:17
Bonsoir Via,
C'est déjà le cas en fait. La macro ôte la protection (avec mot de passe) et la remet à la fin (avec le même mot de passe). Lorsqu'on clique sur ôter la protection depuis l'onglet "Révisions", il demande le mot de passe. Logique. Le mot de passe est indiqué dans le premier onglet du tableau. Il y a parfois besoin de déverrouiller les feuilles. Mais je souhaite que lorsque cela est fait, l'utilisateur soit avertis.

Par exemple, lorsque Excel demande le mot de passe, à côté ou sous le champ de saisie, ajouter le texte d'avertissement.

Voir le fichier : https://www.cjoint.com/?0Givp4OT8gU
0
via55 Messages postés 14512 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 18 janvier 2025 2 740
8 juil. 2014 à 22:37
Malheureusement on ne peut rien rajouter à la procédure d'Excel

La seule solution que je verrai serait :
1) de protéger les feuilles par un mot de passe non divulgué
2) d'associer une macro à un bouton sur les feuilles à déproteger qui afficherait dans une messagebox l'avertissement et demanderait confirmation de déprotéger puis déprotegerait la feuille en cas de réponse affirmative (comme le font déjà les macros de travail)
3) une autre macro reprotegerait la feuille dès qu'on change de feuille (Worksheet Deactivate)
4) par sécurité on peut prévoir une macro qui protège toutes les feuilles à protéger à l'ouverture du classeur (This Workbook Workbook Open)

Cdlmnt
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 250
8 juil. 2014 à 23:14
Bonjour à tous,

Comme dit via, on ne peut pas détecter la déprotection de la feuille.

Une proposition qui scrute régulièrement si les feuilles listées sont protégées.
Si une feuille est non protégée une boite de dialogue demande si on veut les re-protéger.
Met le temps que tu juges le plus adéquat entre pouvoir travailler et être suffisament chiant pour que l'utilisateur finisse par dire Oui.
Pour les tests j'ai mis 10 s.
Je n'ai mis que 3 feuilles, complète la liste. Eventuellement ajoute des tests si les protections diffèrent (avec et sans mdp par exemple)
Dans ThisWorkbook :
Private Sub Workbook_Open()
    supervision
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    finSupervision
End Sub

Dans le module 4 :
Option Explicit
Option Private Module

Dim m_nextTime As Date

Sub supervision()
    Dim listeF, i As Long, j As Long, msg As String
    'Stop
    listeF = Array("Feuille de présence", "Moyennes", "Fréquentation globale")
    For i = 0 To UBound(listeF)
        If Not Sheets(listeF(i)).ProtectContents Then
            If MsgBox("Attention, certaines feuilles sont non protégées." & vbLf & "Les reprotéger ?", vbQuestion + vbYesNo, "Protection !!!") = vbYes Then
                For j = 0 To UBound(listeF)
                    ActiveSheet.Protect "alsh", DrawingObjects:=True, Contents:=True, Scenarios:=True _
                        , AllowInsertingColumns:=True, AllowInsertingRows:=True, _
                        AllowInsertingHyperlinks:=True
                Next j
                Exit For
            End If
        End If
    Next i
    m_nextTime = Now + TimeValue("00:00:10")
    Application.OnTime m_nextTime, "supervision"
End Sub

Sub finSupervision()
    ' arreter le timer
    On Error Resume Next
    Application.OnTime EarliestTime:=m_nextTime, Procedure:="supervision", Schedule:=False
End Sub

https://www.cjoint.com/?DGixlWoII8g

eric
0
Nai Messages postés 709 Date d'inscription vendredi 29 avril 2005 Statut Membre Dernière intervention 23 janvier 2025 55
9 juil. 2014 à 13:55
10 secondes me parait très bien :D
Par contre, il y a un petit problème. J'ai eu beau ajouter toutes les feuilles dans le code du module 4, elles ne sont pas toutes protégées lorsque j'accepte de les reprotéger...

Voici le code que j'ai dans le module 4 :
Sub supervision()
Dim listeF, i As Long, j As Long, msg As String
'Stop
listeF = Array("Feuille de présence", "Moyennes", "Fréquentation globale", "Fréquentation 4-5 ans", "Fréquentation 6-11 ans", "Fréquentation 12-17 ans", "Pourcentage S1", "Pourcentage S2", "Global")
For i = 0 To UBound(listeF)
If Not Sheets(listeF(i)).ProtectContents Then
If MsgBox("Attention, certaines feuilles sont non protégées." & vbLf & "Les reprotéger ?", vbQuestion + vbYesNo, "Protection !!!") = vbYes Then
For j = 0 To UBound(listeF)
ActiveSheet.Protect "alsh", DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowInsertingColumns:=True, AllowInsertingRows:=True, _
AllowInsertingHyperlinks:=True
Next j
Exit For
End If
End If
Next i
m_nextTime = Now + TimeValue("00:00:10")
Application.OnTime m_nextTime, "supervision"
End Sub

Et le débogage me surligne au jaune :
                    ActiveSheet.Protect "alsh", DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowInsertingColumns:=True, AllowInsertingRows:=True, _
AllowInsertingHyperlinks:=True

Je n'ai pas réussi à mettre en forme le code comme toi Eriiic :/

J'ai bien pensé à ajouter une virgule avec le dernier "True", sans succès. Pareil si j'y ajoute en plus le "_".

En tout cas, tout cela me parait bien ! Le message qui avertis l'utilisateur qu'il travaille sur des feuilles non protégées, c'est ce qu'il me fallait !

Si en plus je peux ajouter une macro qui protège une feuille au changement de feuille, c'est encore mieux :D

Merci !
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 250
Modifié par eriiic le 9/07/2014 à 16:52
Bonjour,

Je n'ai pas réussi à mettre en forme le code
cliquer sur le menu déroulant à coté de l'icone <> et choisir basic

elles ne sont pas toutes protégées
Si tu avais dit lesquelles ça m'aurai fait gagner du temps.
J'avais juste copié-collé ton code de protection, c'était toujours la même feuille. Corrigé
De plus j'ai vu que les graphiques ne connaissent pas certains paramètres, j'ai ajouté un test. Reprend le code sur le fichier(module4).
Mais toutes tes feuilles sont concernées ? Si oui tu peux enlever le test sur leur nom et chaque nouvelle feuille sera prise en compte automatiquement.

Si en plus je peux ajouter une macro qui protège une feuille au changement de feuille, c'est encore mieux :D
C'est 10 fois plus simple.
Dans thisworkbook :
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
    If Sh.Type = xlWorksheet Then
        Sh.Protect "alsh", DrawingObjects:=True, Contents:=True, Scenarios:=True _
            , AllowInsertingColumns:=True, AllowInsertingRows:=True, _
              AllowInsertingHyperlinks:=True
    Else ' Graph
        Sh.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    End If
End Sub

J'ai fait pour toutes les feuilles. Si tu veux filtrer par noms ajoute-le.
Tu peux modifier le msgbox de l'autre sub, seule la feuille active peut être non protégée maintenant.

edit : https://www.cjoint.com/?DGjq0iQ49i7
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Nai Messages postés 709 Date d'inscription vendredi 29 avril 2005 Statut Membre Dernière intervention 23 janvier 2025 55
16 juil. 2014 à 13:55
Merci tout plein ! :)
0