Verouillage cellule sous condition avec macros

Bonjour,

Suite à de l'aide (précieuse) sur ce forum j'ai un fichier de ce type :

http://cjoint.com/?3Bum4dmRv0U

Si en plus de mon fichier je souhaite avoir une condition.
Du type : "si la case B23 est remplie alors rendre innaccessible la case B24", comment faire ??

Merci !!

13 réponses

  1. Bonjour,

    Cette condition concerne B23 ou toutes les lignes de la colonne B
    0
    1. Juste une case;
      Si la personne a rempli la case B23 alors il ne peut pas aussi remplir la B24.
      Sachant qu'il se trouve dans le cas où il a déjà choisi l'option A et que donc il n'a que les cellules de la colonne B accessibles.

      J'espère etre claire ?
      0
  2. Re,

    essaye comme cela, code à coller dans les propriétés de ta feuille, mais au départ les cellules doivent être déverrouillées et la feuille protégée

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, [B23]) Is Nothing Then
    ActiveSheet.Unprotect
    If Target <> "" Then Target.Offset(1, 0).Locked = True
    ActiveSheet.Protect
    End If
    End Sub
    0
    1. Merci Mike.
      J'ai essayé mais cela ne semble pas fonctionner.
      J'ai ajouté ce que tu m'as dis en fin de page. Je pense que j'oublie qqch mais je ne suis pas au top des macros !
      ca me donne ca :
      ----
      Sub OptionA()
      With ActiveSheet
      .Unprotect Password:="essaiFAA"
      .Cells.Locked = True
      .Range("B27:B53").Locked = False
      .Protect Password:="essaiFAA"
      End With
      End Sub

      Sub OptionB()
      With ActiveSheet
      .Unprotect Password:="essaiFAA"
      .Cells.Locked = True
      .Range("D27:D53").Locked = False
      .Protect Password:="essaiFAA"
      End With
      End Sub

      Sub OptionC()
      With ActiveSheet
      .Unprotect Password:="essaiFAA"
      .Cells.Locked = True
      .Range("F27:F53").Locked = False
      .Protect Password:="essaiFAA"
      End With
      End Sub

      Sub test()
      Nlig = Range("A" & Rows.Count).End(xlUp).Row - 3
      With ActiveSheet
      .Unprotect Password:="essaiFAA"
      .Cells.Locked = True
      .Range("B27:B" & Nlig).Locked = False
      .Protect Password:="essaiFAA"
      End With
      End Sub

      Private Sub Worksheet_Change(ByVal Target As Range)
      If Not Intersect(Target, [E52]) Is Nothing Then
      ActiveSheet.Unprotect
      If Target <> "" Then Target.Offset(1, 0).Locked = True
      ActiveSheet.Protect
      End If
      End Sub
      ---

      Mais je ne comprends pas bien ce que tu as programmé. En gros si l'utilisateur écrit en E52 il ne peut plus écrire en E53. et s'il écrit en E53 alors il ne peut pas écrire en E52.
      De meme pour C52 et C53 et pour G52 et G 53.
      0
      1. Re,

        normal, regarde ton code, la protection comme la déprotection est avec mot de passe

        Unprotect Password:="essaiFAA"

        mon code est sans
        ActiveSheet.Unprotect

        ensuite tes codes sont certainement dans un module alors que mon code doit se trouver dans les propriétés de ta feuille

        A+
        Mike-31

        Une période d'échec est un moment rêvé pour semer les graines du savoir.
        0
        1. Pour le mot de passe, j'aurais pu y penser ^^
          J'ai mis ton code dans la propriété de la feuille (enfin je crois..); mais cela ne semble pas fonctionner non plus.
          En fait j'ai l'impression que cela bloque la cellule D52 mais sans lien avec le fait que j'ai rempli ou non la 53.

          http://cjoint.com/?EBzlmXaqdQE : ca va peut-être t'aider...
          0
          1. Bon j'ai essayé de mettre des boutons à cocher pour contourner le problème mais je n'y arrive pas non plus :(
            0
        2. RE,

          encore normal, tu ne peux utiliser qu'une fois la syntaxe Worksheet_Change

          il faut donc empiler les actions sous la seule syntaxe Worksheet_Change

          explique exactement ce que tu veux faire, si D52 est renseignée on verrouille D53
          idem si tu renseignes F52 et F53

          as tu d'autres cellules concernées que D52, D53, F52 et F53
          0
          1. ça m'a l'air simple quand tu le dis mais je n'y arrive pas du tout.
            Ce que je veux :
            -si on choisi une motorisation 90 ch on ne peut pas en choisir une 110 ch (la question ne se pose qu'en Niveau 2 ou 3 car en 1). : pbmatique des cases D52 et D53 ou F52 et F53.
            - plus tard la question se posera pour par exemple (je dis n'importe quoi pour illustrer selon le fichier que je t transmis) : on ne peut avoir que soit la prise 12V soit le spot de lecture soit la tablette. Donc si on rempli qqch en 44, 45 ou 46 (B, D ou F selon le cas), alors les autres lignes sont verrouillées.
            0
        3. Re,

          Remplace tes codes par

          Private Sub Worksheet_Change(ByVal Target As Range)
          If Not Intersect(Target, Range("D52:F52")) Is Nothing Then
          ActiveSheet.Unprotect Password:="essaiFAA"
          If Target <> "" Then Target.Offset(1, 0).Locked = True
          ActiveSheet.Protect Password:="essaiFAA"
          End If
          If Not Intersect(Target, Range("D53:F53")) Is Nothing Then
          ActiveSheet.Unprotect Password:="essaiFAA"
          If Target <> "" Then Target.Offset(-1, 0).Locked = True
          ActiveSheet.Protect Password:="essaiFAA"
          End If
          End Sub
          0
          1. Ca marche merci !

            Par contre (oui je t'embete encore un peu!). Si on est en Niveau 3 et que l'on met 1 en F52. On fait entrée.
            Finalement on s'est trompé et on veut mettre 0 en F52 mais 1 en F53 alors là ca ne fonctionne pas.
            Il ne repart pas du début et reste sur le fait qu'on a bloqué.
            0
        4. Re,
          Je pense à une chose, si tu saisis une valeur en D52, D53 se verrouille mais pas D52, c'est ce que tu veux ou on verrouille les deux cellules.

          de plus ajoute au code que je t'ai donné une gestion d'erreur
          Private Sub Worksheet_Change(ByVal Target As Range)
          On Error Resume Next
          If Not Intersect(Target, Range("D52:F52")) Is Nothing Then
          ActiveSheet.Unprotect Password:="essaiFAA"
          If Target <> "" Then Target.Offset(1, 0).Locked = True
          ActiveSheet.Protect Password:="essaiFAA"
          End If
          If Not Intersect(Target, Range("D53:F53")) Is Nothing Then
          ActiveSheet.Unprotect Password:="essaiFAA"
          If Target <> "" Then Target.Offset(-1, 0).Locked = True
          ActiveSheet.Protect Password:="essaiFAA"
          End If
          End Sub

          pour accéder sur les cellules D52, D53, F52 ou F53 après qu'elles se soient verrouillées, tu peux ajouter un mot de passe sur ces cellules

          onglet Révision/module Modification/Permettre la modification des plages/Nouvelle/clic dans la zone Fait référence aux cellules, sélectionne les cellules D52:D53 et F52:F53
          saisir le mot de passe qui permettra la modification et OK

          ce qui te permettra de revenir sur ces cellules qui viennent de se verrouiller
          0
          1. Pour ta première question oui c'est bien ce que je veux.

            je ne evux pas y accéder après qu'elles soient verrouillées. Je veux que si quelqu'un change d'avis il puisse effacer son choix en D52 et que l'on soit à nouveau dns la situation initiale où il peut écrire en D53 OU D52.
            Là quand je mets ton code, ca fonctionne parfaitement sauf dans le cas où il a saisi qqch en D52 par ex, puis l'efface et veut écrire en D53 finalement.
            Car une fois D52 rempli, cela bloque D53. Et meme s'il efface D52 après, D53 reste verrouillée!
            0
        5. Re,

          justement, si tu t'ai trompé entre D52 et D53, il est évident que suivant la cellule renseignée, l'autre s'est verrouillée. Le plus simple est de faire ce que je t'ai dit

          onglet Révision/module Modification/Permettre la modification des plages/Nouvelle/clic dans la zone Fait référence aux cellules, sélectionne les cellules D52:D53 et F52:F53
          saisir le mot de passe qui permettra la modification et OK

          Plus compliqué mais il y aura de toute façon un mot de passe pour déverrouiller ces cellules, sinon a quoi servirait le code précédent
          0
          1. ouio mais je ne veux pas que les utilisateurs puissent deverrouiller quoi que ce soit.
            0
        6. Bonjour
          tu peux faire ce que tu veux mais les macro dans ton module reactive la colonne
          et la je ne voie pas
          A+
          Maurice
          0
          1. Re,

            mais il n'est pas question de déprotéger ton fichier ni de donner le mot de passe de protection de ta feuille "essaiFAA"

            tu donnes uniquement la possibilité d'intervenir sur ces 4 cellules avec un mot de passe différent de celui de la protection feuille, Excel ne peut pas deviner que tu t'es trompé
            0
            1. Ok.
              Merci je vais voir ca plus en détail alors !

              Merci beaucoup pour ton aide Mike !
              0
          2. Re,

            Oui teste avec un mot basique
            et tiens moi au courant
            0
          3. Re,

            Pas mal comme procédé, mais avec ce procédé tes cellules ne sont pas inaccessibles, il suffit de cocher une case d'option pour intervenir dans tes cellules autant de fois que tu le souhaites et n'importe qui peut intervenir
            0
            1. Re !

              Je ne savais pas qu'avec cette technique n'importe qui pouvait y accéder. Mais bon il faut quand même chercher pour contourner non ?
              Je n'arrive pas à faire ce que je souhaite comme document, ça m'agace :(
              0