Protection permetant le filtrage

Bonsoir,

Savez-vous comment protège t-on les feuille d'un classeur d'un mot de passe mais en permettant le filtrage des valeurs de l'une d'elle présent dans un tableau.

Le système de protection que j'utilise est basic pour l'instant:

Sub sécurité()
    Dim f As Worksheet
        For Each f In ActiveWorkbook.Worksheets
        f.Protect "1234", True, True, True
        Feuil1.EnableAutoFilter = False
    Next
End Sub

Le tableau de la feuille ne peut quand même pas être filtré, quelqu'un aurait-il une idée(avec les petite fleche)?

Cordialement

MAX

Bonsoir,

Tu ajoutes dans les paramètres de Protect : AllowFiltering:=True.

Cordialement.

Bonour,

MFerrand merci pour ta reponse, mais je ne sais pas trop ou placer ta ligne, j'ai tenter de la placer directement dans le thisworkbook, mais ca ne fonctionne pas.

Sub sécurité()
    Dim f As Worksheet
        For Each f In ActiveWorkbook.Worksheets
        f.Protect "1234", True, True, True
        'f.AllowFiltering = True
    Next
End Sub

Donc ou dois je placer ce paramètre?

Cordialement

MAX

Par exemple voici un fichier test (le code est 1234), le tableau est verouillé et la fonction de filtrage et de tri du tableau l'est aussi, ou dois-je placer ma ligne de code pour que je puisse filtrer mon tableau tout est le protégeant des modifiaction.

Cordialement

MAX


voila le fichier test excel

5test.xlsm (14.84 Ko)

Tu fais une confusion entre propriété ou méthode d'un objet et paramètre d'une propriété ou méthode à passer en argument.

Il faut clarifier tes base de la syntaxe VBA Et ne pas hésiter à se référer à l'Aide qui te fournira souvent les bonnes indications sur la syntaxe à utiliser.

Tu utilises par ailleurs le passage d'arguments par position, ce qui est à la fois le plus pratique et préférable. mais il ne faut pas ignorer que tu peux passer les arguments en arguments nommés, et si tu dois placer une dizaine de virgule avant d'arriver à la bonne position, il peut être plus pratique et sûr de le nommer (on peut mixer les deux manières de faire).

Pour passer un argument nommé, c'est nom de l'argument suivi de : (deux-points) et = (égale).

D'où :

Private Sub Workbook_Open()
    Dim f As Worksheet
    For Each f In ActiveWorkbook.Worksheets
        f.Protect "1234", True, True, True, AllowFiltering:=True
    Next
End Sub

Cordialement.

Bonjour,

Daccord merci!

Je pensais qu'il fallait obligatoirement créer une ligne par propriété mais du oup vba est plus claire maintenant!

Merci encor!

Cordialement

MAX

Bonjour,

C'est l'occasion, de mieux mettre en place les idées : il est rare au contraire de n'utiliser qu'une propriété ou méthode par ligne de code !

Déjà dans ton expression : ActiveWorkbook.Worksheets tu écris 2 propriétés

  • la propriété Worksheets de l'objet Workbook, qui te renvoie une collection de feuilles (du classeur actif)
  • que tu qualifies par la propriété ActiveWorkbook de l'objet Application, qui te renvoie le classeur actif
  • laquelle, étant dépourvue de qualificateur explicite, est implicitement qualifiée par Application.
[Et quand tu l'écris (Application), c'est la propriété de l'objet Application que tu utilises qui renvoie l'Application Excel.]

A ce stade, tu peux constater que tu ne "touches" jamais les objets (si l'on peut dire), tu n'utilises que des propriétés ou méthodes pour les renvoyer.

Et lorsque tu précises une méthode avec des arguments, tu n'utilises pas directement une propriété, tu paramètres l'exécution de la méthode qui prend en compte la valeur de ton argument pour modifier en conséquence la propriété de l'objet sur lequel elle agit.

Ce qui doit être distingué d'une action directe sur la propriété pour la modifier...

Cordialement.

Rechercher des sujets similaires à "protection permetant filtrage"