Autoriser VBA à écrire dans une cellule verrouillée (et qui doit le rester)

Bonjour,

J'ai un code qui écrit dans une cellule un Nom (chaîne de caractères) obtenu par une InputBox.

Tout se passe bien tant que les cellules ne sont pas verrouillées (Ce qui valide le code de base). Mais ces cellules doivent être verrouillées pour empêcher l'utilisateur d'intervenir dans ces cellules (avant et après et si possible pendant l’exécution du code). Mais dès que je verrouille ces cellules, mon code VBA produit un message d’erreur. Car il semble que VBA ne puisse pas écrire dans une cellule verrouillée. Pour contourner cette difficulté j'ai encadré mon code par une instruction censée déverrouiller la (ou les) cellules à écrire, et une instruction pour la (les) reverrouiller après. Voici à quoi ça ressemble, (dans le Module1) :

'A - Déverrouille la feuille (qui protégée par un mot de passe, avec toutes les cellules verrouillées) avec l'instruction suivante :
Sheets("Nom_Feuil").Unprotect , Password:="mon_mot_de_passe"
B - Mon code :
1 - Demande Nom, par une InputBox
2 - Place ce Nom dans la variable NOM
3 - Calcule la position de la cellule à renseigner
4 - Ecrit dans la cellule (calculée en 3) le contenu de la variable NOM (demandé en 1)
C - Reverrouille la feuille avec :
Sheets("Nom_Feuil").Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:="mon_mot_de_passe"

MAIS CA NE MARCHE PAS !

J'ai systématiquement un arrêt et le débogueur me place en jaune sur la première instruction pour déverrouiller, avec le message suivant :

image

Question :

Quelqu'un peu-il m'aider à corriger cela ? Et plus globalement comment autoriser VBA à écrire dans une cellule verrouillée, et qui doit le rester vu depuis l'utilisateur ?

Merci d'avance pour vos lumières

Cordialement.

Bonjour

Tu devrais joindre ton fichier.

Bye !

Bonjour Catroun, gmb,

Essaie de suppimer la virgule après "unprotect".

Sheets("Nom_Feuil").Unprotect   Password:="mon_mot_de_passe"

Cordialement

Bonjour, Merci et Bonne soirée

J'ai trouvé cette solution qui marche parfaitement. En gras les instructions que je recherchais, (ce qui clos cette discussion) :

Sub AjouterUnIntervenant()

Application.ScreenUpdating = False

'0-Variables
Dim LP As Worksheet 'Liste des Participants
Dim NOM As String 'Nom du nouvel intervenant
Dim PRENOM As String 'Prénom du nouvel intervenant
Dim PNL As String 'Premier Nom de la Liste
Dim DNL As String 'Dernier Nom de la Liste
Dim PPL As String 'Premier Prénom de la Liste
Dim DPL As String 'Dernier Prénom de la Liste
Dim NIE As Integer 'Nombre d'Intervenants Enregistrés
Dim NLD As Integer 'Nombre de Lignes Disponibles

'1-Désactive la protection de la Liste des Participants
Set LP = ActiveSheet
LP.Protect UserInterfaceOnly:=True


'2-Calcule le nombre de lignes disponibles
NIE = Range("A3").Value
NLD = 9 - NIE
MsgBox ("Il vous reste " & NLD & " lignes disponibles.")
If NLD = 0 Then
MsgBox ("Vous ne pouvez plus enregitrer de nouvel intervenant. Ceci va interrompre la procédure.")
GoTo FinAjoutIntervenant
End If

'3-Demande le Nom et le Prénom du nouvel Intervenant
NOM = InputBox("Nom du nouvel intervenant ? : ")
PRENOM = InputBox("Prénom du nouvel intervenant ? :")

'4-Premier NOM de la liste
Range("B4").Select

'5-Dernier NOM de la Liste
ActiveCell.End(xlDown).Select

'6-Insertion du NOM dans la liste
ActiveCell.Offset(1, 0).Range("A1") = NOM

'7-Premier PRENOM de la liste
Range("C4").Select

'8-Dernier PRENOM de la Liste
ActiveCell.End(xlDown).Select

'9-Insertion du PRENOM dans la liste
ActiveCell.Offset(1, 0).Range("A1") = PRENOM

'10-Tri alphabétique
Range("B4:C12").Select
ActiveWorkbook.Worksheets("Liste Participants").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Liste Participants").Sort.SortFields.Add Key:= _
Range("B4:B12"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Liste Participants").Sort
.SetRange Range("B4:C12")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With

'11-Copie-Colle les valeurs de D à E
Range("D4:D12").Select
Selection.Copy
Range("E4:E12").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False

'12-Positionne le curseur en haut de la liste
Range("A1").Select

'13-Réactive la protection de la Liste des Participants
Set LP = Nothing


FinAjoutIntervenant:

Application.ScreenUpdating = True

End Sub

Bonjour il n'y a pas besoin d'ajouter les options dans la reprotection de la feuille.

Excel conserve les même options que vous aviez utilisez pour protéger la feuille.

il faut juste les lignes unprotect et protect avec le bon nom de feuille et le bon mot de passe

Sheets("Nom_Feuil").Unprotect Password:="mon_mot_de_passe"

Sheets("Nom_Feuil").protect Password:="mon_mot_de_passe"
Rechercher des sujets similaires à "autoriser vba ecrire verrouillee qui doit rester"