Désactiver les filtres dans un tableau proteger

Fermé
Bourrique66 Messages postés 158 Date d'inscription mardi 2 juin 2015 Statut Membre Dernière intervention 25 septembre 2023 - 17 déc. 2016 à 16:17
 Utilisateur anonyme - 19 déc. 2016 à 23:26
Bonjour,
J’utilise ce code pour désactiver les filtres et protéger la feuille de calcul Excel et tout se passe très bien, mais pour diverse raison j’ai besoin de transformer ma feuille de calcul en tableau Excel et là je ne peux pas rentrer des données sans enlever la protection alors qu’avant si. En espérant que quelqu’un souhaite m’aider, je vous remercie par avance.
Code dans le ThisWorbook:Private Sub Workbook_Open()

' FFA : Feuilles pour lesquelles on veut un Filtre Automatique
Const FFA As String = "Jaugeage, BDDG, BDD 104,BDD 106,BDD 108, Base"

Dim ws As Worksheet, Lig As Byte: Worksheets("Jaugeage").Select
Application.ScreenUpdating = False

For Each ws In ThisWorkbook.Worksheets
If ws.Visible = True Then
If InStr(FFA, ws.Name) > 0 Then
If ws.ProtectContents Then
UnProtectWorksheet ws
End If
If Not ws.AutoFilterMode Then
Lig = 1 - 2 * (ws.Name = "BDDG" Or ws.Name = "Base")
ws.Cells(Lig, 1).AutoFilter
Else
If ws.FilterMode Then ws.ShowAllData
End If
ProtectWorksheet ws
End If
End If
Next ws

Application.GoTo Worksheets("Jaugeage").Cells(1)
ThisWorkbook.Saved = True

End Sub
Code dans un module:
Option Explicit

'Option Private Module

Public Const PWD As String = "excel"

Public Sub ProtectWorksheet(ws As Worksheet)

ws.Protect _
Password:="toto", _
DrawingObjects:=True, _
Contents:=True, _
Scenarios:=True, _
AllowSorting:=True, _
AllowFiltering:=True
End Sub

Public Sub UnProtectWorksheet(ws As Worksheet)

ws.Unprotect _
Password:="toto"
End Sub

Sub test()
Dim ws As Worksheet
Set ws = ActiveSheet
If ActiveSheet.ProtectContents Then
UnProtectWorksheet ws
End If

End Sub
A voir également:

5 réponses

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 704
Modifié par gbinforme le 17/12/2016 à 18:35
Bonjour,

Lorsque tu publies du code, utilises les balises adaptées car là ce n'est pas lisible.
 Toujours zen
La perfection est atteinte, non pas lorsqu'il n'y a plus rien à ajouter, mais lorsqu'il n'y a plus rien à retirer.  Antoine de Saint-Exupéry
0
Bourrique66 Messages postés 158 Date d'inscription mardi 2 juin 2015 Statut Membre Dernière intervention 25 septembre 2023 2
17 déc. 2016 à 21:07
Bonsoir,
Du coup je remet le code
code dans ThisWorbook
Private Sub Workbook_Open()


' FFA : Feuilles pour lesquelles on veut un Filtre Automatique
Const FFA As String = "Jaugeage, BDDG, BDD 104,BDD 106,BDD 108, Base"

Dim ws As Worksheet, Lig As Byte: Worksheets("Jaugeage").Select
Application.ScreenUpdating = False

For Each ws In ThisWorkbook.Worksheets
If ws.Visible = True Then
If InStr(FFA, ws.Name) > 0 Then
If ws.ProtectContents Then
UnProtectWorksheet ws
End If
If Not ws.AutoFilterMode Then
Lig = 1 - 2 * (ws.Name = "BDDG" Or ws.Name = "Base")
ws.Cells(Lig, 1).AutoFilter
Else
If ws.FilterMode Then ws.ShowAllData
End If
ProtectWorksheet ws
End If
End If
Next ws

Application.GoTo Worksheets("Jaugeage").Cells(1)
ThisWorkbook.Saved = True

End Sub

Code dans le module
Option Explicit

'Option Private Module

Public Const PWD As String = "excel"

Public Sub ProtectWorksheet(ws As Worksheet)

ws.Protect _
Password:="toto", _
DrawingObjects:=True, _
Contents:=True, _
Scenarios:=True, _
AllowSorting:=True, _
AllowFiltering:=True
End Sub

Public Sub UnProtectWorksheet(ws As Worksheet)

ws.Unprotect _
Password:="toto"
End Sub

Sub test()
Dim ws As Worksheet
Set ws = ActiveSheet
If ActiveSheet.ProtectContents Then
UnProtectWorksheet ws
End If

End Sub
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 704
17 déc. 2016 à 21:25
Bonsoir,

Du coup je remet le code
et toujours sans les balises et donc je ne regarderais pas plus ;-)
0
Utilisateur anonyme
17 déc. 2016 à 22:18
Bonjour Bourrique66,

Comme on se retrouve !  ;)  C'est moi qui t'avais déjà aidé
pour ce même classeur Excel : voir ce sujet (déjà résolu).

====================

Pour ton nouveau problème, j'ai d'abord regardé le code VBA.

Dans Module1, le mot clé Public est inutile :

a) Pour la constante PWD, car elle est utilisée uniquement
    par le module en cours ; c'est seulement si elle devait être
    utilisée ailleurs qu'il serait nécessaire de mettre Public.

b) Pour chaque Sub : par défaut, une Sub est publique et peut
    donc être appelée depuis un autre module ; c'est seulement si
    tu ne veux pas de ça qu'il est utile de mettre Private : la Sub
    privée ne peut être appelée que depuis le module en cours.

    Attention : dans le code d'un UserForm (formulaire),
    c'est l'inverse : par défaut, une Sub est privée !

Tu peux donc enlever tous les mots clés Public de Module1,
même si ce n'est pas ça qui va régler ton problème.  ;)

====================

Au départ, toutes les cellules d'une feuille de calcul sont verrouillées,
donc si tu protèges cette feuille de calcul : impossible de modifier
les cellules ; aussi, avant de protéger une feuille, il faut déverrouiller
les cellules où on doit saisir une donnée.

Par VBA, on peut bien sûr modifier ces cellules déverrouillées
sans aucun problème, mais s'il faut modifier des cellules qui
sont verrouillées, on doit déprotéger la feuille avant puis la
reprotéger après.

-----------------------------------

Sur ta feuille de calcul, sélectionne d'abord tes cellules où il faudra
faire une saisie de données ; fais un clic droit sur ta sélection, puis
choisis « Format de cellule » => fenêtre du même nom ; va sur le
dernier onglet « Protection » ; eh oui, c'est bien là : la 1ère case
doit être décochée : ☐ Verrouillée ; puis clic sur OK.

Après, n'oublie pas de reprotéger ta feuille ! Et teste si c'est OK.

====================

Si ton problème est réglé, merci d'aller en haut de page
pour cliquer sur « Marquer comme résolu ».

-----------------------------------

Sinon, dans un prochain message, joins-moi ton fichier
via mon-partage.fr et explique bien le problème et ce
que tu veux.

En particulier : « j’ai besoin de transformer ma feuille de calcul
en tableau Excel » n'est pas clair ! Je suppose que tu as voulu
dire « désactiver le filtre automatique » => plus de petites
flèches bas sur la ligne d'en-têtes ? Si oui, je crois que c'est
indépendant de ton problème. Mais peut-être as-tu voulu
dire autre chose ?

====================

À te lire. Cordialement.  :)
 
0
Bourrique66 Messages postés 158 Date d'inscription mardi 2 juin 2015 Statut Membre Dernière intervention 25 septembre 2023 2
18 déc. 2016 à 09:23
Bonjour albkan

Merci de prendre encore du temps pour me répondre. Je me souviens bien de toi, mais je ne savais pas si on pouvait mettre un message pour quelqu’un en particulier, je tente d’expliquer mon problème ton code fonctionne parfaitement dans une feuille de calcul classique, mais pour éviter d’avoir à recopier sans arrêt les formules contenues dans les cellules je transforme donc ma feuille de calcul en tableau Excel et le recopie des formules se fait automatiquement. J’ai bien déverrouillé toutes les cellules, mais je ne peux pas écrire dans les cellules protéger chose que je pouvais faire dans la feuille de calcul. Je joins deux fichiers l’un contient la feuille de calcul ou tout va bien (le nom du fichier c’est démo) et l’autre fichier contient la même chose, mais dans un tableau Excel (Nom du fichier démo1). Le but et de protéger et de désactiver les filtres dans le tableau à la fermeture d’Excel, merci de voire si cela et possible et encore merci pour ton temps et ta patience.

https://mon-partage.fr/f/fnNVTRLY/
https://mon-partage.fr/f/SJF2bjfo/
0
 
Bonsoir Bourrique66,

J'ai vu tes 2 fichiers ; dans le 2ème c'est un Tableau (appelé Liste sous Excel 2003) ;
ce type de Tableau permet une extension automatique des formules, mails il est
incompatible avec une feuille de calcul protégée : la feuille doit être déprotégée
pour que les formules puissent être automatiquement ajoutées.

Je pense donc qu'il n'y a pas de solution, mais au cas où je me trompe, continue
de surveiller les autres réponses qui vont te parvenir : peut-être qu'un autre
intervenant aura une solution ?

En attendant, tu devrais travailler avec un tableau classique ; tu as actuellement
environ 90 lignes de données ; si tu prévois d'en ajouter 100 (par exemple), ton
tableau ira (en gros) jusqu'en ligne 200 ; au cas où ta prévision est un peu juste,
prévois plus large avec 100 lignes de plus => jusqu'en ligne 300 ; donc copie
vers le bas toutes tes formules jusqu'en ligne 300 ; déverrouille la protection
des cellules de saisie, et protège la feuille : tes formules recopiées à l'avance
sont prêtes et protégées ; il suffit d'ajouter les données.

Je te souhaite de passer de bonnes fêtes de Noël et de fin d'année.  ;)

Cordialement.  :)
 
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 704
18 déc. 2016 à 23:11
Bonsoir albkan,
ce type de Tableau permet une extension automatique des formules, mails il est incompatible avec une feuille de calcul protégée
Je pense que ton extrapolation sur les tableaux n'est pas justifiée.
Comme le tableau est déverrouillé, toutes les modifications de données sont possible mais en fait la fonction est d'agrandir le tableau. Dans ce cas, Tableau ou pas c'est impossible d'écrire car les cellules sous le tableau sont verrouillées.
Si par contre les cellules en dessous du tableau sont déverrouillées pour permettre l'agrandissement, cela fonctionne sans aucun problème comme dans les listes 2003.
Pas de panique à bord simplement une erreur de protection intempestive. ;-)
0
Utilisateur anonyme > gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020
19 déc. 2016 à 00:02
 
Bonsoir gbinforme,

Merci pour ta réponse, mais moi, je n'y suis pas arrivé, alors que j'ai déprotégé
toutes les cellules sous un Tableau simple de 2 colonnes : la 1ère pour saisie
d'un nombre, la 2ème avec une formule simple : ce nombre + 1 ; dès que je
protège la feuille, le coin inférieur droit du tableau disparaît ! Si je suis sur la
dernière cellule, < TAB > passe à la ligne mais l'ajout d'une donnée n'est pas
incorporée au tableau et la cellule à droite n'est pas remplie par une formule.
Pire : en pressant < TAB > en continu, ça remonte en haut du tableau et ça
défile jusqu'en bas, puis quand ça retombe sur la dernière donnée saisie
(juste sous le tableau mais en dehors), j'ai ce message d'erreur :
« Impossible d'utiliser cette fonctionnalité du tableau sur une feuille de
calcul protégée » : copie d'écran correspondante.

De plus, si les cellules des formules sont déprotégées, on a alors le risque
d'un écrasement accidentel des formules !

Alors comment as-tu fait pour que ça marche sans problème ?

À te lire.  :)
 
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 704
Modifié par gbinforme le 19/12/2016 à 09:46
Bonjour albkan,

comment as-tu fait pour que ça marche sans problème ?
Tout simplement, j'ai déprotégé une dizaine de lignes sous le tableau de la largeur du tableau et j'ai utilisé le formulaire de saisie sans rien changer après avoir protégé la feuille à nouveau.
à mon avis, c'est de toute façon une mauvaise solution de protéger une feuille gérée par un formulaire : il vaut beaucoup mieux la masquer en VBA.
Ainsi tu n'a pas de risques d'écrasement sauf erreur de codage et tu n'as pas les problèmes de protection que l'on voit sur tous les forums.
0
Utilisateur anonyme > gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020
19 déc. 2016 à 15:57
 
Bonjour gbinforme,

j'ai utilisé le formulaire de saisie sans rien changer

Pour moi, un formulaire de saisie est une feuille de type UserForm ;
et dans l'exercice de Bourrique66, il n'y a pas de UserForm !

Un Tableau (appelé avant Liste) n'est pas un formulaire de saisie !
Donc il n'y a pas non plus de feuille de calcul gérée par UserForm !

Si tu trouves un moyen d'utiliser un Tableau (ex-Liste) dont les formules sont
recopiées automatiquement sur les lignes ajoutées tout en étant des formules
protégées (donc feuille de calcul protégée), je suis fortement preneur !

Cordialement.  :)
 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 704
19 déc. 2016 à 22:14
Bonjour albkan,

dans l'exercice de Bourrique66, il n'y a pas de UserForm !
Tu n'as pas bien regardé car c'est pourtant ainsi qu'il saisi son tableau !!!!

D'autre part lorsque l'on gère un Tableau en VBA, il faut utiliser la syntaxe adaptée, par exemple pour créer ou supprimer des lignes :
       .ListObjects(Tableau1).ListRows.Add 
       .ListObjects(Tableau1).ListRows(L).Delete
0
Utilisateur anonyme
19 déc. 2016 à 23:26
 
Bonsoir gbinforme,

Mais oui, tu as raison ! Dans les 2 fichiers joints, il y a ces 2 UserForms :
a) jaugeage : le formulaire principal (avec 4 gros boutons de commande)
b) mess_attente : un simple message pour inciter l'utilisateur à patienter

Je les avais vus, mais comme Bourrique66 ne m'a pas dit explicitement qu'il
utilisait le 1er pour gérer son tableau, je n'y ai plus pensé ; en plus, dans
son message initial, il met le code de ThisWorkbook et du 1er module,
sans mettre celui du UserForm.

Donc via le code du UserForm, ça devrait être possible de tout faire.

Cordialement.  :)
 
0