And dans une condition en VBA

Christian T

XLDnaute Nouveau
Bonjour le forum

Je cherche à créer une procédure pour instaurer une protection avec mot de passe sur toutes le feuilles de mon classeur et une procédure en sens inverse. Les voici.

Sub Macro1()
'
For Each Fl In Worksheets
Fl.Activate

If Fl.Name <> 'Sommaire' Then

ActiveSheet.Protect password:='Toto', _
DrawingObjects:=True, Contents:=True, Scenarios:=True

End If

Next

End Sub

Sub Macro2()
''
For Each Fl In Worksheets
Fl.Activate

If Fl.Name <> 'Sommaire' Then

ActiveSheet.Unprotect password:='Toto'

End If

Next
End Sub

Cela marche, mais d'une part je souhaite :

- exclure une autre feuille 'Info'. dois je écrire une 2ème fois If ... End If, ou existe-t-il une façon plus élégante ?

- réduire ces deux proécdures à une, qui si mes feuilles sont protégées, les déprotège et inversement.

Merci d'avance.

Bonne journée

Christian
 

soft

XLDnaute Occasionnel
Salut Christian, le forum,

Voilà une procédure avec une variable globale :

Code:
Public Protect As Boolean

Sub ProtectOnOff()
    Dim Fl As Worksheet
    For Each Fl In Worksheets
    If Fl.Name <> 'Sommaire' Or Fl.Name <> 'Info' Then
        If Protect Then
            Fl.Unprotect Password:='Toto'
        Else
            Fl.Protect Password:='Toto', _
            DrawingObjects:=True, Contents:=True, Scenarios:=True
        End If
    End If
    Next Fl
    Protect = IIf(Protect, False, True)
End Sub
 

Christian T

XLDnaute Nouveau
Bonjour Soft, bonjour le forum

Meri Soft pour ton code. Il marche.
J'ai cherché à le comprendre et je bute sur deux lignes

Pourquoi déclarer une variable Public Protect as boolean?

Et comment fonctionne cette ligne surtout à la fin : Protect = IIf(Protect, False, True)


Je ne voudrais pas abuser, mais pourrais tu donner quelques explications sur ces deux lignes ?


En toutes hypothèses, je renouvelle mes remerciements.

Christian
 

soft

XLDnaute Occasionnel
Resalut le fil,

Je ne connais pas de méthode permettant de savoir de façon sûre si une feuille est protégée ou pas, donc il faut conserver cette information.

La variable Protect prend la valeur False ou True et la conserve en dehors des procédures.

l'instruction IIf permet dans mon code d'inverser la valeur de cette variable.

... = IIf(condition:vrai ou faux, si vrai=faux, si faux=vrai)
 

Statistiques des forums

Discussions
312 668
Messages
2 090 739
Membres
104 643
dernier inscrit
adriano22