Message issu de la protection d'un onglet

ValCou

XLDnaute Nouveau
Bonjour

Encore une question à propos de la protection des onglets. Mon code vba fonctionne tout à fait correctement et je protège les feuilles et les cellules qui le doivent.

L'utilisateur obtient un message excel lorsqu'il veut saisir sur une cellule protégée ("the cell or chart you are trying to change is protected and therefore read oly ....") . Est il possible de mettre un message personnalisé à la place style : "impossible de modifier cette cellule ". Et si oui comment faire ?

Merci d'avance

Valérie
 

job75

XLDnaute Barbatruc
Re : Message issu de la protection d'un onglet

Bonjour ValCou, le forum,

A priori sur une cellule verrouillée dans une feuille protégée on ne peut pas éviter ni modifier ce message.

Une solution est de ne pas protéger la feuille Edit : mieux, de déverrouiller toutes les cellules.

Ensuite, dans une macro Worksheet_Change, tester la cellule pour savoir s'il faut interdire l'entrée.

Si oui, annuler l'entrée et éditer le message par :

Code:
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
MsgBox "Impossible de modifier cette cellule."

A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Message issu de la protection d'un onglet

Bonjour ValCou, le forum,

Voici un exemple concret, avec cette macro dans le code de la feuille (clic droit sur l'onglet et Visualiser le code) :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Autorisé As Range
Set Autorisé = Range("D5:D10,D12:D17,D19:D24")
If Autorisé.Address = Union(Target, Autorisé).Address Then Exit Sub
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
MsgBox "Impossible de modifier cette cellule.", 48
End Sub

A+
 

Pièces jointes

  • ValCou.xls
    27.5 KB · Affichages: 48

ValCou

XLDnaute Nouveau
Re : Message issu de la protection d'un onglet

Merci pour ton aide.
Cependant, je suis partie dans l'optique de ne rien écrire sur des évènements de feuiilles mais de coder dans un module. Cela dans le but d'une maintenance plus facile car dans l'avenir un certain nombre d'onglets (au masque identique) pourront être rajoutés par l'utilisateur.
Aussi, je ne vois pas comment adapter ton code et je ne trouve pas d'autre solution que de protéger les feuilles (à l'exeption de quelques cellules) à l'initialisation du fichier.
A +
Valérie
 

SubEndSub

XLDnaute Occasionnel
Re : Message issu de la protection d'un onglet

Bonjour chez vous


En mettant le code de job75 dans ThisWorkbook

Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim Autorisé As Range
Set Autorisé = Range("D5:D10,D12:D17,D19:D24")
If Autorisé.Address = Union(Target, Autorisé).Address Then Exit Sub
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
MsgBox "Impossible de modifier cette cellule.", 48
End Sub

toutes les feuilles du classeur sont prises en compte.

Même celles qui seront insérées par la suite.
 

job75

XLDnaute Barbatruc
Re : Message issu de la protection d'un onglet

Re Valérie,

Je ne comprends pas très bien mais on peut toujours mettre la macro dans un Module :

Code:
Sub Message(Target As Range)
Dim Autorisé As Range
Set Autorisé = Range("D5:D10,D12:D17,D19:D24")
If Autorisé.Address = Union(Target, Autorisé).Address Then Exit Sub
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
MsgBox "Impossible de modifier cette cellule.", 48
End Sub

Et aussi faire en sorte qu'elle s'applique à toutes les feuilles avec cette macro dans ThisWorkbook :

Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Source As Range)
Call Message(Source)
End Sub

NB : si toutes les cellules des feuilles sont déverrouillées, on peut protéger les feuilles.

Edit : salut SubEndSub :) je n'avais pas rafraîchi...

A+
 

Pièces jointes

  • ValCou (1).xls
    30 KB · Affichages: 44
Dernière édition: