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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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" <nadia.b@sangene.ch> a écrit dans le message news:
#DNR64LgFHA.3788@tk2msftngp13.phx.gbl...
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
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
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
Bonsoir Hervé,
je vais voir ce que tu m'as préparé et je vais l'essayer de ce pas.
Salutations
Nadia
"Hervé" <hmsilve@wanadoo.fr> a écrit dans le message de
news:eUWk55MgFHA.3428@TK2MSFTNGP09.phx.gbl...
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" <nadia.b@sangene.ch> a écrit dans le message news:
#DNR64LgFHA.3788@tk2msftngp13.phx.gbl...
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
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
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
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
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