Protection particulière de cellules - figer les modifications [Résolu]

Signaler
Messages postés
6
Date d'inscription
jeudi 1 septembre 2011
Statut
Membre
Dernière intervention
2 février 2012
-
Messages postés
14
Date d'inscription
jeudi 25 octobre 2007
Statut
Membre
Dernière intervention
11 mars 2013
-
Bonjour;

Help me! je souhaite faire une macro dont la fonction serait à l'ouverture du fichier de déprotéger les cellules vides puis de protéger chaque cellule dès qu'on a fait une saisie dedans. a la fermeture du fichier je souhaite reprotéger complétement le fichier. Pour éviter qu'un utilisateur puisse ouvrir le fichier en désactivant les macros et le modifier.

Pour l'instant j'ai trouvé ca pour déprotéger en ouvrant et protéger en fermant. (ca marche).

Sub auto_open()
ActiveSheet.Unprotect Password:="0000"
End Sub

Sub auto_close()
ActiveSheet.Protect Password:="0000"
End Sub


et ceci pour protéger un cellule après saisie (ca marche aussi)

Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Unprotect Password:="0000"
Target.Locked = True
Selection.Rows.AutoFit
ActiveSheet.Protect Password:="0000"
End Sub



Mais le problème ca à l'assemblage. tout plante

MERCI D'AIDER UNE NON INITIEE.

20 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Tu as probablement fait une mauvaise manip. J'ai testé chez moi avant de donner cette solution et tout marche sans faille !
Tes erreurs possibles :
1) tu es resté en mode création après tes modifs
2) tu n'as pas sauvegardé
3) tu n'as pas activé la feuille nommée "Feuil1", concernée par cette protection. Or, c'est lorsque tu entres dans cette feuille, que tout se déroule
4) la feuille concernée par cette protection n'est pas nommée "Feuil1"

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne intallée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Ah ! j'ai compris ce qui t'arrives :
Ton classeur s'ouvre directement sur Feuil1
Va sur une autre feuille et revient sur Feuil1

Solution pour éviter celà :
Enlève que nous avons mis dans Worksheet_activate et ajoute ceci dans Workbook_Open

Private Sub Workbook_Open()
  ActiveSheet.Unprotect Password:="0000"
  Worksheets("Feuil1").Cells.Locked = False
  Worksheets("Feuil1").Cells.SpecialCells(xlCellTypeConstants).Locked = True
  Worksheets("Feuil1").Protect Password:="0000"
End Sub




____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne intallée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Cette fois-ci, clochette m'a soufflé ceci, pour faire face à ce cas particulier là :

modifier ainsi la procédure d'ouverture

Private Sub Workbook_Open()
  ActiveSheet.Unprotect Password:="0000"
  Worksheets("Feuil1").Cells.Locked = False
  If Not IsEmpty(Worksheets("Feuil1").Cells.SpecialCells(xlCellTypeLastCell)) Then
    Worksheets("Feuil1").Cells.SpecialCells(xlCellTypeConstants).Locked = True
  End If
  Worksheets("Feuil1").Protect Password:="0000"
End Sub



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne intallée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
14774
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
7 mars 2021
151
Bonjour,

"tout plante", ça veut dire quoi ?
Quel message d'erreur ?
Quelle réaction non désirée ?

Voir le point 1 qui suit.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Bonjour,

regarde ce que tu as écrit et mes commentaires en face :

Private Sub Worksheet_Change(ByVal Target As Range) ' donc à chaque fois que tu change la valeur d'une cellule
  ActiveSheet.Unprotect Password:="0000" ' tu déprotège ===>> OK
  Target.Locked True ' tu bloques une cellule>> OK mauis quid des autres ? elles ne sont pas déverrouillées !
  Selection.Rows.AutoFit
  ActiveSheet.Protect Password:="0000" ' tu reprotèges ===>> OK, mais comment vas-tu maintenant 
'pouvoir modifier une cellule ? (Or tu as choisi cet évènement pour déprotéger !
End Sub

C"'est un peu comme si tu t'enfermais toi-même à l'extérieur de ta maison


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne intallée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Pour faire cela, il tefautr :
1) manuellement, un seule fois : déprotéger ton classeur puis déverrouiller toutes les cellules
Tu peux également faire cette opération par code VBA,
ActiveSheet.Unprotect Password:="0000"
  Cells.Locked = False

mais il te faudra dans ce cas mettre en place un système pour ne déverrouiller toutes les cellules qu'une seule fois (y compris si plusieurs sessions). Donc : mémoriser dans une cellule ou dans la base de registre ou dan,s un fichier texte que cela a déjà été fait et ne plus le refaire si déjà fait une première fois.
2 ) tu n'auras alors plus de problème avec ta sub Change.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne intallée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
En réalité, la solution exacte passe par la connaissance exacte de ce que tu as déjà et de ce que tu veux faire.
Et on ne connait pas encore ces tenants et aboutissants avec précision !

Regarde par exemple cette solution, qui conviendrait dans le cas où :
- tu aurais déjà un fichier avec des cellules remplies, mais que tu voudrais verrouiller
- tu voudrais verrouiller les nouvelles ,saisies, y compris d'une session à l'autre

Private Sub Worksheet_Activate()
  ActiveSheet.Unprotect Password:="0000"
  Cells.Locked = False
  Cells.SpecialCells(xlCellTypeConstants).Locked = True
   ActiveSheet.Protect Password:="0000"
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
  ActiveSheet.Unprotect Password:="0000"
  Target.Locked = True
  Selection.Rows.AutoFit
  ActiveSheet.Protect Password:="0000"
End Sub

et sans tes auto_open et auto_close.
Bien évidemment : sauvegarder ==>> fermer ===> ouvrir ===> et constater ce qui se passe alors
Bref et pour résumer : on constate que la solution adéquate peut être complètement différente selon le but rechercher (que l'on ne connait pas encore dans le détail)


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne intallée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
14
Date d'inscription
jeudi 25 octobre 2007
Statut
Membre
Dernière intervention
11 mars 2013

bonjour

je suis aussi interressé par une solution identique

je suis a la recherche d'un code qui permettrais

a l'ouverture du fichier verrouiller les cellules non vides
puis au fur et a mesure que l'on saisi une valeur dans une cellule qu'elle se verrouille pour en empecher la modification mais que toutes les autres cellules vides puissent etre renseignées

mais je ne voudrais pas que les personne qui ouvre le document en desactivant les macros puissent modifier le fichier se serait seulement en autorisant les macros que le fichier serait modifiable

pierre
Messages postés
14
Date d'inscription
jeudi 25 octobre 2007
Statut
Membre
Dernière intervention
11 mars 2013

Le code de Ucfoutu fonctionne tres bien pour verrouiller les cellules apres saisi

le seul souci est de bloquer le fichier si on active pas les macros

je viens de tester si a l'ouverture on accepte pas l'activation des macros on ne peut pas modifier les cellules remplis c'est super

mais on peut ecrire dans les cellules vides qui elles ne seront jamais modifier

reste a obligé les utilisateurs a accepté les macros pour modifier le fichier

merci pour votre aide

pierre
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Bonjour peterpam,
et la fée clochette, alors ? tu l'as oubliée ?
ajoute ceci, tout simplement, au code déjà montré :
Private Sub Workbook_BeforeClose(Cancel As Boolean)
  ActiveSheet.Unprotect Password:="0000"
  Sheets("Feuil1").Cells.Locked = True
  ActiveSheet.Protect Password:="0000"
End Sub


Dans le module WorkBook
Et, macros désactivées ou non ... l'infracteur l'aura "in the baba"

Attention, hein : remplacer Feuil1 par le nom de la feuille concernée.
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne intallée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Ce que je trouve par contre dommageable, c'est le titre donné par le demandeur à la présente discussion ( "script VBA Excel 2003" )
Il est tel que personne, face au même problème, n'y trouverait sa solution !
Un gentil admin pourrait utilement le modifier en (du genre) :
"protection particulière de cellules - figer les modifications"

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne intallée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
14
Date d'inscription
jeudi 25 octobre 2007
Statut
Membre
Dernière intervention
11 mars 2013

Je te remercie pour tes reponses rapides
voici le code que j'ai mis dans ma feuillle

le souci c'est des que j'ouvre le fichier toutes les cellules sont verrouillées





pierre
Messages postés
14
Date d'inscription
jeudi 25 octobre 2007
Statut
Membre
Dernière intervention
11 mars 2013

j'ai oublié de preciser macro active ou non

pierre
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
335
Bonjour,

Comme l'a suggéré ucfoutu, j'ai modifié le titre de ce sujet.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
j'ai oublié de preciser macro active ou non

Evidemment ! Et heureusement !
Mais as-tu lu mon tout dernier message ?

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne intallée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
14
Date d'inscription
jeudi 25 octobre 2007
Statut
Membre
Dernière intervention
11 mars 2013

ma reponse c'est croise avec les tiennent elle devrait etre 2 ou 3 poste avant

je test ta solution

encore merci

pierre
Messages postés
6
Date d'inscription
jeudi 1 septembre 2011
Statut
Membre
Dernière intervention
2 février 2012

Bonjour;

Merci tout plein, je vous suis depuis hier soir et j'ia enfin trouvé la solution à mon PB.
J'ai mis ca dans le workbook.

[color=blue]Private Sub Workbook_Open()
ActiveSheet.Unprotect Password:="0000"
Sheets("Feuil1").Cells.Locked = False
Sheets("Feuil1").Cells.SpecialCells(xlCellTypeConstants).Locked = True
Sheets("Feuil1").Protect Password:="0000"
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
ActiveSheet.Unprotect Password:="0000"
Sheets("Feuil1").Cells.Locked = True
ActiveSheet.Protect Password:="0000"End Sub/color

et ca dans la feuill 1

Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Unprotect Password:="0000"
Target.Locked = True
Selection.Rows.AutoFit
ActiveSheet.Protect Password:="0000"
End Sub

Ca marche trop bien.
La féé clochette.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Alors : ===>> tag "Réponse Acceptée" pour que cette discussion puisse servir à d'autres, s'il te plait !

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne intallée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
14
Date d'inscription
jeudi 25 octobre 2007
Statut
Membre
Dernière intervention
11 mars 2013

merci a toi Ucfoutu

cela fonctionne parfaitement

au depart il faut qu'il y est au moins une cellule rempli sinon erreur 1004

je mettrais bien mon fichier excel en pieces jointe mais je ne trouve pas comment faire

pierre
Messages postés
14
Date d'inscription
jeudi 25 octobre 2007
Statut
Membre
Dernière intervention
11 mars 2013

rien a dire

bravo


pierre