XL 2016 Protection en écriture cellules selon condition

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Michel_ja

XLDnaute Occasionnel
Bonjour à tous,
j'aimerai savoir s'il est possible de protéger en écriture, certaines cellules d'une même ligne ou pourquoi pas l'ensemble des cellules de la ligne, en fonction du texte (ou contenu) d'une cellule de cette même ligne.
Si le texte de la cellule A6 est "Done" alors toute la ligne est protéger en écriture. Les lignes à protéger ne se suivent pas obligatoirement, donc je me demande s'il y faut faire cela sous forme de boucle ?

Merci beaucoup.
Michel
 
Bonjour BrunoM45,
tout d'abord merci d'avoir répondu à mon besoin. Le résultat est super.
Comment pourrait-on modifier ton code pour que ce ne soit plus une private Sub qui se déclenche lors d'un événement ? Je ne suis pas encore familier avec Target qui je pense est la "cellule cible" où se fait l'événement.
Est ce qu'on pourrait avoir une boucle qui check le texte d'une cellule pour l'ensemble des lignes d'une range (qu'on définit avec une variable) et qui la protêge en écriture à ce moment là ? Je n'ai pas besoin du MsgBox.
J'ai commencé un début de code mais ça se gâte puisque il n'y a plus "Application" dans ce cas.
Merci beaucoup.

Sub Protection_PastData()

Dim AllData As Range
Dim Derligne As Long
Dim i As Long
Derligne = Range("L" & Rows.Count).End(xlUp).Row
Set AllData = Range("A6" & ":EX" & Derligne)
For i = 7 To Derligne

If Range("CL" & i).Value = "Done" Then

'If Target.Column <> 1 Then
' Interdire la modification
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
'End If
' Passer la ligne en gris si pas déjà fait
Range("A" & LignePast.Row).Resize(, Columns("R").Column).Interior.Color = 14277081
Else
' Sinon effacer la couleur si existe
Range("A" & LignePast.Row).Resize(, Columns("R").Column).Interior.Color = xlNone
End If
Next LignePast
End Sub
 
J'ai essayé avec le code suivant mais ça bloque au niveau de Application.Undo qui d'après ce que j'ai lu en anglais sur des sites ne s'applique qu'à la dernière opération effectuée. Ce qui explique sûrement le private sub dans la solution de BrunoM45!
Vous auriez une solution ?
Merci encore.

Sub Protection_PastData()
Dim AllData As Range
Dim DerligneV10 As Long
Dim Row As Integer
DerligneV10 = Range("L" & Rows.Count).End(xlUp).Row
Set AllData = Range("A6" & ":EX" & DerligneV10)

For Row = 7 To DerligneV10

If Range("CL" & Row).Text = "Done" Then
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
Range("A" & Row & ":RR" & Row).Interior.Color = 14277081
Else
' Sinon effacer la couleur si existe
Range("A" & Row & ":RR" & Row).Interior.Color = xlNone
End If
Next Row
End Sub
 
Bonjour.
Et si c'est pas "Done" c'est vide ?
Avez vous essayé ma proposition du #2 ?
Notez que je ne comprends pas trop pourquoi la solution de BrunoM45 ne vous convient pas.
Est-ce parce qu'elle n'empêche pas d'essayer inutilement contrairement au verrouillage de la cellule ?
Notez que ce dernier implique de protéger la feuille, au moins sans mot de passe.
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
12
Affichages
107
Réponses
17
Affichages
301
Réponses
30
Affichages
246
Retour