Enlever message d'erreur modification cellule car feuille protéger
Bonjour le forum Excel pratique,
Est-il possible de supprimer les messages d'erreur sur un classeur Excel ? Par exemple, lorsque je double-clique sur une cellule que je ne peux pas modifier car la feuille est protégée, je ne souhaite pas voir s'afficher le message d'erreur suivant :
J'ai vérifié s'il n'y avait la possibilité de l'enlever directement dans les paramètres mais je ne trouve rien.
Cette demande fait suite car j'ai un code qui me permet d'ouvrir un UserForm lorsque l'on double click sur un cellule, cependant, lorsque l'on ferme le UserForm ce message apparait à chaque fois ce qui peut être dérangeant. Je suis obliger de protéger la feuille car je veux que l'utilisateur puisse remplir les cellules seulement via le UserForm.
Merci d'avance pour votre aide.
Salut,
J'avais posé la même question ! Je te laisse voir les différentes réponses reçues. Message d'erreur "La cellule .... se trouve sur une feuille protégée ....." (excel-pratique.com)
J'avais indiqué que celle de Dan resortait du lot.
Cordialement.
Bonjour à tous,
Peut-être en testant si la feuille est protégée, si oui on annule le double clic.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Me.ProtectContents = True Then
Cancel = True
End If
End Sub
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
If Me.ProtectContents = True Then
Cancel = True
End If
End SubBonjour à vous deux,
Merci pur vos réponse, j'ai essayer de modifier le code mais je n'y arrive malheureusement pas. Pouvez-vous directement modifier le code svp ? voici le code qui me permet d'ouvrir mon userform : (Il est dans "ThisWorkBook")
Private lastClickedCell As Range ' Ajout d'une variable globale pour stocker la dernière cellule cliquée
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
Dim ws As Worksheet
Dim baseWs As Worksheet
Dim rng As Range
Dim cell As Range
Dim columnName As String
' Vérifier si la feuille sur laquelle le double-clic est effectué est différente de la feuille "Paramétre"
If Sh.Name <> "Paramétre" Then
Set baseWs = ThisWorkbook.Sheets("Base paramétrable")
' Vérifier si la cellule double-cliquée est dans les plages spécifiées
If Not Intersect(Target, Union(Sh.Range("6:14"), Sh.Range("22:30"), Sh.Range("38:46"))) Is Nothing Then
' Récupérer le nom de la colonne de la cellule double-cliquée
columnName = Split(Sh.Cells(5, Target.Column).Address, "$")(1)
' Vérifier si la valeur dans la cellule de la ligne 5 et dans la même colonne que la cellule double-cliquée est répertoriée dans la colonne Q à partir de la ligne 2 de la feuille "Base paramétrable"
Set rng = baseWs.Range("Q2:Q" & baseWs.Cells(baseWs.Rows.Count, "Q").End(xlUp).Row)
For Each cell In rng
If cell.Value = Sh.Cells(5, Target.Column).Value Then
' Mettre à jour la référence de la dernière cellule cliquée
Set lastClickedCell = Target
' Ouvrir le Userform "Frm_Enregistrement"
Frm_Enregistrement.Show
Exit For
End If
Next cell
End If
End If
End Sub
Public Function GetLastClickedCell() As Range
Set GetLastClickedCell = lastClickedCell
End FunctionMerci infiniment pour votre soutien.
Le Chat de Mistral ma modifié le code pour qu'il m'enlève la protection lorsque j'ouvre le UserForm, voici la modification :
Private lastClickedCell As Range ' Ajout d'une variable globale pour stocker la dernière cellule cliquée
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
On Error GoTo ErrorHandler
Dim ws As Worksheet
Dim baseWs As Worksheet
Dim rng As Range
Dim cell As Range
Dim columnName As String
' Vérifier si la feuille sur laquelle le double-clic est effectué est différente de la feuille "Paramétre"
If Sh.Name <> "Paramétre" Then
Set baseWs = ThisWorkbook.Sheets("Base paramétrable")
' Vérifier si la cellule double-cliquée est dans les plages spécifiées
If Not Intersect(Target, Union(Sh.Range("6:14"), Sh.Range("22:30"), Sh.Range("38:46"))) Is Nothing Then
' Récupérer le nom de la colonne de la cellule double-cliquée
columnName = Split(Sh.Cells(5, Target.Column).Address, "$")(1)
' Vérifier si la valeur dans la cellule de la ligne 5 et dans la même colonne que la cellule double-cliquée est répertoriée dans la colonne Q à partir de la ligne 2 de la feuille "Base paramétrable"
Set rng = baseWs.Range("Q2:Q" & baseWs.Cells(baseWs.Rows.Count, "Q").End(xlUp).Row)
For Each cell In rng
If cell.Value = Sh.Cells(5, Target.Column).Value Then
' Désactiver temporairement la protection de la feuille
Sh.Unprotect
' Mettre à jour la référence de la dernière cellule cliquée
Set lastClickedCell = Target
' Ouvrir le Userform "Frm_Enregistrement"
Frm_Enregistrement.Show
Exit For
End If
Next cell
End If
End If
Exit Sub
ErrorHandler:
' Réactiver la protection de la feuille en cas d'erreur
Sh.Protect
End Sub
Public Function GetLastClickedCell() As Range
Set GetLastClickedCell = lastClickedCell
End FunctionCependant, il n'arrive pas à me trouver la solution pour remettre la protection lorsque je ferme le UserForm.
Re,
Peut-tu mettre un fichier sans données sensibles car là je vois des lignes de codes qui ne me plaisent pas trop.
En fait quel est le but recherché ? si c'est d'ouvrir un formulaire sur le clic dans des cellules il-y-a plus simple notamment en utilisant un tableau structuré.
lastClickedCell n'est pas utilisé. A quoi te sert-il ?
Re,
Oui, voici en pièce jointe le fichier.
Je suis actuellement confronté à un problème avec ce fichier. Lorsque je ferme le formulaire, un message d'erreur s'affiche. Je me demande s'il serait préférable de changer complètement de méthode, bien que j'aie déjà bien avancé avec celle-ci. J'appréhende de devoir tout recommencer simplement à cause de ce problème. Je pense que vous comprendrez mieux ma situation en examinant le fichier. Il faut ouvrir une nouvelle feuille via le calendrier, puis sélectionner une cellule dans la partie "Listes Incidents (temps en minutes)".
lastClickedCell est normalement utilisé pour enregistrer la cellule active, car je la renseigne dans le UserForm.
Re,
Déjà teste comme-cela :
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
'Vérifier si la feuille sur laquelle le double-clic est effectué est différente de la feuille "Paramétre"
If Sh.Name <> "Paramétre" Then
Dim baseWs As Excel.Worksheet
Set baseWs = ThisWorkbook.Sheets("Base paramétrable")
' Vérifier si la cellule double-cliquée est dans les plages spécifiées
If Not Intersect(Target, Union(Sh.Range("6:14"), Sh.Range("22:30"), Sh.Range("38:46"))) Is Nothing Then
' Récupérer le nom de la colonne de la cellule double-cliquée
Dim columnName As String
columnName = Split(Sh.Cells(5, Target.Column).Address, "$")(1)
' Vérifier si la valeur dans la cellule de la ligne 5 et dans la même colonne que la cellule double-cliquée est répertoriée dans la colonne Q à partir de la ligne 2 de la feuille "Base paramétrable"
Dim rng As Excel.Range
Set rng = baseWs.Range("Q2:Q" & baseWs.Cells(baseWs.Rows.Count, "Q").End(xlUp).Row)
Dim Cell As Excel.Range
For Each Cell In rng
If Cell.Value = Sh.Cells(5, Target.Column).Value Then
' Mettre à jour la référence de la dernière cellule cliquée
Set lastClickedCell = Target
' Ouvrir le Userform "Frm_Enregistrement"
'Frm_Enregistrement.Show
Exit For
End If
Next Cell
Else
If Target.Locked = True And Sh.ProtectContents = True Then
Cancel = True
End If
End If
End If
End Sub
Public Function GetLastClickedCell() As Range
Set GetLastClickedCell = lastClickedCell
End FunctionBonjour,
Je pense (voire plus...), qu'Yvouille t'avait très bien mis sur la voie...
Perso, je mettrais, juste après l'instruction .Show l'annulation de l'édition de la cellule double-cliquée ainsi :
....
....
Userformxxx.Show
Cancel = True
....
....Bonne apm
Bonjour,
Je vous l'accord, cela fonctionne très bien. Merci.
Cordialement,
