verouiller les cellules renseignées à l'enregistrement, laisser les vides dévérouillé

jasol

XLDnaute Nouveau
Bonjour,

J'ai posté un message en rapport avec mon problème, mais la discussion date de 2009, je ne pense pas pouvoir avoir une réponse, de ce fait, je tente ma chance ici en ouvrant une nouvelle discussion,

Je suis sous excel 2003, Pour le boulot, j'ai crée un fichier à remplir par des utilisateurs, le principe est qu'une fois les cellules qu'ils souhaitent remplir sont renseignées, ils enregistrent leurs modifications. La fermeture engendre le verrouilalge des cellules renseignées. Il faut savoir que le fichier que j'ai n'est pas un formulaire, et il contient des cellules fusionnées tout comme il contient des cellules normales. Il contient également une liste déroulante conditionnelle. Mon problème c'est que le vba que j'ai crée ne me verrouille que certaines cellules et non pas toutes. Voici le code :
Code:
Sub WsLock(Optional Y)
    Dim PWd$
    PWd = "4064"
    'Protége ou déprotège toutes les feuilles
    Application.ScreenUpdating = False
    If IsMissing(Y) Then
        For i = 1 To Worksheets.Count
            Worksheets(i).Protect PWd
            [A1].Select
        Next
    Else
        For i = 1 To Worksheets.Count
            Worksheets(i).Unprotect PWd
            [A1].Select
        Next
    End If
End Sub
Sub deprotege()
    WsLock 0
End Sub
Sub protege()
    WsLock
End Sub
Sub DeverouillerCellulesVides()
    'Commence par tout vérouiller
    With Sheets("Sem1")
        .Unprotect "4064"
        
        With Intersect(.UsedRange, .Range("Sem1!A1:R3000"))
        .Cells.Locked = True
        'On Error Resume Next
        .SpecialCells(xlCellTypeBlanks).Locked = False
        End With
        For Each c In Sheets("Sem1").Range("A1:R3000")
        If c <> "" Then
        If c.MergeCells Then
        c.MergeArea.Locked = True
        End If
        If IsEmpty(Range("B1").MergeArea) Then
        Range("Sem1!B1").MergeArea.Locked = False
        End If
        End If
        Next
       .Protect "4064"
    End With
end sub

Je n'arrive pas à trouver l'erreur dans mon fichier, quelqu'un pourrait-il m'aider, de plus mon but est de partager le fichier et je sais que la protection des feuilles est imcompatibles avec le partage, donc si quelqu'un a une autre idée de comment je pourrais faire?

Je vous remercie d'avoir accordé quelques instants rien qu'à lire déjà mon problème! :)
 

PMO2

XLDnaute Accro
Re : verouiller les cellules renseignées à l'enregistrement, laisser les vides dévéro

Bonjour,

Pourriez-vous fournir un classeur exemple édulcoré des données confidentielles ?
J'ai une petite idée avec l'utilisation de feuilles cachées qui serviraient de trames pour interdire tout changement entériné par une sauvegarde.

Cordialement.
 

jasol

XLDnaute Nouveau
Re : verouiller les cellules renseignées à l'enregistrement, laisser les vides dévéro

Bonjour,

Merci de m'accorder du temps

Voici un exemple, faudrait que je me penche sur la création du fichier sous forme de formulaire, peut etre que ca marcherait, mais bon, j'ai déjà passé trop de temps à essayer de faire fonctionner celui ci, j'espère que vous pourrez m'aider :) :)

Merci!
 

Pièces jointes

  • exemple.xls
    208 KB · Affichages: 49
  • exemple.xls
    208 KB · Affichages: 50
  • exemple.xls
    208 KB · Affichages: 50

PMO2

XLDnaute Accro
Re : verouiller les cellules renseignées à l'enregistrement, laisser les vides dévéro

Bonjour,

J'ai suivi une voie complètement différente de la vôtre.
L'idée est d'utiliser des feuilles cachées qui, à chaque sauvegarde du fichier, sont les copies conformes des feuilles utilisateur. Elles servent à interdire la sélection des cellules qui sont déjà renseignées grâce au code évèmentiel "Workbook_SheetSelectionChange"
J'ai prévu une procédure qui permet de visibiliser ces feuilles cachées. Si vous voulez changer les interdictions, il conviendra d'agir sur ces feuilles ou de les supprimer. Cette procédure nécessite un mot de passe qui est inscrit en dur dans le code. Le mot de passe est actuellement 123456 et vous pouvez en changer en intervenant sur la constante Private Const MOT_PASSE As String = "123456"

Cordialement.
 

jasol

XLDnaute Nouveau
Re : verouiller les cellules renseignées à l'enregistrement, laisser les vides dévéro

Bonjour Monsieur,

J'ai testé votre solution, elle marche parfaitement, même une fois le fichier partagé. Je vous remercie beaucoup de votre aide et de m'avoir accordé du temps.

Mille mercis encore une fois,
Bonne semaine à vous. :)
 

Discussions similaires

Statistiques des forums

Discussions
312 240
Messages
2 086 515
Membres
103 239
dernier inscrit
wari