VBA : Messages d'erreur indésirables

Bonjour,

Dans le fichier ci-joint, j’ai une macro qui me permet d’ôter ou remettre le signe X dans mes colonnes C et D par un simple double-clic dans la cellule concernée. Comme je voudrais empêcher toutes modifications autres que l’écriture ou l’effacement de ces X, j’ai placé une protection sur la feuille qui est enlevée et remise en place dans mon code.

Tout fonctionne assez bien à l’exception que j’ai à chaque fois un message d’erreur qui apparaît. J’ai bien essayé de le supprimer par les instructions Application.DisplayAlerts = False/True, mais rien n’y fait.

Avez-vous une idée pour m’aider ?

Voici le code concerné :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim Plage
Set Plage = Application.Intersect(Target, Range("C3:D" & Range("A" & Rows.Count).End(xlUp).Row))
ActiveSheet.Unprotect
If Not Plage Is Nothing Then Target = IIf(Target = "", "X", "")

Application.DisplayAlerts = False
    ActiveSheet.Protect
Application.DisplayAlerts = True

End Sub

Cordialement.

7demo.xlsm (27.76 Ko)

bonsoir,

une manière de contourner le problème

Option Explicit

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim Plage
Set Plage = Application.Intersect(Target, Range("C3:D" & Range("A" & Rows.Count).End(xlUp).Row))
ActiveSheet.Unprotect
If Not Plage Is Nothing Then Target = IIf(Target = "", "X", "")
ActiveSheet.Protect
Cancel = True
End Sub

Bonsoir Yvouille, H2SO4

C'est en fait l'absence de la commande Cancel = True ( bien vue par h2so4 ) qui provoque le message : la finalisation de la commande double-clic (édition de la cellule) intervenant sur la feuille reprotégée.

Cancel = True suffit donc à éliminer le problème.

Cordialement.

bonsoir Mferrand,

ma correction ( cfr edit) a croisé ton commentaire.

Merci h2so4 et MFerrand pour vos réponses

La solution de h2so4 fonctionne parfaitement, mais c'est vrai que celle de MFerrand est plus simple.

Voici mon code final :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim Plage
Set Plage = Application.Intersect(Target, Range("C3:D" & Range("A" & Rows.Count).End(xlUp).Row))
ActiveSheet.Unprotect
If Not Plage Is Nothing Then Target = IIf(Target = "", "X", "")

Cancel = True 

ActiveSheet.Protect

End Sub

Enfin, ce n'est pas vraiment ''mon'' code, puisque j'en avais déjà piqué le début sur la toile

Très bonne continuation.

Rechercher des sujets similaires à "vba messages erreur indesirables"