XL 2016 MFC si feuille verrouillée

TomAg

XLDnaute Nouveau
Bonjour,

Je souhaiterais savoir s'il est possible de mettre en forme une cellule, en fonction de l'état de verrouillage de la feuille dans laquelle elle se trouve ? Si oui, comment puis-je faire ?

Exemple :
- Si la feuille est verrouillée, la cellule B5 affiche "Feuille verrouillée" avec un fond de couleur vert.
- Si la feuille est déverrouillée, alors la cellule B5 affiche "Attention, feuille déverrouillée" avec un fond rouge.

En vous remerciant d'avance !
Tom
 
Solution
bonsoir tomag bonsoir job75 bonsoir le forum
une macro dans évenement feuille
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If ActiveSheet.ProtectContents = True Then
      Range("B5") = "Feuille verrouillée"
      Else
      Range("B5") = "Attention, feuille déverrouillée"
        End If

End Sub

la cellule b5 déverrouillée et couleur verte

le code dans la mfc couleur rouge
Code:
=GAUCHE(B5;9)="Attention"
cordialement
galougalou

job75

XLDnaute Barbatruc
Voyez le fichier joint :

- la cellule B5 de chaque feuille est déverrouillée

- il suffit de vérifier que l'option Format de cellule est cochée quand on protège la feuille, avec ou sans mot de passe.

La macro dans Module1 :
VB:
Sub TestProtection()
Static t# 'mémorise la variable
Dim Sh As Object, test As Boolean
On Error Resume Next
Application.OnTime t, "TestProtection", , False 'RAZ de sécurité
Set Sh = ThisWorkbook.ActiveSheet
test = Sh.ProtectContents
With Sh.[B5] 'cellule à adapter
    .Value = "Feuille " & IIf(test, "", "non ") & "protégée"
    .Interior.Color = IIf(test, vbGreen, vbRed)
    .Font.Color = IIf(test, vbBlack, vbWhite)
End With
ThisWorkbook.Saved = True 'évite l'invite à la fermeture
t = Now + 1 / 86400 'temporisation 1 seconde
Application.OnTime t, "TestProtection" 'relance le processus
End Sub
Le processus est lancé par la Workbook_Open dans ThisWorkbook.
 

Pièces jointes

  • Test protection(1).xlsm
    19.9 KB · Affichages: 10
Dernière édition:

job75

XLDnaute Barbatruc
Voyez maintenant ce fichier (2) qui utilise une MFC :

- la cellule B5 de chaque feuille n'est plus déverrouillée, ellle contient la formule =Test()

- la MFC lui est appliquée

- le code avec la fonction VBA Test :
VB:
Function Test() As String
Application.Volatile
Test = "Feuille " & IIf(Application.Caller.Parent.ProtectContents, "", "non ") & "protégée"
End Function

Sub TestProtection()
Static t# 'mémorise la variable
On Error Resume Next
Application.OnTime t, "TestProtection", , False 'RAZ de sécurité
Calculate 'recalcule les formules volatiles
ThisWorkbook.Saved = True 'évite l'invite à la fermeture
t = Now + 1 / 86400 'temporisation 1 seconde
Application.OnTime t, "TestProtection" 'relance le processus
End Sub
 

Pièces jointes

  • Test protection(2).xlsm
    21.1 KB · Affichages: 3

GALOUGALOU

XLDnaute Accro
bonsoir tomag bonsoir job75 bonsoir le forum
une macro dans évenement feuille
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If ActiveSheet.ProtectContents = True Then
      Range("B5") = "Feuille verrouillée"
      Else
      Range("B5") = "Attention, feuille déverrouillée"
        End If

End Sub

la cellule b5 déverrouillée et couleur verte

le code dans la mfc couleur rouge
Code:
=GAUCHE(B5;9)="Attention"
cordialement
galougalou
 

Pièces jointes

  • mfc verrouillée.xlsm
    16.8 KB · Affichages: 8

job75

XLDnaute Barbatruc
Bonsoir GALOUGALOU,

Oui une macro Worksheet_SelectionChange évite d'avoir une macro qui tourne en arrière-plan.

Mais ça ne fonctionne que si l'on sélectionne une cellule après la protection ou la déprotection.

A+
 

GALOUGALOU

XLDnaute Accro
re job
totalement exact
c'est pour cela, que dans le classeur, j'ai aussi placé la macro dans l'activation de la feuille, qui nécessite malgré tout, si une modification de protection se produit dans la feuille, de sélectionner une cellule.
mais je ne pense pas que cette procédure soit prise en défaut si le demandeur a une utilisation courante d'excel.
cordialement
galougalou
 
Dernière édition:

TomAg

XLDnaute Nouveau
Bonjour à tous,

Un grand merci pour vos réponses !

La solution de Galougalou me parait être la plus adaptée pour mon système puisqu'elle évite tous problèmes de ralentissement du logiciel lié à l’exécution en arrière plan. Après test, elle fonctionne !

Problème résolu ! ;)
 

job75

XLDnaute Barbatruc
Bonjour TomAg, GALOUGALOU, le forum,

Quelle que soit la solution utilisée il paraît nécessaire d'interdire toute modification de la cellule B5.

Pour cela il suffit d'empêcher la sélection de cette cellule :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, [B5]) Is Nothing Then [A1].Select
'---suite (pour GALOUGALOU)---
End Sub
à placer dans la ou les feuilles concernées.

A+
 

GRI84

XLDnaute Nouveau
Bonjour,
je me raccroche à ce forum qui me semble proche de ma question.
Je n'arrive pas à trouver où est l'erreur de cette macro si c'est de là que vient le PB suivant.
Lorsque je "verrouille " la cellule et protège la feuille par PW (en plus de protéger mon tableau, pour que lors de l'utilisation avec tabulation on saute la cellule en question) l'affichage auto ne se fait plus et la fenêtre débogage apparait.

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Columns(1)) Is Nothing Then
If Target <> "" Then
Target.Offset(0, 3).Value = Format(Now, "dd hh:mm")
End If
If Target = "" Then
Target.Offset(0, 3).Value = ""

End If

End If

End Sub

Lorsque je "verrouille " la cellule et protège la feuille par PW (en plus de protéger mon tableau, pour que lors de l'utilisation avec tabulation on saute la cellule en question) l'affichage auto ne se fait plus et la fenêtre débogage apparait.

Comment y remédier?
Merci de votre aide.
je joins le fichier en question.
PS j'aurai deux autres questions sur l'emploi de cette "feuille" et des mises en formes conditionnelles, mais je ne vais pas mélanger les sujets :))