Verrouille cellules non vide EXCEL 2016

Résolu
bonjour,

j'essayé de verrouille les cellules non vide dans feuille actif

 
Private Sub Workbook_BeforeClose(Cancel As Boolean)

For Each Sh In ThisWorkbook.Worksheets
Sh.Unprotect 34
For Each Cel In Sh.UsedRange.Cells
Cel.Locked = False
If Cel <> "" Then Cel.Locked = True
Next Cel
Sh.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True 'à toi de voir ce que tu protèges
Sh.EnableSelection = xlUnlockedCells

Sh.Protect 34
Next Sh
End Sub


alors que la fichier deviens très lent au fermeture lors de fermeture.
est ce que vous pouvez svp maider a rendre le verrouilage que sur une plage des cellules.

merci
La chance aide parfois, le travail toujours.

1 réponse

  1. Bonjour,

    verrouillage que sur une plage des cellules.
    Que vous connaissez ou pas

    Pourquoi ce verrouillage?
    1
    1. Oui plage je la nommer "ps"
      ben ceci mon essai


      Private Sub Workbook_BeforeClose(Cancel As Boolean)
      ActiveSheet.Unprotect 348610
      Dim C As Variant
      For Each C In Range("ps")
      If C.Value <> "" And C.Locked = False Then
      C.Locked = True
      End If
      Next
      ActiveSheet.Protect 348610, DrawingObjects:=True, Contents:=True, _
      Scenarios:=True
      End Sub
      t


      mais si je oter la protection et re-vider les cellules dejas remplis reste verouille
      0
    2. @supupoffRe,
      Ok.
      non vide dans feuille actif
      Votre code balaie toutes les feuilles.

      Pouvez repondre a la deuxieme question?
      0
    3. @f894009Pourquoi ce verrouillage? bon je veux que dans la plage "ps" si une cellule et remplis on peut pas le modifier apres la fermeture de fichier que si on ote la protection. et sa marche mais
      mon probleme maintenant ce que si je oter la protection et vider quelque cellules et jenregistre et je fermer la fichier
      la prochaine ouverture les cellules re-vider reste verouille

      Merci


      Private Sub Workbook_BeforeClose(Cancel As Boolean)
      ActiveSheet.Unprotect 348610
      Dim C As Variant
      For Each C In Range("ps")
      If C.Value <> "" And C.Locked = False Then
      C.Locked = True
      End If
      Next
      ActiveSheet.Protect 348610, DrawingObjects:=True, Contents:=True, _
      Scenarios:=True
      End Sub
      0
    4. @supupoffRe,

      Toujours long ou pas?

      Cette Plage "ps" a combien de cellules?

      Verrouillage de cellules non vides d'une plage

      Private Sub Workbook_BeforeClose(Cancel As Boolean)
          ActiveSheet.Unprotect 348610
          Range("ps").Locked = True
          Range("ps").SpecialCells(xlCellTypeBlanks).Locked = False
          ActiveSheet.Protect 348610, DrawingObjects:=True, Contents:=True, Scenarios:=True
      End Sub
      0
    5. @f894009Toujours long ou pas? : no n'est pas long

      Merci beaucoup sa marche bien
      0