Verrouiller une feuille Excel après modification et enregistrement

Bonjour à tous,

Je cherche comme le titre de ce document l'indique a verrouiller une feuille de calcul excel dès lors que celle-ci a été modifiée.

Le principe est le suivant, je crée différentes feuilles dans un fichier excel ( toutes la même mise en page => PJ "fichier initial"). Si quelqu'un vient à modifier une de ces feuilles par rapport à ma mise en page d'origine alors à la réouverture de l'excel en question je ne peux plus éditer la feuille modifié sans y insérer un mot de pass ( Pj "Page 1 modifiée"). Le reste des feuilles comportant le contenu d'origine peuvent elles être modifiées.

A la base j'étais partie sur une solution comme celle-ci :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim xSheet As Worksheet
    Dim xPsw As String
    pwd = "mdp"
    For Each xSheet In Worksheets
        xSheet.Protect Password:=pwd, DrawingObjects:=True, Contents:=True, Scenarios:=True, _
UserInterfaceOnly:=True, AllowFormattingCells:=True, AllowFormattingColumns:=True, _
AllowFormattingRows:=True, AllowInsertingColumns:=True, AllowInsertingRows:=True, _
AllowInsertingHyperlinks:=True, AllowDeletingColumns:=True, AllowDeletingRows:=True, _
AllowSorting:=True, AllowFiltering:=True, AllowUsingPivotTables:=True
    Next
End Sub

Le problème c'est que cela verrouille toutes les feuilles après enregistrement et cela ne tient pas compte de la mise en page d'origine ce qui n'est pas ce que je souhaite...

Merci d'avance pour vos réponses et bonne journée

Bonsoir

Et si à la place de votre code actuel, vous essayez ceci

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim xPsw As String

xPsw = "mdp"
ActiveSheet.Protect Password:=xPsw, DrawingObjects:=True, Contents:=True, Scenarios:=True, _
UserInterfaceOnly:=True, AllowFormattingCells:=True, AllowFormattingColumns:=True, _
AllowFormattingRows:=True, AllowInsertingColumns:=True, AllowInsertingRows:=True, _
AllowInsertingHyperlinks:=True, AllowDeletingColumns:=True, AllowDeletingRows:=True, _
AllowSorting:=True, AllowFiltering:=True, AllowUsingPivotTables:=True

End Sub

Cordialement

Bonjour,

Merci de votre retour. Le seul problème avec votre code c'est qu'à la première modification réalisée la feuille est figée.

Dans mon cas j'ai juste modifié la cellule à coté de nom et la feuille est verrouillée. Il faut que j'ai la possibilité de modifier autant de cellule que je souhaite et qu'uniquement après enregistrement du fichier je fige la ( ou les ) feuille(s) avec une mise en page différente des autres.

Bonjour,

Je me doutais un peu que vous alliez revenir avec ce problème.
Là je ne vois pas vraiment de solution si ce n'est de peut-être définir les cellules qui ne peuvent pas être modifiées où celles qui peuvent l'être sur chaque feuille.
Ou alors assurer un suivi des modifications effectuées via le partage.

Est-ce possible ?

Bonjour,

Définir les cellules qui vont être modifiées oui cela est possible. Dans l'exemple que j'ai envoyé je souhaiterais que uniquement les cellules B1 et B2 soient modifiables par exemple.

Que proposez vous ?

Pour la seconde solution avec le partage et suivi des modifications. Avez vous une idée de la limite d'information historisées ?

Cdlt

re

Définir les cellules qui vont être modifiées oui cela est possible. Dans l'exemple que j'ai envoyé je souhaiterais que uniquement les cellules B1 et B2 soient modifiables par exemple.

Pour faire simple, vous pourriez mettre un mot de passe sur la feuille et faire en sorte que B1 et B2 soient uniquement modifiables
Pour ce faire :
- Sélectionnez B1 et B2
- Menu Accueil --> cliquer sur l'icone Format
- choisir "Format de cellule"
- Cliquez sur l'onglet "Protection"
- décochez la case "Verrouillée" puis OK
Il vous reste à mettre un mot de passe sur la feuille

En principe vous n'avez plus besoin du code proposé

Crdlt

Je ne suis pas sur d'avoir tout compris. Pouvez-vous m'envoyer un exemple sur le fichier excel que j'ai envoyé ?

Si les cellules B1 et B2 sont éditables, il faut qu'elles sont éditables et lorsque le fichier est enregistré et/ou fermé alors la feuille contenant ces deux cellules modifiées est verrouillée.

Si les cellules B1 et B2 sont éditables, il faut qu'elles sont éditables et lorsque le fichier est enregistré et/ou fermé alors la feuille contenant ces deux cellules modifiées est verrouillée.

C'est ce que je vous ai expliqué et vous n'avez plus besoin de code pour faire cela.

Avez-vous suivi pas à pas ce que je vous ai expliqué ?

Je peux vous donner un fichier exemple mais cela ne va pas vous aider à le réaliser sur votre bon fichier car vous devrez refaire ce que je vous ai écrit

Edit : vous devez répéter la procédure sur chaque feuille et les cellules restent toujours accessibles même lorsque vous ré-ouvrez le fichier

Oui j'ai bien essayé la manipulation et le résultat escompté n'est à priori pas le bon

Je me suis peut-être mal exprimé :

1) J'ai une trame de base => Dans notre cas "Nom" en A1 et "Prénom" en A2

2) La trame de base ne peut être modifiée. Dans notre cas uniquement 2 champs seront potentiellement editables => la cellule B1 et/ou la cellule B2

3) Si la cellule B1 et/ou B2 est modifiée et le fichier enregistré alors il n'est plus possible de touché quoi que ce soit sur le feuille complète qui a subit des modifications. Les autres feuilles comportants uniquement la trame de base ont toujours les champs B1 et B2 accessibles.

Bonjour

Merci de vos précisions.
Si vous voulez que les feuilles soient protégées à l'enregistrement du fichier si modifications d'une des deux cellules (votre point 3) :
- Faites comme je vous ai expliqué précdemment
- Ajoutez le code ci-dessous dans THISWORKBOOK

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim sh As Object
Dim xPsw As String

xPsw = "mdp"
For Each sh In Sheets
    With sh
        .Unprotect xPsw
        If .Range("B1") <> vbNullString Then .Range("B1").Locked = True
        If .Range("B2") <> vbNullString Then .Range("B2").Locked = True
        .Protect xPsw
    End With
Next sh
End Sub

Lors de l'enregistrement et uniquement à l'enregistrement, le code protègera les feuilles et contrôlera sur chaque feuille que la cellule B1 ou B2. Si les cellules sont complétées, le code verrouillera la cellule.

Dites moi

Oubliez pas de cloturer si ok pour vous.

Cordialement

Rechercher des sujets similaires à "verrouiller feuille modification enregistrement"