[VBA]Déprotéger classeur avec onglets cachés

  • Initiateur de la discussion Initiateur de la discussion nat54
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

nat54

XLDnaute Barbatruc
Bonjour,

J'utilisais ces 2 codes pour mes fichiers pour protéger/déprotéger.


Code:
Sub ProtegeClasseur()
Dim maFeuille As Worksheet
For i = 1 To Worksheets.Count
Set maFeuille = Worksheets(i)
maFeuille.Select
maFeuille.Protect "tdb_rh", True, True, True 'entre guillemets le mdp
Next
End Sub

Code:
Sub DeProtegeClasseur()
Dim maFeuille As Worksheet
For i = 1 To Worksheets.Count
Set maFeuille = Worksheets(i)
maFeuille.Select
maFeuille.Unprotect "tdb_rh" 'entre guillemets le mdp
Next
End Sub

Cela marchait très bien.
Sauf que maintenant je dois appeler ces macros dans une macro où je cache certains onglets.
Cela ne fonctionne alors plus car il ne retrouve pa sle i=1

Comment faire pour protéger/déprotéger tout un classeur d'une façon différent, prenant en compte les onglets cachés ?

Merci,
 
Re : [VBA]Déprotéger classeur avec onglets cachés

Bonjour,

tu peux vérifier l'état de l'onglet avec "If maFeuille.Visible Then"

si tu veux la protéger/déprotéger il faut d'abord la démasquer (maFeuille.Visible = true) puis la remasquer
 
Re : [VBA]Déprotéger classeur avec onglets cachés

Merci

Et si je peux abuser
Range("A65536").End(xlUp).Select
permet de se positionner sur la dernière ligne

comment dire dernière ligne + 1
en gros se postionner sur la ligne vierge
pour y coller de nouvelles données

j'avais ce type de code mais je n'y arrive plus (format non compatible lors du paste)
Code:
Range("a2:ad" & Range("ad65536").End(xlUp).Offset(1, 0).Row).Select
 
Re : [VBA]Déprotéger classeur avec onglets cachés

Salut nat54,

Qui dit changement de sujet dit nouveau post. Tu auras beaucoup plus de chance d'avoir une réponse.

Pour ton problème, il suffit de compter le nombre de cellules sélectionnées et d'y ajouter 1 🙄

Code:
x=selection.rows.count+1
Range("A" & x).select

Bon courage,
 
Re : [VBA]Déprotéger classeur avec onglets cachés

Re,

Le problème est lié au fait que ta procédure de (dé)protection sélectionne la feuille ce qui n'est pas nécessaire d'une part et qui plante parce qu'elle est masquée d'autre part. En fait pas besoin de sélectionner une feuille pour la protéger comme ici (à coller dans un module):

VB:
Option Explicit

'Déclaration des variables de module => utilisables par toutes les procédures du module
Const psw As String = "test"   'En déclarant le mdp au niveau module, plus besoin de le modifier x fois dans les procédures
Dim x As Worksheet

Sub Protege()

'For...Each, c'est mieux que For i...count ;)
    For Each x In ThisWorkbook.Worksheets
        x.Protect psw, True, True, True
    Next

End Sub

Sub DeProtege()

    For Each x In ThisWorkbook.Worksheets
        x.Unprotect psw
    Next

End Sub

Bon courage,
 
Re : [VBA]Déprotéger classeur avec onglets cachés

Bonjour,

Salut nat54,

Qui dit changement de sujet dit nouveau post. Tu auras beaucoup plus de chance d'avoir une réponse.

Pour ton problème, il suffit de compter le nombre de cellules sélectionnées et d'y ajouter 1 🙄

Code:
x=selection.rows.count+1
Range("A" & x).select

Bon courage,

Ca marche dans la 1ère boucle
mais dans la 2ème boucle ca donne 65536+1 = 65537 => erreur
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 Code VBA
Réponses
7
Affichages
1 K
  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
903
Réponses
3
Affichages
879
Réponses
4
Affichages
715
Réponses
2
Affichages
643
Retour