Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Utiliser la fonction de Tri en mode Protect

Laurent97310

XLDnaute Nouveau
Bonjour,

Je cherche une solution pour pouvoir protéger une feuille, tout en pouvant utiliser les fonctions de Tri.
Lorsque je protège ma feuille et que je clique sur Tri et Filtre, seul le filtre et encore possible. Si j'essaie de trier les données, Excel me dit que les celulles sont protégées. Pour pouvoir trier, il faut rajouter une plage dans "Permettre la modification des plages" mais l'utilisateur peut du coup écrire dans les cellules.
Existe t'il une solution pour autoriser le tri en mode Protect, tout en protégeant les cellules contre l'écriture?

J'ai passé plusieurs heures à chercher sur les différents forums anglais ou français mais sans succès.

Merci d'avance,
 

Fred0o

XLDnaute Barbatruc
Bonjour Laurent97310, youky(BJ)

Pour que le tri fonctionne sur un classeur protégé, il te faut déverrouiller les cellules que tu veux trier, dans "Clic-droit, Format Cellule, Protection..."
 

Pièces jointes

  • Fltre_Protege.xlsx
    11 KB · Affichages: 11

Columbo

XLDnaute Nouveau
Bonjour à tous,
Par défaut les cellules sont verrouillées.


Lorsqu'on active la protection de la feuille en passant par Révision, même si le tri est sélectionné,

il est impossible de trier les données

En faisant la technique de Fred0o, cela fonctionne mais les données peuvent-être modifiées.

J'ai cherché sur un autre forum, certains ont proposé un code VBA à mettre dans le private module de la feuille de manière à double cliquer sur une des cellules pour que le tableau se trie automatiquement.
Voici le code mais ça ne fonctionne pas chez moi:

Option Explicit
Private Const MDP As String = "MDP"

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim SortAddress As String
With ActiveSheet
.Unprotect MDP
If Intersect(ActiveCell, Range("A1").CurrentRegion) Is Nothing Then Exit Sub
SortAddress = ActiveCell.Address(0, 0)
.Range("A1").CurrentRegion.Sort Key1:=Range(SortAddress), Order1:=xlAscending, Header:=xlYes
.Protect MDP
End With
Cancel = True
End Sub

source : https://www.excel-downloads.com/thr...ter-la-protection-de-la-feuille-excel.120705/
 

Laurent97310

XLDnaute Nouveau
Finalement, j'ai fait un peu ce que Columbo propose mais manuellement. Il suffit de sélectionner la colonne à trier puis de cliquer sur la macro pour que ça trie. Le code est surement pas propre mais ça fonctionne quelque soit la page sur mon projet:

VB:
Static Sub TriColonne()
Dim sens As Boolean
Dim wrksht As Worksheet
Dim oListObj As ListObject

Application.ScreenUpdating = False
Call ProtectSoloOFF 'Unprotect

Feuille = ActiveSheet.Name
Set wrksht = ActiveWorkbook.Worksheets(Feuille)
Set oListObj = wrksht.ListObjects(1)
Tableau = oListObj.Name

Columnadress = ActiveCell.Column

Var = Cells(10, Columnadress) 'Mon tableau commence à la ligne 10

If Columnadress < 14 Then 'Colonne fin de tableau
Select Case bSens
        Case True
    ActiveWorkbook.Worksheets(Feuille).ListObjects(Tableau).Sort.SortFields. _
        Clear
    ActiveWorkbook.Worksheets(Feuille).ListObjects(Tableau).Sort.SortFields. _
        Add Key:=Range(Tableau & "[[#All],[" & Var & "]]"), SortOn:=xlSortOnValues, _
        Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets(Feuille).ListObjects(Tableau).Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    
    Case False
    ActiveWorkbook.Worksheets(Feuille).ListObjects(Tableau).Sort.SortFields. _
        Clear
    ActiveWorkbook.Worksheets(Feuille).ListObjects(Tableau).Sort.SortFields. _
        Add Key:=Range(Tableau & "[[#All],[" & Var & "]]"), SortOn:=xlSortOnValues, _
        Order:=xlDescending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets(Feuille).ListObjects(Tableau).Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    End Select
 
    bSens = Not bSens
End If
Call ProtectSoloON 'Unprotect
Application.ScreenUpdating = True
    
End Sub
 

Columbo

XLDnaute Nouveau
Bonjour Laurent,
J'ai repris ton code, je l'ai mis dans un nouveau module. La feuille est protégée ainsi que les données.
La colonne A est sélectionnée, je lance le code mais il bloque "Call ProtectSoloOFF 'Unprotect"
J'ai tenté de mettre le code dans la feuille directement ça fait pareil.
 

Laurent97310

XLDnaute Nouveau
C'est normal c'est ma macro pour déprotéger la feuille avant d'effectuer le tri:

VB:
Sub ProtectSoloOFF()

ActiveSheet.Unprotect

End Sub

puis à la fin pour reprotéger (avec mes paramètres propres à mon projet):

Code:
Sub ProtectSoloON()

ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowSorting:=True, AllowFiltering:=True
End Sub
 

Columbo

XLDnaute Nouveau
Laurent97310,
Je n'arrive pas à faire le tri avec la macro que tu mentionnes.
Je joins un fichier test protégé avec la macro dans l'onglet.
Quand je fais tourner la macro, j'ai le message suivant qui s'affiche et rien n'est trié:

Merci pour ton aide
 

Pièces jointes

  • test tri.xlsm
    18.9 KB · Affichages: 10

Discussions similaires

Réponses
2
Affichages
166
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…