Verrouiller des cellules à l'ouverture du classeur

Résolu
Caloow Messages postés 14 Statut Membre -  
Caloow Messages postés 14 Statut Membre -
Bonjour à tous,

J'ai un petit soucis, j'essaye de verrouiller les cellules non vide d'un tableau excel (dans une feuille appelée "Enregist_Fabrication") à l'ouverture du classeur excel.

J'ai trouver quelques lignes de code,

Pour sélectionner mes cellules non vide

Ainsi que pour verrouiller ma feuille

Mais je n'arrive pas a combiner les deux.

Voici le code :
Private Sub Workbook_Open()
With Worksheets("Enregist_Fabrication")

Selection.SpecialCells(xlCellTypeConstants).Select

SelectCells.Protect Password:="monmot2passe", DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowFormattingCells:=True, AllowFormattingColumns:=True, _
AllowFormattingRows:=True, AllowInsertingColumns:=True, AllowInsertingRows _
:=True, AllowInsertingHyperlinks:=True, AllowDeletingColumns:=True, _
AllowDeletingRows:=True, AllowFiltering:=True

End With
End sub

Je fais donc appel à vous, si vous pouviez m'aider à résoudre ce petit problème...

Merci d'avance !

6 réponses

  1. skk201 Messages postés 942 Date d'inscription   Statut Membre Dernière intervention   55
     
    Bonjour

    Pourquoi ne pas tout simplement laisser toutes les cellules qui on du contenu verrouillées ?

    (Enfin je ne comprend pas l'intérêt de verrouiller les cellules à l'ouverture du classeur. Est-ce que vous pourriez nous donner plus d'explication ?)
    0
  2. Caloow Messages postés 14 Statut Membre
     
    Bonjour skk201,

    Les cellules verrouiller seraient celle d'un tableau qui est mis à jour tout les jours, voire même plusieurs fois par jour. Le but est qu'à chaque ouverture ou fermeture, le fichier prenne en compte les modifications réalisées, et verrouille ainsi les nouvelles cellules.

    Une fois que l'opérateur à rentrer les infos dans les cellules et qu'il ferme le fichier, il ne doit plus pouvoir modifier ces cellules. Seul la personne ayant le mot de passe pourra les modifier
    0
  3. skk201 Messages postés 942 Date d'inscription   Statut Membre Dernière intervention   55
     
    Je comprend Donc a chaque "mise à jour" des données peuvent être ajoutées

    L'"opérateur" c'est une personne ? un autre classeur excel ? un programe ?
    0
  4. Caloow Messages postés 14 Statut Membre
     
    Exactement

    L'opérateur est une personne
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Maurice
     
    Bonjour
    Je pense que cette macro doit aller

    Sub Test()
    With Sheets("Base")
    .Select
    .Unprotect
    Cells.Locked = False
    Selection.SpecialCells(xlCellTypeConstants).Locked = True
    .Protect
    End With
    End Sub

    a toi de mettre ton mots de passe

    A+
    Maurice
    0
    1. skk201 Messages postés 942 Date d'inscription   Statut Membre Dernière intervention   55
       
      Je pense qu'il faut combiné nos idée :)

      Sub Verrouillage()
      Application.ScreenUpdating = False
      Dim MDP as string
      MDP = "motdepasse" 'Changer le mot de passe au besoin
      For Sh = 1 To Sheets.Count
      Sheets(Sh).Unprotect MPD
      For C = 1 To Sheets(Sh).Cells.SpecialCells(xlCellTypeLastCell).Column
      For L = 1 To Sheets(Sh).Cells.SpecialCells(xlCellTypeLastCell).Row
      If Sheets(Sh).Cells(L, C).Value = "" Then
          Sheets(Sh).Cells(L, C).Locked = False
      Else
          Sheets(Sh).Cells(L, C).Locked = True
      End If
      Next
      Next
      Sheets(Sh).Protect MDP
      Next
      End Sub


      Comme dit Maurice, libre a toi de mettre un mot de passe ou non.

      Si tu ne veux pas de mot de passe efface tout simplement le MDP après Sheets(Sh).Unprotectet Sheets(Sh).Protect

      Si plus tard tu veux en mettre tu n'auras plus qu'a reajouter les MDP
      0
    2. Caloow Messages postés 14 Statut Membre
       
      Super ça fonctionne, merci à vous deux !
      0
  7. skk201 Messages postés 942 Date d'inscription   Statut Membre Dernière intervention   55
     
    Le problème avec ton idée c'est que si le tableau est grand alors ça risque de faire ralentir l'ouverture du fichier.

    Le plus simple serait une macro qui verrouille les cellules comme celle-ci :

    Sub Verrouillage()
    Application.ScreenUpdating = False
    For Sh = 1 To Sheets.Count
    For C = 1 To Sheets(Sh).Cells.SpecialCells(xlCellTypeLastCell).Column
    For L = 1 To Sheets(Sh).Cells.SpecialCells(xlCellTypeLastCell).Row
    If Sheets(Sh).Cells(L, C).Value = "" Then
        Sheets(Sh).Cells(L, C).Locked = False
    Else
        Sheets(Sh).Cells(L, C).Locked = True
    End If
    Next
    Next
    Next
    End Sub


    Mais qu'elle soit activée manuellement par la personne qui change les données dedans

    (si jamais cette macro verrouille les cellules contenant un objet et déverouilles celles qui sont égale a "")

    EDIT

    J'ai améliorer le code, maintenant s'applique directement sur toutes les feuilles du classeur.
    0