Eviter message Excel "... sur feuille protégée..."
Bonjour,
Une feuille Xl contient des petits tableaux de valeurs archivés. Les cellules sont verrouillées. La feuille est protégée pour éviter toute modification.
Un 2clics sur certaines cellules déclenche des macros permettant par exemple de déplacer le tableau dans l’archive et/ou d’afficher un message. Tout fonctionne bien mais la macro terminée, Excel affiche « La cellule… que vous essayez de modifier est sur une feuille protégée…). DisplayAlerts ne donne rien...
Comment éviter ce message exaspérant ?
Le rame depuis 2 jours
Bonjour,
à mettre dans Thisworkbook :
Private Sub Workbook_Open()
Worksheets("Feuil1").Protect Password:="pw", UserInterfaceOnly:=True
End Sub
si c'est sans mot de passe supprime Password:="pw",
Seul l'utilisateur devra déprotéger, plus les macros.
eric
Bonjour Eriiic
Merci de ton intérêt pour ma question. Excuse mon retard à te répondre. je viens à peine de voir ton message et de l'essayer
Le code suivant ne donne rien ni placé dans workbook_open() dans ThisWorkbook ni à l'ouverture de la Feuil1
Worksheets("Feuil1").Protect , UserInterfaceOnly:=True. Mon message apparait immédiatement suivi de celui d'Excel.
L' aide VBA sur Protect n'est pas très compréhensible où il est effectivement question de UserInterfaceOnly mais apparemment aussi d'un objet Chart et pas sheet.
Bonjour,
Pourtant c'est bien ça
Il faut mettre autant de fois cette ligne de code que de feuilles concernées (ou une boucle sur un array si tu sais faire).
Et remplacer "Feuil1" par le nom des feuilles.
Mais ce message, tu l'as après la fin des macros qui se déroulent entièrement ?
Si tu peux déposer un fichier de travail (anonymisé) reproduisant le pb stp.
Et dans ta macro double-clic tu mets bien Cancel=True une fois la plage contrôlée ?
Sinon tu entres en édition à la fin de la macro et il n'aime peut-être pas ce que la macro y a mis.
eric
Magnifique ! RESOLU
Bravo Eric.
Bravo et merci.
Je viens d'ajouter avant la dernière ligne End Sub ton fameux Cancel = True (sans même savoir pourquoi !)
Et je n'ai plus le message Excel. Tout est propre.
Je vais essayer de me documenter pour comprendre cet argument Cancel qui marque la fin de l'évènement doubleclic certainement
Reste à mettre en résolu. Je ne vois pas comment faire.
Il ne faut pas qu'elle s'exécute sur tous les double-clics, mais uniquement sur ceux où tu fais une action sur la feuille.
Sinon tu perds la possibilité d'éditer dans la cellule.
Met une macro double-clic ici pour voir.
eric
Comme demandé par Eric voici un extrait du code où tout fonctionne bien. Il opére sur une feuille d'archive où les seules actions autorisées sont 1)monter la grille d'un niveau dans la liste 2) descendre 3) supprimer 4) copier dans une autre feuille pour travail et celle-ci 0) rejeter un 2clics hors des grilles archivées
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
' 5 actions suivant la cellule cliquée
Worksheets("Feuil1").Unprotect
Worksheets("Feuil2").Unprotect
LT = Target.Row
CT = Target.Column
'Action 0) Rejette le double clic s’il n'est pas dans la grille
If CT = 1 Or CT = 11 Or LT = 1 Or (LT - 1) Mod 10 = 0 Then
MsgBox " Vous ne pouvez double-cliquer qu'à l'intérieur d'une grille
GoTo FIN
End if
… code des 4 autres actions ….
FIN: 'fin de chacune des 5 actions
Worksheets("Feuil2").Protect
Worksheets("Feuil1").Columns("B:J").Locked = True
Cancel = True
Worksheets("Feuil1").Protect UserInterfaceOnly:=True
End Sub
Bonjour,
je vois plutôt :
'...
Cancel = True
FIN: 'fin de chacune des 5 actions
Worksheets("Feuil2").Protect
Worksheets("Feuil1").Columns("B:J").Locked = True
Worksheets("Feuil1").Protect UserInterfaceOnly:=True
End Sub
Par ailleurs :
Worksheets("Feuil1").Columns("B:J").Locked = True
est inutile dans la macro. Puisque ça ne change jamais c'est à faire une fois pour toute sur la feuille.
Pour :
Worksheets("Feuil1").Protect UserInterfaceOnly:=True
Je ne t'ai pas dit de les mettre là, mais dans workbook_open() de thisworkbook.
Et les :
Worksheets("Feuil1").Unprotect
sont également inutiles puisque la commande précédente dit à excel : protège contre les utilisateurs mais pas les macros
Ce qui se résume à :
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
' 5 actions suivant la cellule cliquée
LT = Target.Row
CT = Target.Column
'Action 0) Rejette le double clic s’il n'est pas dans la grille
If CT = 1 Or CT = 11 Or LT = 1 Or (LT - 1) Mod 10 = 0 Then
MsgBox " Vous ne pouvez double-cliquer qu'à l'intérieur d'une grille"
Exit Sub
End If
'… code des 4 autres actions ….
'...celles acceptées doivent avoir avant le End If :
' Cancel = True
' exit sub ' dans la mesure ou les If suivants n'ont pas besoin d'être exécuté
'...celles refusées doivent avoir avant le End If :
' exit sub
End Sub
eric
PS : merci d'utiliser l'icone </> pour les codes pour avoir une lecture plus facile et agréable.