Sécuriser des feuilles

Bonjour,

j'essaye de securiser mon classeur, en permettant a certains utilisateurs d'ouvrir certaines feuilles, j'ai le code suivant il marche bien:

Private Sub CommandButton2_Click()
Dim ws As Worksheet
Select Case Me.TextBox1.Value
     Case "MC2"
            For Each ws In ThisWorkbook.Worksheets
                    If ws.Range("B1").Value = "Pole Essais" Then
                           ws.Visible = True
                     Else
            For i = 1 To Sheets.Count
                     If Sheets(i).Name = "OUVERTURE" & Sheets(i).Name = "Liste Equipements" & Sheets(i).Name = "Liste_Equipement1" & Sheets(i).Name = "Liste_Habilitation" & Sheets(i).Name = "Liste_IT" & Sheets(i).Name = "Liste_PE" & Sheets(i).Name = "Liste_Personnes3" & Sheets(i).Name = "Tableau_ancienneté_NEXANS" Then
                            Sheets(i).Visible = True
                       End If
            Next
'                       Else: ws.Visible = False
                        End If
            Next
Case Else
            MsgBox ("veuillez entrer un mot de passe valide !")
    End Select
 ThisWorkbook.Application.Visible = True
End Sub

Le problème est dans la ligne:

 If Sheets(i).Name = "OUVERTURE" & Sheets(i).Name = "Liste Equipements" & Sheets(i).Name = "Liste_Equipement1" & Sheets(i).Name = "Liste_Habilitation" & Sheets(i).Name = "Liste_IT" & Sheets(i).Name = "Liste_PE" & Sheets(i).Name = "Liste_Personnes3" & Sheets(i).Name = "Tableau_ancienneté_NEXANS" Then

Ça m'ouvre seulement la feuille OUVERTURE et pas le reste, ou est mon erreur et merci.

Bonjour,

& sert à assembler des caractères

And sert à ajouter des conditions restrictives (toutes les conditions doivent être remplies)

Or sert à ajouter des conditions extensives (une des conditions doit être remplies)

Private Sub CommandButton2_Click()
Dim ws As Worksheet
Select Case Me.TextBox1.Value
     Case "MC2"
            For Each ws In ThisWorkbook.Worksheets
                    If ws.Range("B1").Value = "Pole Essais" Then
                           ws.Visible = True
                     Else        
                         If ws.Name <> "nom feuille devant être invisible" and ws.Name <> "nom feuille2 devant être invisible" Then
                            ws.Visible = True
                         End If
'                    Else: ws.Visible = False
                     End If
            Next ws
    Case Else
            MsgBox ("veuillez entrer un mot de passe valide !")
    End Select
 ThisWorkbook.Application.Visible = True
End Sub

Ici, je suppose que vous avez moins de feuilles invisibles que visibles.

Cordialement,

J'ai utilisé votre code mais toujours je réussi pas a ouvrir les autres feuilles

Parmi vos feuilles, lesquelles voulez-vous rendre visibles et invisibles ? Petite précision, la visibilité ne rend pas pour autant la feuille modifiable (ws.unprotect/ws.protect).

Et que voulez-vous faire concrètement avec les feuilles ? Dans quelle condition doivent elles être visibles ou non (B1 ?, nom feuille, autre ?)

Bonjour, dsl pour le retard

En gardant la condition sur la celulle B1, je voudrais que les feuilles : OUVERTURE, Liste_IT, Liste_PE, Liste_Habilitation, Liste_Personnes3, Liste_Equipement1,Tableau_Ancieneté soient tout le temps visibles

Bonjour,

Désolé d'insister, mais la condition pour qu'une feuille soit visible n'est pas claire. Pouvez-vous me confirmer que c'est bien ça :

Les feuilles OUVERTURE, Liste_IT, Liste_PE, Liste_Habilitation, Liste_Personnes3, Liste_Equipement1,Tableau_Ancieneté sont visibles et les feuilles dont B1 = "Pole Essais" sont visibles. Les autres ne le sont pas. Est-ce bien ça ?

Quels sont les noms des autres feuilles que celles ci-dessus ? Car s'il y en a peu, ça pourrait le coup de coder différemment.

Oui c'est bien ca, y en a une quarantaine de feuilles a cacher si on va introduire leur nom l'une après l'autre ca va prendre du temps.

D'accord, je comprends mieux.

Private Sub CommandButton2_Click()
Dim ws As Worksheet
Select Case Me.TextBox1.Value
     Case "MC2"
            For Each ws In ThisWorkbook.Worksheets
                    If ws.name = "OUVERTURE" or ws.name = "Liste_IT" or ws.name = "Liste_PE" or ws.name = "Liste_Habilitation" or ws.name = "Liste_Personnes3" or ws.name = "Liste_Equipement1" or ws.name = "Tableau_Ancieneté" or ws.Range("B1").Value = "Pole Essais" Then
                           ws.Visible = True
                    Else: ws.Visible = False
                     End If
            Next ws
    Case Else
            MsgBox ("veuillez entrer un mot de passe valide !")
    End Select
 ThisWorkbook.Application.Visible = True
End Sub

Il y a peut-être la possibilité de factoriser sur les noms de feuilles ou de simplifier si celles-ci se suivent. En tout cas, voici le principe : si l'une de ces conditions est remplie, ws est visible, sinon, ws est false.

A+,

Bonjour,

Je me demande si quelque chose comme ceci ne fonctionnerai pas...

Const NOMS_FEUILLES As String = "OUVERTUREListe_ITListe_PEListe_HabilitationListe_Personnes3Liste_Equipement1Tableau_Ancieneté"
If Instr(NOMS_FEUILLES, ws.Name) > 0 or ws.Range("B1").Value = "Pole Essais" Then

Merci Pijaku !

De rien 3GB.

Donc, ton code, devient :

Private Sub CommandButton2_Click()
Dim ws As Worksheet
Const NOMS_FEUILLES As String = "OUVERTUREListe_ITListe_PEListe_HabilitationListe_Personnes3Liste_Equipement1Tableau_Ancieneté"

Select Case Me.TextBox1.Value
     Case "MC2"
         For Each ws In ThisWorkbook.Worksheets
             ws.Visible = Instr(NOMS_FEUILLES, ws.Name) > 0 or ws.Range("B1").Value = "Pole Essais"
         Next ws
     Case Else
         MsgBox ("veuillez entrer un mot de passe valide !")
End Select
ThisWorkbook.Application.Visible = True
End Sub

Je pense qu'il vaut mieux laisser le If Else juste au cas où la valeur B1 d'une feuille visible changerait...

A bientôt,

Ca marche parfaitement merci bcp pour votre aide.
Rechercher des sujets similaires à "securiser feuilles"