Syntaxe débloquer cellule

Résolu
Bonjour,

J'aimerais connaître la syntaxe la plus efficace pour déverrouiller des cellules.
Je m'explique :
J'ai un formulaire qui une fois Valider se verrouille entièrement, seulement dans certains cas les utilisateurs peuvent être amené à modifier ce formulaire. J'ai donc créé une macro qui permet de savoir par qui et quand le formulaire à été modifier (J'ai d'ailleurs créé un autre sujet afin d'essayer de savoir qu'est-ce qui a été modifier : https://forums.commentcamarche.net/forum/affich-28916218-question-vba-modification-fichier#p28935236 pour le moment sans succès)

Cependant j'ai un soucis, je ne trouve pas la syntaxe exacte afin de ne déverrouiller que certaines cellules de mon formulaire (les cellules de champs) j'ai essayé un petit quelque chose mais rien de bien concluant voici mon horreur :
Worksheets(1).Unprotect Password:="123test"
Range("C9,C11,C13,C15,C17,C19,F9,F11,F13,F15,F17,F19,C23,C25,C27,C29,C31,F23,F25,F27,F29,F31").Locked = False
Range("B35,B39,B43,D45,D47,B53,D55,F57,F59,B63,F65,F67,B71,F73,F75,B77,C83,F83").Locked = False
Worksheets(1).Protect Password:="123test", DrawingObjects:=True, Contents:=True, Scenarios:=True

Si quelqu'un pouvait m'aider... merci d'avance.

PS : Si quelqu'un a besoin de la macro entière pour m'aider, ou pour un usage personnel n'hésitez pas à le demander.

5 réponses

  1. Bonjour,

    Il faut proteger la feuille avec mot de passe et decocher la case selectionner les cellules verrouillees. Au niveau du code VBA, "jouer" sur le verrouillage/deverouillage des cellules avec unprotect avant pour dev ou ver et protect apres. Pour "faciliter", definissez un nom par plage de cellules a modifier ex:liste1 et liste2

    exemple de code:

    Sub Dev_Ver_liste()
    'deverouillage des cellules plages
    With Worksheets("feuil1")
    .Unprotect Password:="123test"
    .Range("liste1").Locked = False
    .Range("liste2").Locked = False
    .Protect Password:="123test", DrawingObjects:=True, Contents:=True, Scenarios:=True
    End With

    'code pour ce que vous avez a faire
    '
    '
    '

    ' et verrouillage des cellules plages
    With Worksheets("feuil1")
    .Unprotect Password:="123test"
    .Range("liste1").Locked = True
    .Range("liste2").Locked = True
    .Protect Password:="123test", DrawingObjects:=True, Contents:=True, Scenarios:=True
    End With
    End Sub

    A+
    0
    1. Bonjour F894009,

      Merci pour ta réponse mais...

      J'ai 2 soucis par rapport à ta proposition:

      Le premier est que je ne peux pas nommé de plage puisqu'il s'agit d'un formulaire, avec la mise en page j'ai donc une cellule par-ci, et une cellule par-là à débloquer ce qui explique cette liste interminable de cellule sans rapport entre elle.

      Le second est que aucun événement ne vient signaler que l'édition du formulaire est terminé (c'est l'utilisateur qui saisie ce qu'il veut à la vitesse qu'il veut) Il n'y a pas de bouton "Modification Terminé" ou autre car je sais qu'il ne penserai pas à l'utiliser. Je voulais donc re-verrouiller ces cellules via un BeforeClose.

      Mon soucis actuel est que lors de l'exécution de mon code j'ai une "error 1004 : Unable to set the locked property of the range class"

      Est-ce du au fait que j'utilise une fonction "Range" alors que je ne cible de certaines cellules ?
      0
      1. Re,

        Je me suis fais avoir avec le mot formulaire, pour beaucoup de personne c'est un userform. Je vais faire un exemple avec un formulaire excel.

        A+
        0
        1. Re,

          puisqu'il s'agit d'un formulaire formulaire excel ou userform ????
          0
          1. Formulaire Excel... Tous ce qu'il y'a de plus simple.
            Ex : En A1 "NOM" en B1 un champ vide pour que les gens saisissent leur nom.
            0
          2. Re,

            Formulaire Excel... Tous ce qu'il y'a de plus simple. Cela ne serait pas plutot une feuille de calcul (ou onglet)

            Vous pouvez faire une recopie d'ecran et la mettre a dispo ???
            0
          3. Ok je m'exprime comme un manche, tu as raison c'est un onglet.
            Je te met une version sans les infos confidentielles pour te donner une idée
            https://www.cjoint.com/?3Jyoqrq76i1
            0
          4. Re,

            Pas grave, nous allons y arriver. Je recupere le fichier.
            0
          5. Re,

            Juste une question, je suppose que vous envoyez un exemplaire de la declaration quelque part en format excel, si cela est vrai pourquoi pas l'envoyer en format pdf. De cette facon il n'y qu'a proteger les cellules non saisie en les verrouillants et deverrouiller les autres, plus mot de passe de protection pour eviter les doigts baladeurs.

            Ceci dit, appliquer le code que je vous ai donne a votre fichier est faisable sans probleme.
            0
        2. Re,

          fichier modifie, mais il me manque une info pour le protection complete. Il faudra le faire car je n'ai pas pige votre affaire d'envoi (vous envoyez ce fichier quelque part je suppose, donc le pdf c'etait pour cela, les destinataires auraient un pdf au lieu d'un xls). Mais c'est vous qui voyez.

          https://www.cjoint.com/?CJyqcf4tTgw

          A tester

          A+
          0
          1. Huuum.

            Merci pour votre aide, je regarde à ça demain et je vous tiendrais au courant.

            Bonne fin de journée
            0
          2. Bonjour,

            La syntaxe fonctionne parfaitement, j'ai pu faire exactement ce que je voulais.

            Merci, bon week-end !
            0