Identification à des plages via InputBox

Bonjour,

j'ai mis au point un code dans VBA pour accéder à des plages de cellules selon le mot de passe que l'on rentre dans un InputBox, seulement cela ne marche pas et j'aimerais de l'aide si possible!

Le code :

Sub verrouillage()
    Dim Answer As String

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Target.Address = "$A$25" Then
    Answer = InputBox("Entrer votre mot de passe pour accéder à vos plages.", "Déverouillage de plages")

    If Answer = mdp1 Then
        ActiveSheet.Unprotect
        ActiveSheet.Range("B4:B14").Locked = False
        ActiveSheet.Protect Password:="test", DrawingObjects:=True, Contents:=True, Scenarios:=True

    ElseIf Answer = mdp2 Then
        ActiveSheet.Unprotect
        ActiveSheet.Range("D4:D14").Locked = False
        ActiveSheet.Protect Password:="test", DrawingObjects:=True, Contents:=True, Scenarios:=True

    Else MsgBox("Ce mot de passe ne correspond à personne.", "Erreur d'identification") 'message d'erreur de syntaxe ici...
    End If

End If
End Sub

Merci de votre aide!

Bonsoir

Sub verrouillage()
    Dim Answer As String

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Sub verrouillage

sans end sub

ça ne marche pas , mais encore...

corrige déjà ce bug, puis ensuite sois plus explicite... que nous puissions t'aider.

Merci

Bonjour,

merci pour la réponse déjà. (j'ai ajouté le End Sub)

Déjà avez-vous compris l'objectif de mon code? Il s'agit simplement de s'identifier à ses plages de cellules via un InputBox avec son mot de passe.

J'ai donc mis une liste de conditions If, ElseIf et Else. Car quand on va rentrer un mot de passe, VBA va rechercher quel mot de passe a été rentré afin de déverrouiller les cellules correspondantes. Si le mot de passe entré ne correspond à aucun mot de passe inscrit dans le code, un message d'erreur apparaîtra.

Mais lorsque que je rentre mdp1 ou mdp2 qui sont enregistrés en tant que probables mots de passe, rien ne se passe...

Merci!

Bonjour

Sub verrouillage()
    Dim Answer As String
    End Sub

Ne signifie rien

Il faut mettre la déclaration de Answer dans l'évènement :

Worksheet_SelectionChange

D'autre part , tu dois mettre mdp1 et mdp2 entre guillemets:

"mdp1" "mdp2"

A+

Salut,

Merci de ton aide!

J'ai ajouté les guillemets aux mots de passe et je n'ai laissé que " Dim Answer As String " en haut de la page.

J'ai aussi ajouté le mot de passe après " ActiveSheet.Unprotect" pour que cela ce fasse tout seul.

Maintenant il ne me manque plus qu'à mettre en place le MsgBox d'erreur quand le mot de passe entré est incorrect.

J'ai utilisé le Else mais tu vois bien dans mon code qu'il y a un problème.

Une dernière aide svp?

Merci!

Re!

J'ai trouvé il fallait simplement retirer les parenthèses...

Topic résolu en tout cas merci beaucoup!

Bonjour,

Je vois que le post est résolu mais je verrai bien ça comme ceci :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    Dim MDP As String
    Const PlageA As String = "A4:A14"
    Const PlageB As String = "B4:B14"
    Const mdp1 As String = "MotDePasse1"
    Const mdp2 As String = "MotDePasse2"
    Const mdpAdmin As String = "MDP_Administrateur"

    Select Case Target.Address(0, 0)

        Case "A1"

            MDP = InputBox("Entrer votre mot de passe pour accéder à vos plages.", "Déverouillage de plages")

            If MDP = "" Then Exit Sub

            If MDP = mdp1 Then

                ActiveSheet.Unprotect mdpAdmin
                ActiveSheet.Range(PlageA).Locked = False
                ActiveSheet.Range(PlageB).Locked = True
                ActiveSheet.Protect mdpAdmin, True, True, True
                MsgBox "Zone '" & PlageA & "' déverrouillée !"

            Else

                MsgBox "Ce mot de passe ne correspond à personne.", , "Erreur d'identification"

            End If

        Case "A25"

            MDP = InputBox("Entrer votre mot de passe pour accéder à vos plages.", "Déverouillage de plages")

            If MDP = "" Then Exit Sub

            If MDP = mdp2 Then

                ActiveSheet.Unprotect mdpAdmin
                ActiveSheet.Range(PlageB).Locked = False
                ActiveSheet.Range(PlageA).Locked = True
                ActiveSheet.Protect mdpAdmin, True, True, True
                MsgBox "Zone '" & PlageB & "' déverrouillée !"

            Else

                MsgBox "Ce mot de passe ne correspond à personne.", , "Erreur d'identification"

            End If

    End Select

End Sub

Bonjour Theze,

Ta version me paraît plus simple et mieux modulable en effet, je pense du coup utiliser celle-ci!

Est-ce qu'il y aurait moyen de faire en sorte que la cellule pour entrer son mot de passe ne puisse pas être modifiée ?

C'est-à-dire qu'on ne puisse que cliquer dessus et rien d'autre.

Merci beaucoup en tout cas!

Re,

Le mot de passe est saisi dans l'InputBox et non dans la cellule, il faut qu'il soit saisi dans la cellule ?

Re,

non il doit être saisi dans l'InputBox mais je demandais car ce serait bien qu'on ne puisse rien n'y écrire.

Ce n'est pas grave si c'est pas possible

Re,

Tu ne peux pas empêcher d'inscrire quelque chose dans les cellules mais tu peux supprimer ce qui a été inscrit selon la cellule. Avec comme cible les cellules A1 et A25, à mettre dans le module de la feuille :

Private Sub Worksheet_Change(ByVal Target As Range)

    If Target.Address(0, 0) = "A1" Or Target.Address(0, 0) = "A25" Then

        Application.EnableEvents = False
        Target.Value = ""

    End If

    Application.EnableEvents = True

End Sub
Rechercher des sujets similaires à "identification plages via inputbox"