XL 2019 Verrouiller que si cellules vides

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 !

Tioneb_h

XLDnaute Nouveau
Bonjour,

Je voudrais verrouiller les cellules que si elles sont vides...
La macro verrouille bien les cellules vides mais déverrouille également les cellules non vides et verrouillées...
voir pièce jointe.
quelqu’un peut m'aider ?

VB:
Sub Verrouille()
  
Dim Cel As Range
Dim Plage As Range
Dim Mg As String, TB
    With Sheets("METRE")
        Set Plage = .Range("A1:J20")
       .Unprotect
        For Each Cel In Plage
            Mg = Cel.MergeArea.Address
            TB = Split(Mg, ":")
                If .Range(TB(0)).Value <> "" Then
                .Range(Mg).Locked = False
            Else
                .Range(Mg).Locked = True
            End If
        Next Cel
        .Protect
    End With
End Sub

Merci d'avance,
Benoît
 

Pièces jointes

Solution
Donc pour les cellules non vides si True alors True, donc si False alors false, donc le mieux est de ne pas toucher aux cellules non vides :
VB:
Sub Verrouille()
Dim Cel As Range
Dim Plage As Range
Dim Mg As String, TB
    With Sheets("METRE")
        Set Plage = .Range("A1:J20")
       .Unprotect
        For Each Cel In Plage
            Mg = Cel.MergeArea.Address
            TB = Split(Mg, ":")
            If .Range(TB(0)).Value = "" Then .Range(Mg).Locked = True
        Next Cel
        .Protect
    End With
End Sub
Bonjour Tioneb,
Peut être en rajoutant une condition, on déverrouille que si cellule non vide et non verrouillée.
VB:
Sub Verrouille()
Dim Cel As Range
Dim Plage As Range
Dim Mg As String, TB
    With Sheets("METRE")
        Set Plage = .Range("A1:J20")
       .Unprotect
        For Each Cel In Plage
            Mg = Cel.MergeArea.Address
            TB = Split(Mg, ":")
            If .Range(TB(0)).Value <> "" Then
                If .Range(Mg).Locked = False Then .Range(Mg).Locked = True
            Else
                .Range(Mg).Locked = True
            End If
        Next Cel
        .Protect
    End With
End Sub
 
Donc pour les cellules non vides si True alors True, donc si False alors false, donc le mieux est de ne pas toucher aux cellules non vides :
VB:
Sub Verrouille()
Dim Cel As Range
Dim Plage As Range
Dim Mg As String, TB
    With Sheets("METRE")
        Set Plage = .Range("A1:J20")
       .Unprotect
        For Each Cel In Plage
            Mg = Cel.MergeArea.Address
            TB = Split(Mg, ":")
            If .Range(TB(0)).Value = "" Then .Range(Mg).Locked = True
        Next Cel
        .Protect
    End With
End Sub
 
Donc pour les cellules non vides si True alors True, donc si False alors false, donc le mieux est de ne pas toucher aux cellules non vides :
VB:
Sub Verrouille()
Dim Cel As Range
Dim Plage As Range
Dim Mg As String, TB
    With Sheets("METRE")
        Set Plage = .Range("A1:J20")
       .Unprotect
        For Each Cel In Plage
            Mg = Cel.MergeArea.Address
            TB = Split(Mg, ":")
            If .Range(TB(0)).Value = "" Then .Range(Mg).Locked = True
        Next Cel
        .Protect
    End With
End Sub
tiptop merci
 
- 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
3
Affichages
569
Réponses
14
Affichages
337
  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
482
Réponses
2
Affichages
371
Retour