OVH Cloud OVH Cloud

interdire l'écriture dans les cellules

3 réponses
Avatar
nadia.b
Bonsoir à tous,
Je connais au moins deux manières d'interdire l'écriture sur des cellules
distinctes (Format/cellules/Protection... puis protéger la feuille) ainsi
qu'avec (Données/Validations/Longueur du texte ... et inscrire 0)
Mais voilà que je me demande si c'est possible en VBA d'interdire l'écriture
sur toutes les cellules ce qui ne sont pas nommées "plage" et "plage2",
et permettre pour moi l'accès, si je dois corriger quelque chose par la
suite.
Merci de vos lumières
Nadia

3 réponses

Avatar
Hervé
Bonsoir Nadia,
A mettre dans le module de ta feuille et à adapter selon tes besions. Fais
des tests pour voir si cela te conviens. Il t'es possible de remettre la
variable "Tentative" à zéro en exécutant la proc "Ini" (que tu pourra virer
une fois que tout les tests sont finis). Pour éviter qu'un utilisateur
vienne voir ton mot de passe (pour l'exemple "MonMotàMoi" que tu dois
adapter) dans le VBE, protège le en allant dans Outils|Propriétés de
VBAProject...|Onglet "Protection" :

Dim Tentative As Integer

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim MotDePasse As String

If Not Intersect(Target, Union(Range("Plage"), Range("Plage2"))) Is Nothing
Then
If Tentative = 3 Then
MsgBox "Ne vous acharnez pas, ça ne sert à rien !"
Selectionner
Exit Sub
End If
If MsgBox("Toute modification dans ces cellules est interdite !" &
vbCrLf & _
"Si vous voulez malgré tout effectuer des modifs, un mot " & _
"de passe va vous être demandé !" & vbCrLf & _
"Effectuer les modifications ?", vbExclamation + vbYesNo) = vbYes
Then
MotDePasse = InputBox("Entrez le mot de passe.", "Modification.")
If MotDePasse <> "" Then
If MotDePasse <> "MonMotàMoi" Then 'adapter le mot de passe
If Tentative = 3 Then
MsgBox "C'est fini pour vous !"
Selectionner
Exit Sub
End If
MsgBox "Mot de passe erroné !"
Tentative = Tentative + 1
Selectionner
Exit Sub
End If
Else
Selectionner
End If
Else
Selectionner
End If
End If
End Sub

Sub Selectionner()
'sélectionne la cellule A1
'si interdiction, adapte
'EnableEvents d'ésactive l'événement
'quand sélection de A1
Application.EnableEvents = False
[A1].Select
Application.EnableEvents = True
End Sub

Sub Ini()
'au cas où, tu peux remettre à zéro
Tentative = 0
End Sub

Hervé.

"nadia.b" a écrit dans le message news:
#
Bonsoir à tous,
Je connais au moins deux manières d'interdire l'écriture sur des cellules
distinctes (Format/cellules/Protection... puis protéger la feuille) ainsi
qu'avec (Données/Validations/Longueur du texte ... et inscrire 0)
Mais voilà que je me demande si c'est possible en VBA d'interdire
l'écriture

sur toutes les cellules ce qui ne sont pas nommées "plage" et "plage2",
et permettre pour moi l'accès, si je dois corriger quelque chose par la
suite.
Merci de vos lumières
Nadia




Avatar
nadia.b
Bonsoir Hervé,
je vais voir ce que tu m'as préparé et je vais l'essayer de ce pas.
Salutations
Nadia


"Hervé" a écrit dans le message de
news:
Bonsoir Nadia,
A mettre dans le module de ta feuille et à adapter selon tes besions. Fais
des tests pour voir si cela te conviens. Il t'es possible de remettre la
variable "Tentative" à zéro en exécutant la proc "Ini" (que tu pourra
virer

une fois que tout les tests sont finis). Pour éviter qu'un utilisateur
vienne voir ton mot de passe (pour l'exemple "MonMotàMoi" que tu dois
adapter) dans le VBE, protège le en allant dans Outils|Propriétés de
VBAProject...|Onglet "Protection" :

Dim Tentative As Integer

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim MotDePasse As String

If Not Intersect(Target, Union(Range("Plage"), Range("Plage2"))) Is
Nothing

Then
If Tentative = 3 Then
MsgBox "Ne vous acharnez pas, ça ne sert à rien !"
Selectionner
Exit Sub
End If
If MsgBox("Toute modification dans ces cellules est interdite !" &
vbCrLf & _
"Si vous voulez malgré tout effectuer des modifs, un mot " & _
"de passe va vous être demandé !" & vbCrLf & _
"Effectuer les modifications ?", vbExclamation + vbYesNo) vbYes
Then
MotDePasse = InputBox("Entrez le mot de passe.",
"Modification.")

If MotDePasse <> "" Then
If MotDePasse <> "MonMotàMoi" Then 'adapter le mot de passe
If Tentative = 3 Then
MsgBox "C'est fini pour vous !"
Selectionner
Exit Sub
End If
MsgBox "Mot de passe erroné !"
Tentative = Tentative + 1
Selectionner
Exit Sub
End If
Else
Selectionner
End If
Else
Selectionner
End If
End If
End Sub

Sub Selectionner()
'sélectionne la cellule A1
'si interdiction, adapte
'EnableEvents d'ésactive l'événement
'quand sélection de A1
Application.EnableEvents = False
[A1].Select
Application.EnableEvents = True
End Sub

Sub Ini()
'au cas où, tu peux remettre à zéro
Tentative = 0
End Sub

Hervé.

"nadia.b" a écrit dans le message news:
#
Bonsoir à tous,
Je connais au moins deux manières d'interdire l'écriture sur des
cellules


distinctes (Format/cellules/Protection... puis protéger la feuille)
ainsi


qu'avec (Données/Validations/Longueur du texte ... et inscrire 0)
Mais voilà que je me demande si c'est possible en VBA d'interdire
l'écriture

sur toutes les cellules ce qui ne sont pas nommées "plage" et "plage2",
et permettre pour moi l'accès, si je dois corriger quelque chose par la
suite.
Merci de vos lumières
Nadia








Avatar
AV
Pourquoi ne pas interdire carrément la sélection des cellules dans lesquelles tu
ne veux pas de saisies ?
Les plages "Plage" et Plage1" de "Feuil1" étant déverrouillées, dans le module
de ThisWorkbook :

Private Sub Workbook_Open()
With Sheets("Feuil1")
.Protect Contents:=True, UserInterfaceOnly:=True
.EnableSelection End with
End Sub

Par macro, ça te permet ensuite "d'intervenir" dans cette feuille sans avoir à
gérer un éventuel mot de passe (UserInterfaceOnly:=True
)
AV