Verrouillage cellule après saisi VBA

Fermé
Padaoine59 Messages postés 6 Date d'inscription jeudi 25 mars 2021 Statut Membre Dernière intervention 10 avril 2021 - 10 avril 2021 à 10:26
eriiic Messages postés 24601 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 25 novembre 2024 - 11 avril 2021 à 12:37
Bonjour,
mon tableau me permet de remlir un formulaire "sheet formulaire" en cliquant sur "enregistrer dossier" il me copie l'ensemble de mes données saisi dans 2 autres feuille.......
Bref , je souhaiterai que dans la sheet "dossier" je puisse saisir des info dans les cellules R2:X2 mais une fois les infos saisi les cellule se verrouille comme le restant du tableau pour eviter de venir modifier des infos saisis a l'avenir. Je pourrais le faire qu'en venant deverrouiller volontairement la feuille.
J'ai rajouté cette commande:

Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Unprotect "Julien67*"
Target.Locked = True
ActiveSheet.Protect "Julien67*"
End Sub


Mais lorsque je lance ma macro "enregistrement formulaire", j'ai une erreur qui apparait et je ne trouve pas à quoi elle est due.

J'ai poser le fichier sur weetransfert fichier se trouve ici:
https://wetransfer.com/downloads/a4eb7fc6afdd1fc17d8f5f8ec02932c020210410082629/c13d13

Merci d'avance pour votre retour

Configuration: Windows / Chrome 89.0.4389.114

3 réponses

Utilisateur anonyme
10 avril 2021 à 11:59
Bonjour,

Le problème vient justement de la Sub Worksheet_Change(ByVal Target As Range) :
au lancement de l'enregistrement, la protection des feuilles est bien enlevée mais en parallèle dès qu'il y a un changement dans le classeur la protection est remise à la fin du _Change.

A priori, il suffit de laisser la macro d'enregistrement gérer les protections en entrée (ôter) puis en sortie (remettre) comme déjà fait pour que ça fonctionne.

Il faut donc supprimer Sub Worksheet_Change(ByVal Target As Range) et la remplacer par une procédure qui s'assure que les protections sont bien mises à l'ouverture du classeur par exemple.
0
PS : je me rends compte que ma réponse précédente ne correspond pas à tous les besoins !
Pour pouvoir saisir dans la plage voulue sans tout chambouler, il faut écrire la sub ainsi
Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Target, Range("R2:X2")) Is Nothing Then 'On teste si on est bien dans la plage "R2:X2"
    ActiveSheet.Unprotect "Julien67*"
    Target.Locked = False
    ActiveSheet.Protect "Julien67*"
  End If
End Sub
0
eriiic Messages postés 24601 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 25 novembre 2024 7 243
11 avril 2021 à 12:37
Bonjour à tous,

insère cette ligne dans "enregistrement formulaire" :
    Rows("2:2").Select
Application.EnableEvents = False
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove

remet à True en fin de macro
eric

0