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.
A voir également:
Protection particulière de cellules - figer les modifications
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
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
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
"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
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
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,
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
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
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
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
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
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
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
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