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

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,
 

GIBI

XLDnaute Impliqué
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
 

nat54

XLDnaute Barbatruc
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
 

Jam

XLDnaute Accro
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 :rolleyes:

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

Bon courage,
 

Jam

XLDnaute Accro
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,
 

nat54

XLDnaute Barbatruc
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 :rolleyes:

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
 

Discussions similaires

Réponses
2
Affichages
110

Statistiques des forums

Discussions
312 084
Messages
2 085 194
Membres
102 812
dernier inscrit
abdouami