Quel meilleur moyen de protection avec macros autorisées
Bonjour,
Après plusieurs recherche et tests de différents code, je n'arrive pas à protéger correctement!
Toute les feuilles doivent êtres protégées.
J'ai eu cet semaine un problème de fausse manip ou un des utilisateur de ce fichier a supprimé sans le vouloir un formule!
- sur la feuille "RECHERCHE" j'ai déverrouillé les cellules "C3" et "C6" (pour pouvoir faire la recherche via la liste ou tapé manuellement)
- sur la feuille "NE" je n'ai verrouillé que la première ligne (nous devons pouvoir encoder sur le reste)
- sur la feuille "ATELIER" je n'ai rien vérrouillé! (les macros doivent pouvoir traité les données sur cet feuille) par la suite cet feuille seras "veryhidden"
j'ai intégré ce code ci:
Private Sub Workbook_Open()
Dim i%
For i = 1 To Worksheets.Count
Worksheets(i).Protect UserInterfaceOnly:=True, Password:="test"
Next
End Subet j'ai à chaque démarrage une erreur d'exécution "1004"!
et au débogage:
et en plus, dès que j'essaye d'atteindre ma feuille "ATELIER" excel plante!
Bonjour,
testes de cette façon :
Sub Lister()
On Error Resume Next
[LstProjet].Offset(, -1).Resize(, 2).ClearContents
On Error GoTo 0
With Worksheets("ATELIER")
.Unprotect "test" 'ôte la protection...
TriProjetDate "Projet1"
[NEatelier].Resize(, 2).AdvancedFilter xlFilterCopy, [Crit], .Range("C1:D1"), True
.Protect "test" 'protège à nouveau
End With
End Subbonjour,
[Edit2] Sorry... Theze
UserInterfaceOnly = True est parfait mais ça implique que le reste soit à l'avenant...
Pour reformuler il faut que le reste soit compatible : or AdvancedFilter n'est pas compatible avec Protect.
Donc il faut utiliser d'autres méthodes...
Quoi te conseiller ? Je ne sais pas car je subodore qu'il y a pas mal de truc qui m'échappent dans ton modèle...
A première vue comme ça de manière simpliste. (s'il n'y a que ces 2 ou 3 macros...)
Je dirais que tu peux continuer comme tu as commencé mais :
Oublie les resize, offset, redim et autres codages à géométrie variable.
Définis un peu plus de plages nommées dynamiques de manière à utiliser ces plages.
et travaille avec des Arrays...
A l'échelon suivant en plus des indications précédentes utilise un Userform pour la recherche
... et les tableaux Excel ! (Insertion > Tableau)
Sinon si tu veux vraiment pas te casser la tête tu fais une macro ShUnprotect : Tu l'utilises avant AdvancedFilter et tu reprotèges aussitôt après. Mais ça c'est vraiment un expédient pour se dépanner rapidos. Ça te laisse un peu de temps pour reconsidérer un peu l'ensemble...
[EDIT]
UserInterfaceOnly est parfois un peu volatile (en particulier sur des plantages VBA...) et s'utilise plutôt dans :
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
ShProtect Sh.Index
End SubMais on peut aussi mettre une piqure de rappel dans Workbook Open
Private Sub Workbook_Open()
ShProtect Worksheets("blabla").Index
End Subavec une Sub ShProtect dans un module standart
Sub ShProtect(i%)
Worksheets(i).Protect Password:="test", AllowSorting:=True, AllowFiltering:=True
End SubA+
Bonsoir, Theze et galopin01
(et tous les autres bien sûr
Je viens d’essayer la solution de "Theze" qui, pour le moment fonctionne
Mai je prend bonne notes "galopin01" de tes idées, sache tout de même que je ne suis pas l'auteur de ce code (MFerrand), et que je suis vraiment débutant dans le VBA, je patauge pas mal, je comprend certaine chose, ce qui me permet parfois d'adapter ce que trouve.
Merci à vous d eux