Macro pour verrouiller/déverrouiller toutes les pages en une fois

Benjy51190

XLDnaute Nouveau
Bonjour à tous et merci à vous de vous attarder sur mon sujet;

Je cherche à faire une macro qui me permettrai de verrouiller/déverrouiller toutes les pages de mon tableur en un clic.
Pour info, ce tableau de contient pas de mot de passe lors du déverrouillage , et a juste pour but de protéger les formules de mauvaise manipulation.

Je vous joins en pièce jointe mon tableau "vierge".

Merci beaucoup pour votre aide.
Bonne journée à tous
 

Fichiers joints

Robert

XLDnaute Barbatruc
Bonjour Benjy, bonjour le forum,

Essaie comme ça :

VB:
Sub Ver()
Dim O As Worksheet

For Each O In Worksheets
    O.Protect
Next O
End Sub

Sub Dever()
Dim O As Worksheet

For Each O In Worksheets
    O.Unprotect
Next O
End Sub
 

Benjy51190

XLDnaute Nouveau
Merci beaucoup @Robert pour cette réponse rapide.
C'est surement moi qui ne suis pas doué, mais je viens d'essayer de l'appliquer sans succès: "Erreur de compilation: erreur de syntaxe (Module 5 12:0)".
je remet mon tableur en pièce jointe.
Si je pouvais avoir de l'aide pour appliquer cette macro, ça serai super.
Merci par avance
 

Fichiers joints

Lolote83

XLDnaute Accro
Salut à tous.
Je pense que le code de Robert est correct, mais à l'ouverture de ton fichier, cela est retranscrit bizzarement. (voir copie d'écran)
A revoir
Par contre, une multitude de macro identique pour chaque onglet ne fait qu'alourdir le code alors qu'un seul peut faire l'affaire.
Par exemple, pour le tri (croissant et décroissant) des noms, tu pourrais avoir

Code:
Sub Tri_Nom_Croissant()
    Application.ScreenUpdating = False
    xOng = ActiveSheet.Name
    ActiveWorkbook.Worksheets(xOng).Sort.SortFields.Clear
    ActiveWorkbook.Worksheets(xOng).Sort.SortFields.Add Key:=Range( _
        "B6:B1002"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets(xOng).Sort
        .SetRange Range("A6:AC1002")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Application.ScreenUpdating = True
End Sub
Code:
Sub Tri_Nom_Decroissant()
    Application.ScreenUpdating = False
    xOng = ActiveSheet.Name
    ActiveWorkbook.Worksheets(xOng).Sort.SortFields.Clear
    ActiveWorkbook.Worksheets(xOng).Sort.SortFields.Add Key:=Range( _
        "B6:B1002"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets(xOng).Sort
        .SetRange Range("A6:AC1002")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Application.ScreenUpdating = True
End Sub
En fait, on récupère l'onglet que l'on réinjecte dans la macro. Cela te permet donc d'avoir un code pour tous les tris (croissant et décroissant) des noms.
Il en va de même pour les prénoms, les Type Abo et aussi le n° de semaine.
@+ Lolote83
 

Fichiers joints

Lolote83

XLDnaute Accro
Re salut,
Dans le fichier joint, je me suis permi de réintégrer la macro de Rober sous le module Mod_Robert.
Plus qu'un seul module pour tes tris (voir module Mod_Tri)
Je te laisse donc le soin de réaffecter à tous les boutons (Num, Nom, Prénom et Abol) les macros correspondantes.
C'est juste pour montrer que l'on peut faire beaucoup plus court
NB : Les semaines 1 et 2 ont été faites

Au fait, tes semaines commencent un mardi, c'est normal ????
@+ Lolote83
 

Fichiers joints

Benjy51190

XLDnaute Nouveau
Merci beaucoup @Lolote83 ;
Effectivement, mes macros de tri ne sont pas forcement bien faites, et je les ai réalisé il y a maintenant une paire d'années en partant de zéro connaissance sur Excel, et en ne me servant que de tuto internet; ça serai bien que je refasse un bon nettoyage de tout ça maintenant que je maitrise un tout petit peu plus, et ce que tu m'as fais va beaucoup m'aider;

Pour en revenir a la semaine qui commence un mardi, normalement non, mais c'est parce que tu as mon tableau vierge sans l'année indiquée en D2: en indiquant 2018, mon premier janvier tombe bien un lundi.

Pour le verrouillage et déverrouillage, sur le principe, nickel, ça fonctionne, mais il y a un hic, et je ne sais pas si l'on peut le résoudre: normalement, lorsque je verrouille manuellement, je coche les autorisations pour:
-Sélectionner les cellules verrouillées
-Sélectionner les cellules déverrouillées
-Format de lignes
-Modifier les objet

Avec la macro appliquée, je suppose qu'aucune de ces option n'est activée, et résultat, ma macro (masque), qui permet de cacher des lignes, ne fonctionne plus.
existe t-il une solution pour ajouter à cette macro de verrouillage l'activation des 4 permissions ci dessus?
 

Lolote83

XLDnaute Accro
Re salut,
Pour ton souci de protection, pourquoi, lorsque tu utilises le boutons MASQUER, tu ne déprotèges pas en premier, puis tu masques, puis tu reprotèges.
Je pense que cela pourrait le faire
Cela donnerait un truc du genre :
Sub Masquer()
call Dever
ta macro
call Ver
End sub
@+ Lolote83
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, le forum


Puisque le titre du fil stipulait: " en une seule fois"
Une macro qui protége/déprotége (une AllInOne quoi ;))
La 1ère exécution protège les feuilles
La seconde exécution les déprotège.
VB:
Sub ProtectDeprotect() 
Dim ws As Worksheet 
For Each ws In Worksheets 
Select Case ws.ProtectContents 
Case True 
ws.Unprotect 
Case False 
ws.Protect 
End Select 
Next 
End Sub
 

Benjy51190

XLDnaute Nouveau
Merci à tous pour votre aide.
Impeccable, j'ai tout ce qu'il me faut.
Merci @Staple1600 , je vais utiliser cette macro All In one.
Merci également à @Lolote83 pour l'aide apportée sur les modifications de mes anciennes macros.
Bonne soirée à vous
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas