Avertir l'usager qu'il ôte la protection de la feuille
Résolu
Nai
Messages postés
714
Date d'inscription
Statut
Membre
Dernière intervention
-
Nai Messages postés 714 Date d'inscription Statut Membre Dernière intervention -
Nai Messages postés 714 Date d'inscription Statut Membre Dernière intervention -
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 :)
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 :)
A voir également:
- Avertir l'usager qu'il ôte la protection de la feuille
- Bruler feuille de laurier - Guide
- Feuille de pointage excel - Télécharger - Tableur
- Verrouiller cellule excel sans verrouiller la feuille - Guide
- K9 web protection - Télécharger - Contrôle parental
- Feuille a5 - Guide
5 réponses
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
Il faudrait peut être mieux mettre un mot de passe qu'un avertissement !
Comme cela pas possible de modifier intempestivement sauf "l'administrateur"
Cdlmnt
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
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
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
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
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 :
Dans le module 4 :
https://www.cjoint.com/?DGixlWoII8g
eric
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
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 :
Et le débogage me surligne au jaune :
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 !
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 !
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 :
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question