Verouiller une Cellule Par un Mot de Passe

Résolu
macmanan - 22 nov. 2012 à 12:21
 macmanan - 24 nov. 2012 à 07:57
Bonjour,

Comment vérouiller cette cellule "A1" par mot de passe. pour que seul les administrateur puisse changer la Valeur .
voila ce que j'ai fait jusqu'à présent.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Range("A1"), Target) Is Nothing Then
Target.Offset(0, 1).Select
End If
End Sub mais cela empêche d'ecrire complètement sur la cellule.

Je voudrais qu'il demande mot de passe puis en introduisant le bon mot de passe on accède a la cellule "A1"

Merci

13 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
23 nov. 2012 à 10:10
C'est quand même simplissime à comprendre, mais je vais te donner un autre exemple :
Un projet tout neuf ===>> deux boutons de commande (activex) sur feuil1
Ce code :
Private Sub CommandButton1_Click()
  'dans cet exemple, l'utilisateur va vérrouiller la cellule A1 puis protéger la feuille, en choisissant sont mot de passe
   Dim mptdepasse As String
   motdepasse = InputBox("entrer votre mot de passe")
   With ActiveSheet
      With .Cells
        .Locked = False
        .FormulaHidden = False
      End With
      With .Range("A1")
        .Locked = True
        .FormulaHidden = False
      End With
      .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:=motdepasse
    End With
End Sub
Private Sub CommandButton2_Click()
  'dans cet exemple, l'utilisateur va déprotéger la feuille, en choisissant sont mot de passe
  'puis déverrouiller la cellule A1
   Dim mptdepasse As String
   motdepasse = InputBox("entrer votre mot de passe")
   With ActiveSheet
     .Unprotect Password:=motdepasse
      With .Range("A1")
        .Locked = False
        .FormulaHidden = False
      End With
      ' et si tu veux reprotéger la feuille (si par exemple d'autres cellules que A1 doivent rester verrouillées
      With .Cells
        .Locked = False
        .FormulaHidden = False
      End With
    End With
End Sub

Clique sur Commandbutton1 ===>> tu ne pourras plus modifier la cellule A1
Clique ensuite sur commandbutton2 ===>> elle est maintenant déverrouillée

Cela me parait suffisamment démontré.
Toi, pour ton appli : === >> tu ne vas tout de même pas la démarrer non protégée, hein ...
En lieu de place des instructions de commandbutton1, tu vas tout simplement verrouiller manuellement A1 (voir gestes plus haut) puis protéger avec mot de passe, à communiquer à l'utilisateur.
Celui-ci sera en mesure de déverrouiller (en donnant le mot de passe) par le code de commandbutton1, puis de reverrouiller au besoin (par le code de commandbutton2). Il sera de surcroît à cette occasion en mesure de donner son propre mot de passe , qui sera dorénavant seul valable.
Si tu ne comprends pas ce mécanisme, j'abandonne.
Si tu le comprends, il t'appartient d'insérer ces deux codes là où tu le juge opportun dans ton appli, en lieu et place des commandbuttons !

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
23 nov. 2012 à 10:20
Après, les stratégies possibles sont nombreuses et ne dépendent que de toi.
Exemple (parmi des dizaines d'autres, selon ta seule volonté ) : tu peux déclarer une variable login et une motdepasse en public et lancer des inputbox au workbook_open puis décider ou non de déverrouiller. Ne pas oublier de reverrouiller avant la sauvegarde, en utilisant le même mot de passe, hein ...
Voilà ... Tu peux également utiliser Environ("UserName") et éviter l'identification, pour ne demander que le mot de passe.
etc... etc..., mais on sort là du domaine du développement pour priviligier celui de la conception, donc de la stratégie !


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
3
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
22 nov. 2012 à 13:53
Bonjour,

C'est du VBA, donc je déplace du bar vers le forum adapté.

Tu peux verrouiller des plages de cellules, si mes souvenirs sont bons.
Mais ce n'est qu'un mdp par feuille/classeur protégé.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
22 nov. 2012 à 14:15
Bonjour,
Essaie ceci:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Immuable As Variant
 Dim Rep
Dim PasTouche As Range
 If Target.Address = "$A$1" Then
      Rep = InputBox("Entrez le mot de passe", "Mot de passe", "monmotdepasse")
 If Rep = "zaza" Then
 'c'est bon
 Else
Set PasTouche = Cells(1, 1)
Immuable = PasTouche.Value
If Not Application.Intersect(Target, PasTouche) Is Nothing Then: PasTouche.Value = Immuable: Cells(1, 2).Select
Set PasTouche = Nothing
End If
End If
End Sub



@+Le Pivert
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
22 nov. 2012 à 17:38
Bonjour,

Il est possible de protéger toute la feuille mais de laisser certaines cellules éditables.
Cela s'édite dans le format des cellules.

Ici, il suffit de mettre toute les cellules en mode "éditable" sauf celles de ton choix.


_____________
Kenji
0
le Code ne marche pas,
j'arrive pour le moment juste à empĉher de changer la valeur, mais j'arrive pas a integrer un mot de passe.

Je continue à chercher.

je sais que pour une feuille qui n'a pas déjà de vérouillage prévu on peux passer par :
- Sélectionner toute la feuille ----Format cellule-----Protection décocher la case déverouiller.

-Sélectionner la cellule à verrouiller, verrouiller par le même chemin.

Ensuite Outils, Protection, Feuille.
et on met un mot de passe et on confirmes.

Au plaisir
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
23 nov. 2012 à 07:48
Bonjour,
Charles Racaud (que je salue) t'a donné la réponse.
L'enregistreur de macro (en accomplissant les gestes qu'il t'a indiqués) t'en donne le code à utiliser (je viens de le vérifier et le constater).
Rappel (qui a tout à voir avec la connaissance de Excel et non de VBA) :
La protection de la feuille est le dernier geste, après avoir (dans le menu Format des cellules, défini les autorisations ou interdictions).

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
23 nov. 2012 à 08:21
Enfin quoi :
Voilà ce que donne l'enregistreur de macro (exemple pour ne bloquer que la cellule C9) :
    Cells.Select
    Selection.Locked = False
    Selection.FormulaHidden = False
    Range("C9").Select
    Selection.Locked = True
    Selection.FormulaHidden = False
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:="toto"

et voilà comment on le modifie pour être plus propre (éviter les vilains select ===>> selection au profit d'un pointage direct sur les objets de Excel) :
With ActiveSheet
      With .Cells
        .Locked = False
        .FormulaHidden = False
      End With
      With .Range("C9")
        .Locked = True
        .FormulaHidden = False
      End With
      .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:="toto"
End With


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
23 nov. 2012 à 08:26
Pardon : c'est moi qui ai ajouté l'argument password à ce qu'avait écrit l'enregistreur de macro.
Tu aurais trouvé seul comment utiliser cet argument en ouvrant ton aide VBA sur le mot Protect. Il s'ajoute selon une syntaxe qui est la même pour tous les argument ===>>=:argument = ...
L'argument PassWord a par ailleurs un nom plus qu'évocateur et vient instinctivement à l'esprit.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
j'ai essayé toutes les combinaisons proposées, mais ce ne marche pas je ne sais pas ou je bloque exactement.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
23 nov. 2012 à 09:32
mais ce ne marche pas

ne veut pas dire grand-chose !
Veux-tu montrer le code que tu as écrit sur la base de celui que je t'ai montré à 8h21 ??
Montre-le donc (depuis sub jusqu'à end sub inclus).


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
23 nov. 2012 à 09:35
J'espère que tu ne t'es pas amusé à lancer ce code alors que la feuille était encore verrouillée, hein ... (cela va tellement de soi) !


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
Merci ca marche sur une même feuille, c'est moi qui oublié de mentionner que la cellule a vérouiller est sur l'autre feuille du classeur a ouvrir.

mais en faisant une combinaison de renvoi avec ce Code ca marche nickel.

Merci UCFOUTU.
0
Rejoignez-nous