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 Sub

et j'ai à chaque démarrage une erreur d'exécution "1004"!

et au débogage:

a ep4

et en plus, dès que j'essaye d'atteindre ma feuille "ATELIER" excel plante!

24ne-atelier-ep.xlsm (75.59 Ko)

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 Sub

bonjour,

[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 Sub

Mais on peut aussi mettre une piqure de rappel dans Workbook Open

Private Sub Workbook_Open()
   ShProtect Worksheets("blabla").Index
End Sub

avec une Sub ShProtect dans un module standart

Sub ShProtect(i%)
Worksheets(i).Protect Password:="test", AllowSorting:=True, AllowFiltering:=True
End Sub

A+

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

Rechercher des sujets similaires à "quel meilleur moyen protection macros autorisees"