XL 2013 me prévenir si ma feuille est déprotégée

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour à toutes et à tous,

Me re-voilou avec un nouveau souci (ou plutôt un ancien qui persiste).

Je me permets de faire à nouveau appel à vous :)

En fait, c'est le sujet suivant : https://www.excel-downloads.com/threads/créer-une-alerte-si-la-feuille-nest-pas-protégée.20025881/ - Qui m'incite à poser ma question maintenant car il est proche de mon souci ainsi que la solution de Philippe (phlaurent55) mais pas tout à fait.

Voici mon petit exposé
J'ai dans mon fichier de travail une feuille qui contient beaucoup de cellules (lignes et colonnes)
et avec beaucoup de codes d'exécution (dans la feuille)
Après exécution de chaque code, cette feuille doit être en permanence protégée.

Je n'ai pas encore trouvé pourquoi mais il arrive que la feuille se trouve "déprotégée" et souvent la raison en est la désactivation des macros
Cela pose de gros problèmes ensuite dans le fonctionnement de cette feuille.

J'en viens à ma demande
Serait-il possible qu'un code permette de détecter si la feuille est "déprotégée" et si c'est le cas,
il pourrait y avoir un msgbox genre "votre feuille est déprotégée cliquez ICI"

Je joins le fichier test de Philippe.

Avec mes remerciements aux habitants d'un nouveau pays chaud et bientôt tropical :p
Je vous souhaite une belle journée,
Amicalement,
arthour973,
 

Pièces jointes

  • 111.xlsm
    35 KB · Affichages: 36
Dernière édition:

Si...

XLDnaute Barbatruc
re et .... fin de cet échange pour moi
Ce qui peut donc se dire:
La seule utilisé de la protection d'une feuille c'est éviter l'effacement intempestif de formules
(Car si c'est l'effacement d'une saisie, il suffira à l'utilisateur de la ressaisir)
Bonjour les dégâts quand l'utilisateur ne connait pas les formules, quand le concepteur a des formules alambiquées (3, 4 lignes voire plus).

Il m'arrive de protéger un classeur*
- pour avoir une circulation entre cellules importantes plus directe
- pour éviter de supprimer, de rajouter des lignes, des colonnes, des titres, des données constantes …

* c'est un pis-aller pour certains mais cela me rend bien service sans passer par de nouvelles manipulations, macros.
 

Staple1600

XLDnaute Barbatruc
Re

?
Je n'ai pas écris qu'il ne fallait pas protéger une feuille mais que la seule utilité d'une feuille protégée était...
Je ne vois pas ce que j'ai écrit d'incongru.

NB: Moi aussi, je protége parfois des classeurs* (si je ne veux pas me fader la réinsertion des formules, des formats, des bordures etc...) (* surtout si ils sont utilisés par des tiers, tiers à qui j'ai montré comment protéger (et pourquoi) manuellement une feuille.
Ce que j'ai donc dit dans cette phrase précedemment citée (que je résume ci-dessous en)
"Protéger une feuille évite les accidents intempestifs."
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour Lionel et les autres,

Le sujet de ce fil c'est la détection d'un évènement (la déprotection d'une feuille).

Un moyen très lambda consiste à faire tourner une macro en arrière-plan :
Code:
Private Sub Workbook_Open()
Application.OnTime 1, "ThisWorkbook.ArrierePlan"
End Sub

Sub ArrierePlan()
Do
    DoEvents
    If Not Feuil2.ProtectContents Then
        MsgBox "'Feuille protégée' n'est plus protégée !", 48
        While Not Feuil2.ProtectContents: DoEvents: Wend
    End If
Loop
End Sub
Fichier joint.

A+
 

Pièces jointes

  • Détection(1).xlsm
    21.9 KB · Affichages: 22

VIARD

XLDnaute Impliqué
Bonsoir à tous

Pour compléter ce que je dis:

[CODE =VB]
Sub Protection()
Dim EtatProtect
EtatProtect = "Déprotégée"
If ActiveSheet.ProtectContents Then EtatProtect = "Protégée"
Range("Q5").Value = EtatProtect
End Sub
[/Code]
et lui affecter un bouton sur la feuille.

Bonne nuit.
A+ Jean-Paul
 

job75

XLDnaute Barbatruc
Bonjour le fil, le forum,

Dans ce fichier (2) le message propose de remettre la protection :
Code:
Sub ArrierePlan()
Do
    DoEvents
    If Not Feuil2.ProtectContents Then
        If MsgBox("'Feuille protégée' n'est plus protégée !" & vbLf & _
            "Voulez-vous remettre la protection ?", 52) = 6 Then Feuil2.Protect "Lionel"
        While Not Feuil2.ProtectContents: DoEvents: Wend
    End If
Loop
End Sub
En cliquant sur "Oui" la protection est bien remise.

Nota : curieusement chez moi le texte de la commande "Protéger la feuille" n'est pas modifié.

Il faut passer sur un autre onglet du ruban et revenir pour que s'affiche "Ôter la protection de la feuille".

Je ne suis pas arrivé à remédier à ce petit problème.

Bonne journée.
 

Pièces jointes

  • Détection(2).xlsm
    21.9 KB · Affichages: 15

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum

Bonsoir à tous

Pour compléter ce que je dis:

[CODE =VB]
Sub Protection()
Dim EtatProtect
EtatProtect = "Déprotégée"
If ActiveSheet.ProtectContents Then EtatProtect = "Protégée"
Range("Q5").Value = EtatProtect
End Sub
[/Code]
et lui affecter un bouton sur la feuille.

Bonne nuit.
A+ Jean-Paul

Bonjour VIARD

C'est l'emploi de cette syntaxe*:ProtectContents que j'ai proposé dans le message#8 à arthour973
Mais j'attends toujours son retour ou commentaire à ce sujet ;)

(* mais dans mon exemple au sein d'une fonction)
 

Staple1600

XLDnaute Barbatruc
Bonjour job75


@job75
Pour infos
(j'ai testé ton classeur sur Excel 2003)
Si j'enléve la protection et que je réponds non à la Msgbox, la barre d'outils Mise en forme est "désactivée".
Bizarre, non ?
(PS: Il suffit de faire ALT+Tab pour qu'elle se réactive)

EDITION: La barre d'outils Standard est également "désactivée"
Le fait de déplacer les barres permet également de les "réactiver"
 

Staple1600

XLDnaute Barbatruc
Re

Autre "effet de bord" constaté (sur Excel 2003)
J'ouvre le classeur en activant les macros
Puis j'essaie d'enregistrer une macro, s'affiche alors le message : Excel a rencontré un problème et doit être fermé
J'ai essayé plusieurs fois, c'est systématique. (PS: je me doute bien du pourquoi de la chose)
EDITION2: Le simple fait de supprimer la feuille protégée fait planter Excel (sans faire tourner l'enregisteur de macros)
Il faudrait empecher de pouvoir supprimer la feuille manuellement par clic-droit sur l'onglet.

PS: je vais tester en changeant de macro enregistée
(Celle de mon premier test était: clic-droit sur la feuille protégée -> Supprimer la feuille)

EDITION1: (retour d'expérience fin (toujours sur Excel 2003)
En laissant le fichier Détection ouvert, et en créant un autre ou en ouvrant un autre sur lequel, on pourrait avoir besoin de créer une macro, les seuls évément enregistrés par l'enregistreur de macros concernent les barres d'outils, toute autre action n'est pas enregistrée.
On ne peut non plus écrire de code VBA dans VBE (tant que la macro ArrierePlan s'exécute)
Cela peut-être selon l'environnement de travail "ennuyeux".
 
Dernière édition:

job75

XLDnaute Barbatruc
Re,

Pendant que la macro tourne en arrière-plan on ne peut rien faire dans VBA.

On peut mettre un bouton qui arrêtera/relancera la macro par ce code :
Code:
Sub Bouton_Click()
With Feuil1.DrawingObjects(1)
    If .Text Like "Marche*" Then Application.OnTime 1, "ThisWorkbook.ArrierePlan"
    arret = .Text Like "Arrêt*"
    .Text = IIf(.Text Like "Arrêt*", "Marche", "Arrêt") & " de la macro en arrière-plan"
End With
End Sub
Fichier (3).

A+
 

Pièces jointes

  • Détection(3).xlsm
    24.8 KB · Affichages: 20

Discussions similaires

Statistiques des forums

Discussions
312 413
Messages
2 088 198
Membres
103 763
dernier inscrit
p.michaux