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
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
A voir également:
- Avertir l'usager qu'il ôte la protection de la feuille
- Feuille de pointage excel - Télécharger - Tableur
- Verrouiller cellule excel sans verrouiller la feuille - Guide
- Comment supprimer une feuille sur word - Guide
- Excel reporter des données sur une autre feuille avec conditions - Forum Excel
- Bruler feuille de laurier - Guide
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
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
Il faudrait peut être mieux mettre un mot de passe qu'un avertissement !
Comme cela pas possible de modifier intempestivement sauf "l'administrateur"
Cdlmnt
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
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
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
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
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
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
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
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 :
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
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
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 :
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 !
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
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 :
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
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
16 juil. 2014 à 13:55
Merci tout plein ! :)