Verouiller une Cellule Par un Mot de Passe [Résolu]

- 22 nov. 2012 à 12:21 - Dernière réponse :  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
Afficher la suite 

Votre réponse

13 réponses

Meilleure réponse
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
23 nov. 2012 à 10:10
3
Merci
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

Merci ucfoutu 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de ucfoutu
Meilleure réponse
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
23 nov. 2012 à 10:20
3
Merci
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

Merci ucfoutu 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de ucfoutu
Messages postés
14303
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
21 novembre 2018
22 nov. 2012 à 13:53
0
Merci
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
Commenter la réponse de NHenry
Messages postés
5541
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
22 novembre 2018
22 nov. 2012 à 14:15
0
Merci
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
Commenter la réponse de cs_Le Pivert
Messages postés
3181
Date d'inscription
dimanche 15 février 2004
Dernière intervention
9 avril 2017
22 nov. 2012 à 17:38
0
Merci
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
Commenter la réponse de Charles Racaud
0
Merci
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
Commenter la réponse de macmanan
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
23 nov. 2012 à 07:48
0
Merci
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
Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
23 nov. 2012 à 08:21
0
Merci
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
Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
23 nov. 2012 à 08:26
0
Merci
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
Commenter la réponse de ucfoutu
0
Merci
j'ai essayé toutes les combinaisons proposées, mais ce ne marche pas je ne sais pas ou je bloque exactement.
Commenter la réponse de macmanan
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
23 nov. 2012 à 09:32
0
Merci
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
Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
23 nov. 2012 à 09:35
0
Merci
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
Commenter la réponse de ucfoutu
0
Merci
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.
Commenter la réponse de macmanan

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.