(Résolu) Private Sub Worksheet_Change(ByVal Target As Range)

fmoore

XLDnaute Junior
Bonjour,

Dans la commande suivante avez-vous une idée ce que je peux mettre à la place de cancel=true ?

Dans le fond si il met pas le bon mot de passe je veux pas que le changement que la personne fait soit accepté.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$7" Then
Dim Reponse As Variant

Reponse = Application.InputBox("Entrez votre identifiant", "Autorisation", , , , , , 2)

If VarType(Reponse) = vbBoolean Then
Reponse = MsgBox("Modification non appliqué, Réessayer ?", vbYesNo)
If Reponse = vbYes Then ' L'utilisateur a choisi Oui.
Reponse = Application.InputBox("Entrez votre identifiant", "Autorisation", , , , , , 2)
If VarType(Reponse) = vbBoolean Then
MsgBox "Vous ne pouvez pas changer le seuil vous devez demander au secrétariat", vbOKOnly
Cancel = True
ElseIf StrComp(Reponse, "MDP") <> 0 Then
Cancel = True
End If
Else ' L'utilisateur a choisi Non.
Cancel = True
End If
ElseIf StrComp(Reponse, "MDP") <> 0 Then
Reponse = MsgBox("Mot de passe érroné, Réessayer ?", vbYesNo)
If Reponse = vbYes Then ' L'utilisateur a choisi Oui.
Reponse = Application.InputBox("Entrez votre identifiant", "Autorisation", , , , , , 2)
If VarType(Reponse) = vbBoolean Then
MsgBox "Vous ne pouvez pas changer le seuil vous devez demander au secrétariat", vbOKOnly
Cancel = True
ElseIf StrComp(Reponse, "MDP") <> 0 Then
Cancel = True
End If
Else ' L'utilisateur a choisi Non.
Cancel = True
End If
End If
End If
End Sub

Merci de votre temps !
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Private Sub Worksheet_Change(ByVal Target As Range)

Re


fmoore
[remarque]
Je ne vois nulle trace dans ton premier fil d'une indication que la question est résolue..
(d'autant plus que ton fil est resté sans réponse)
[/remarque]

Pour infos:
Application.Undo existe en VBA
(voir l'aide VBA pour les détails - touche F1)
 
Dernière édition:

fmoore

XLDnaute Junior
Re : Private Sub Worksheet_Change(ByVal Target As Range)

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$7" Then
Dim Reponse As Variant

Reponse = Application.InputBox("Entrez votre identifiant", "Autorisation", , , , , , 2)

If VarType(Reponse) = vbBoolean Then
Reponse = MsgBox("Modification non appliqué, Réessayer ?", vbYesNo)
If Reponse = vbYes Then ' L'utilisateur a choisi Oui.
Reponse = Application.InputBox("Entrez votre identifiant", "Autorisation", , , , , , 2)
If VarType(Reponse) = vbBoolean Then
MsgBox "Vous ne pouvez pas changer le seuil vous devez demander au secrétariat", vbOKOnly
Application.Undo
ElseIf StrComp(Reponse, "MDP") <> 0 Then
Application.Undo
End If
Else ' L'utilisateur a choisi Non.
Application.Undo
End If
ElseIf StrComp(Reponse, "MDP") <> 0 Then
Reponse = MsgBox("Mot de passe érroné, Réessayer ?", vbYesNo)
If Reponse = vbYes Then ' L'utilisateur a choisi Oui.
Reponse = Application.InputBox("Entrez votre identifiant", "Autorisation", , , , , , 2)
If VarType(Reponse) = vbBoolean Then
MsgBox "Vous ne pouvez pas changer le seuil vous devez demander au secrétariat", vbOKOnly
Cancel = True
ElseIf StrComp(Reponse, "MDP") <> 0 Then
Application.Undo
End If
Else ' L'utilisateur a choisi Non.
Application.Undo
End If
End If
End If
End Sub
 

Staple1600

XLDnaute Barbatruc
Re : Private Sub Worksheet_Change(ByVal Target As Range)

Re

fmoore
Je n'ai pas dit qu'il fallait forcément l'utiliser dans ton code
J'ai simplement répondu à ton interrogation ;)
Dans le fond a la place de cancel = true j'aurais besoin de faire undo mais je ne crois pas que sa existe en vba undo
Et donc ma réponse fut:
Pour infos:
Application.Undo existe en VBA
(voir l'aide VBA pour les détails - touche F1)

PS: Au fait , tu sais que ton code VBA de protection est facilement contournable ?
 

Staple1600

XLDnaute Barbatruc
Re : Private Sub Worksheet_Change(ByVal Target As Range)

Re

fmoore
Pas besoin de connaitre VBA, il suffit par inadvertance (ou pas) d'enregistrer ton classeur en *.xlsx
Mais ceci est une autre histoire.

Question: Pourquoi ne pas gérer l'accès du classeur à l'ouverture du classeur ?
Si la personne a le droit de l'ouvrir, c'est bien qu'elle a le droit de le modifier, non ?
Si elle n'a pas le droit alors l'ouvrir en lecture seule devrait suffire, non ?
 

fmoore

XLDnaute Junior
Re : Private Sub Worksheet_Change(ByVal Target As Range)

En fait c'est que les gens peuvent modifier d'autre endroit dans cette feuille mais jamais cette cellule. L'autre technique serait de verrouiller seulement cette cellule mais le secrétariat va devoir la déverrouiller a chaque fois qu'ils ont besoin de l'utiliser et ne pas oublier de la verrouiller c'est pour ça j'aimerais mieux mettre un mot de passe pour pouvoir changer le contenue de la cellule.
 

Staple1600

XLDnaute Barbatruc
Re : Private Sub Worksheet_Change(ByVal Target As Range)

Re

fmoore
Personnellement, je ferai comme ceci si je devais le faire ;)
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$A$1" Then
If IsError(Application.Match(Application.UserName, Array("toto", "titi", "tutu", "tata"), 0)) Then
MsgBox "Vous ne pouvez pas modifier cette cellule !", vbCritical, "ERREUR"
Target.Offset(1).Select
End If
End If
End Sub
Si l’utilisateur actif n'est ni toto, ni titi, ni tutu, ni tata , il ne pourra pas modifier la celllule A1.
 

Discussions similaires

  • Question
Microsoft 365 MsgBox
Réponses
9
Affichages
406

Statistiques des forums

Discussions
311 720
Messages
2 081 907
Membres
101 836
dernier inscrit
karmon