Verrouiller une cellule excel

Résolu
Bonjour à tous,

Comment puis je interdire l’accès à une cellule excel, en fonction d'une donnée d'une autre cellule.

Explication

Je souhaiterais interdire l’écriture dans la cellule A1, si ma cellule A2 = NON

et permettre l’écriture dans ma cellule A1, si A2=OUI.

En même temps, je souhaiterais griser ma cellule A1 quand elle est bloquée.

je pensais à du VBA, mais je suis un peu limité.

Merci à tous

24 réponses

Résumé de la discussion

Le point central dans Excel est d'interdire l'écriture dans la cellule A1 lorsque A2 vaut NON et de la permettre lorsque A2 vaut OUI, avec A1 visuellement bloquée. Des solutions basées sur VBA dans Excel ont été proposées, notamment un état actif selon A2, avec déprotection/protection de la feuille et verrouillage/déverrouillage de A1. Une version Worksheet_Change a été proposée, s'appuyant sur A2, avec un mot de passe constant et des options pour basculer A1 entre verrouillé et déverrouillé selon OUI ou NON. En pratique, il faut aussi déverrouiller les cellules concernées et coordonner le mot de passe, ce qui peut s'étendre à d'autres plages comme G7:G47 ou AC7:AE46.

Bobot (l’IA à votre service)
  1. Re,
    ok je serais curieux de savoir quel est le problème qui bloque le code qui pourrait se simplifier à
    Const Mot_pas As Variant = "pwd"

    Sub test()
    On Error Resume Next
    If Range("A2") = "OUI" Then
    ActiveSheet.Unprotect Password:=Mot_pas
    Range("A1").Locked = False
    ActiveSheet.Protect Password:=Mot_pas, DrawingObjects:=True, Contents:=True, Scenarios:=True
    ActiveSheet.EnableSelection = xlUnlockedCells
    Else
    ActiveSheet.Unprotect Password:=Mot_pas
    Range("A1").Locked = True
    ActiveSheet.Protect Password:=Mot_pas, DrawingObjects:=True, Contents:=True, Scenarios:=True
    ActiveSheet.EnableSelection = xlUnlockedCells
    End If
    End Sub

    0
    1. Re,

      il faut impérativement déverrouiller la cellule A2 et c'est ce que je t'avais écrit sur le post 9
      alors avant d'utiliser le code déprotège la feuille, puis clic droit sur A2/Format de cellule/onglet Protection/décoche Verrouillée
      enregistrer
      teste A2 avec OUI et NON
      0
      1. Re
        pour ma part je viens de recréer un fichier, j'ai simplement déverrouillé la cellule A2 placé les codes comme expliqué plus haut et le fichier fonctionne à 100 pour 100, aucun problème
        0
        1. Re,

          Alors pour ma part je ne comprends pas ce qui se passe sur ton PC, le code changement de couleur fonctionne normalement puis le code pour verrouiller une cellule non alors que le code est correctement écrit et fonctionne parfaitement pour l'avoir testé sur deux ordis et deux Excel différents
          en désespoir de cause teste ce code sur mon dernier fichier ou j'ai scindé chaque conditionnelle
          Const Mot_pas As Variant = "pwd"

          Sub test()
          On Error Resume Next
          If Range("A2") = "OUI" Then
          ActiveSheet.Unprotect Password:=Mot_pas
          Range("A1").Locked = False
          ActiveSheet.Protect Password:=Mot_pas, DrawingObjects:=True, Contents:=True, Scenarios:=True
          ActiveSheet.EnableSelection = xlUnlockedCells
          End If
          If Range("A2") = "NON" Then
          ActiveSheet.Unprotect Password:=Mot_pas
          Range("A1").Locked = True
          ActiveSheet.Protect Password:=Mot_pas, DrawingObjects:=True, Contents:=True, Scenarios:=True
          ActiveSheet.EnableSelection = xlUnlockedCells
          End If
          End Sub
          0
          1. Re,

            je n'y comprends plus rien, je teste également mon code dans tous les sens et aucun problème si OUI en A2 la cellule A1 est accessible et si NON en A2 la cellule A1 est verrouillée

            télécharge mon fichier et sans rien changer teste la cellule A2
            https://www.cjoint.com/c/FAdj5WeAzAj
            0
            1. Fichier téléchargé

              Sans rien toucher, je teste la cellule A2 avec OUI ou NON

              meme resultat, la cellule A1 reste verrouillée
              0
            2. non même résultat

              j'ai même essayé avec excel 2007, et j’obtiens aussi le même résultat qu'avec 2013
              0
            3. mais, moi la cellule A2, était toujours deverrouillée, sinon, quand la feuille est en mode protection, je ne pourrais pas y avoir accès
              0
            4. oui c'est ce que j'avais depuis le début, cellule A2 avec la case vérrouillée, décochée.

              sinon, je n'aurais pas pu changer le OUI ou le NON
              0
            5. Alors je sais plus quel conseil te donner
              0
          2. Re,

            je comprends de moins en moins ton problème

            dans les propriétés de ta feuille (clic droit sur l'onglet/visualiser le code) supprime tous les codes et colle celui ci
            Private Sub Worksheet_Change(ByVal Target As Range)
            If Not Intersect(Target, [A2]) Is Nothing Then
            Call test
            End If
            End Sub

            crée un module (dans le visual basic clic sur Insertion/Module)
            dans le module colle ce code
            Const Mot_pas As Variant = "pwd"

            Sub test()
            On Error Resume Next
            If Range("A2") = "OUI" Then
            ActiveSheet.Unprotect Password:=Mot_pas
            Range("A1").Locked = False
            ActiveSheet.Protect Password:=Mot_pas, DrawingObjects:=True, Contents:=True, Scenarios:=True
            ActiveSheet.EnableSelection = xlUnlockedCells
            ElseIf Range("A2") = "NON" Then
            ActiveSheet.Unprotect Password:=Mot_pas
            Range("A1").Locked = True
            ActiveSheet.Protect Password:=Mot_pas, DrawingObjects:=True, Contents:=True, Scenarios:=True
            ActiveSheet.EnableSelection = xlUnlockedCells
            End If
            End Sub


            teste ta cellule si en A2 tu as OUI A1 est accessible, si tu saisis NON A1 doit être verrouillée
            0
            1. je suis désolé, mais on a le même résultat.

              cellule A1 non accessible avec cellule A2 sur OUI ou sur NON

              je teste plein de possibilité, mais a chaque fois meme resultat
              0
          3. Re,
            Bizarre,
            sur une feuille crée un bouton activex (onglet Développeur/module Contrôles/Insérer/crée un bouton activex
            et colle ce code à
            Private Sub CommandButton1_Click()
            If [B5].Interior.ColorIndex = xlNone Then
            [B5].Interior.ColorIndex = 3
            ElseIf [B5].Interior.ColorIndex = 3 Then
            [B5].Interior.ColorIndex = 4
            ElseIf [B5].Interior.ColorIndex = 4 Then
            [B5].Interior.ColorIndex = 3
            End If
            End Sub

            clic plusieurs fois sur le bouton et dis mois ce qui se passe à chaque clic
            0
            1. ok bouton réalisé

              à chaque clic, la cellule B5, passe de vert à rouge
              0
          4. Re,

            alors ouvre mon dernier fichier, ensuite clic sur l'onglet développeur, puis module Code puis sur sécurité des macros coche la dernière proposition Activer toutes les macros (non recommandé .......
            enregistrer, ferme le fichier et ouvre le à nouveau et accepte les macros, teste le fichier et reviens rendre compte

            pour la sécurité des macros je t'expliquerai plus tard pour relever la sécurité
            A+
            Mike-31

            Une période d'échec est un moment rêvé pour semer les graines du savoir.
            0
            1. J'avais déjà activé toutes les macros
              j'avais meme approuvé l’accès au modèle VBA

              mais toujours le meme résultat
              0
          5. Re,

            alors le problème est ailleurs quelle version Excel As tu !

            si tu as Excel 2007 ou supérieur et as tu l'onglet Développeur dans le Ruban Excel, il est juste après l'onglet Révision Affichage !

            A+
            Mike-31

            Une période d'échec est un moment rêvé pour semer les graines du savoir.
            0
            1. salut Mike

              je suis sur excel 2013, et oui j'ai l’onglet DEVELOPPEUR
              0
          6. Re,

            il fallait le dire tout de suite, tu dois certainement utiliser Mozilla firefox comme navigateur, mais cela n'est pas un problème
            télécharge ce fichier enregistré dans un format 2003, on verra plus tard le format
            https://www.cjoint.com/c/FAcucvo73hj

            teste le et reviens rendre compte
            0
            1. meme probleme

              la feuille est vérouillée par le mot de passe du code,
              mais que je tape OUI ou NON dans A2, la cellule A1 reste inaccessible
              0
          7. Re,

            dans un premier temps teste mon dernier fichier que je t'ai posté post 21 sans rien changer
            https://www.cjoint.com/c/FAcosGPHX1j
            et dit moi si c'est pareil
            A+
            Mike-31

            Une période d'échec est un moment rêvé pour semer les graines du savoir.
            0
            1. pour le moment, quand je telecharge ton ficher, à l'ouverture, j'ai une suite ascii, mais pas de feuille excel
              0
          8. Re,

            Que se passe t il, à quel niveau ça ne marche pas
            0
            1. J'ai essayé plusieurs méthodes, mais sans changer le code que tu m'as donné.

              J'ai mis un mot de passe différent pour protéger la feuille que celui enregistré dans le code.

              la cellule A1 une fois sur deux, reste active, malgré le OUI dans A2

              J'ai mis le même mot de passe pour protéger la feuille, que celui inscrit dans le code,

              la cellule A1 une fois sur deux reste active malgré le OUI dans A2, quelque fois, elle reste verrouillée, que ce soit OUI ou NON

              J'utilise excel 2013

              titi32600
              0
          9. Re,

            a part la mise en forme conditionnelle que tu n'avais pas mis en place, le fichier fonctionne bien
            https://www.cjoint.com/c/FAcosGPHX1j
            0
            1. re

              ici j'ai des probleme pour le faire fonctionner correctement

              je vais chercher le pourquoi du comment

              en attendant, merci encore de tes conseils

              titi32600
              0
          10. Re,

            alors regarde comme cela
            Const Mot_pas As Variant = "pwd"

            Private Sub Worksheet_Change(ByVal Target As Range)
            On Error Resume Next
            If Range("A2") = "OUI" Then
            ActiveSheet.Unprotect Password:=Mot_pas
            Range("A1").Locked = False
            ActiveSheet.Protect Password:=Mot_pas, DrawingObjects:=True, Contents:=True, Scenarios:=True
            ActiveSheet.EnableSelection = xlUnlockedCells
            ElseIf Range("A2") = "NON" Then
            ActiveSheet.Unprotect Password:=Mot_pas
            Range("A1").Locked = True
            ActiveSheet.Protect Password:=Mot_pas, DrawingObjects:=True, Contents:=True, Scenarios:=True
            ActiveSheet.EnableSelection = xlUnlockedCells
            End If
            End Sub
            0
            1. non je suis desolé, mais avec moi, ca ne marche pas.

              comment puisje t'envoyer mon exemple de feuille excel
              0
          11. Re,

            si tu saisis OUI en A2 la cellule en A1 est bien verrouillée

            si tu ressaisis Non la cellule A1 est accessible, c'est ce que j'avais compris maintenant que veux tu faire, une fois que tu saisis OUI en A2 tu veux verrouiller A1 et A2 !
            0
            1. suis ok avec toi,

              en saisissant OUI en A2, la cellule A1 est verrouillée

              en saisissant NON en A2, la cellule A1 est déverrouillée,

              mais si je ressaisis OUI en A2, la cellule A1, une fois sur deux reste déverrouillée
              0
          12. Re,

            remplace le code dans le Visual par celui ci
            Const Mot_pas As Variant = "pwd"

            Private Sub Worksheet_Change(ByVal Target As Range)
            On Error Resume Next
            If Range("A2") = "OUI" Then
            ActiveSheet.Unprotect Password:=Mot_pas
            Range("A1").Locked = False
            ActiveSheet.Protect Password:=Mot_pas, DrawingObjects:=True, Contents:=True, Scenarios:=True
            ActiveSheet.EnableSelection = xlUnlockedCells
            Else
            Range("A1").Locked = True
            ActiveSheet.Protect Password:=Mot_pas, DrawingObjects:=True, Contents:=True, Scenarios:=True
            ActiveSheet.EnableSelection = xlUnlockedCells
            End If
            End Sub

            j'ai ajouté en début de code cette ligne
            Const Mot_pas As Variant = "pwd" comme cela tu n'auras qu'a changer le mot de passe uniquement dans cette ligne et le code s'adaptera.
            Attention, si tu changes le mot de passe, la première fois il faudra soit reprotéger ta feuille manuellement avec le nouveau mot de passe ou au moins la déprotéger feuille avant d'intervenir sur la cellule A2, ensuite le cycle reprendra
            0
            1. merci encore mike

              cela fonctionne, mais une fois sur deux, quand je tape OUI, je reverrouille ma cellule

              A1, et ensuite si j'inscris NON, dans la cellule A2, j'ai toujours la possibilité d'agir sur A1
              0
          13. re

            je reviens vers toi, pour avoir une petite modif

            toute ma feuille est protégée par un mot de passe en ce moment c'est "pwd"

            quand je tape dans A2 "OUI", toute ma feuille se déverrouille.

            je souhaiterais, que seule la cellule A2 soit accessibles, mais que le reste de ma feuille reste verrouillées.

            et que si j'inscris dans A1, "NON", la cellule A2 se verrouille à nouveau

            titi32600
            0
            1. Re,

              alors je passe le statut de la discussion en résolu
              0
              1. Re,

                alors déverrouille au moins la cellule A2, protège ta feuille avec le mot de passe, puis clic droit sur l'onglet de ta feuille/Visualiser le code
                et colle ce code dans la grande partie vide du Visual Basic

                Private Sub Worksheet_Change(ByVal Target As Range)
                On Error Resume Next
                If Range("A2") = "OUI" Then
                ActiveSheet.Unprotect Password:="pwd"
                Range("A1").Locked = False
                Else
                Range("A1").Locked = True
                ActiveSheet.Protect Password:="pwd"
                ActiveSheet.Protect Password:="pwd", DrawingObjects:=True, Contents:=True, Scenarios:=True
                ActiveSheet.EnableSelection = xlUnlockedCells
                End If
                End Sub

                0
                1. Re

                  Merci Mike

                  ça fonctionne très bien
                  0
              • 1
              • 2