Masquer les colonnes/protection VBA de plusieurs onglet

Bonjour,

Voilà je n'arrive pas à résoudre ce code depuis plusieurs jours, peut être une broutille mais pour moi Mont Blanc

Donc voilà j'utilise ce code pour supprimer la protection sur mes feuilles et aussi d'afficher les colonnes sur des feuilles.

Donc quand je cliquer sur le bouton Masquer les colonnes, la macro doit d'abord cacher les colonnes sauf sur une feuille 'Base' puis protéger les feuilles.

Quand je cliquer sur le bouton Afficher les colonnes, elle doit désactiver la protections des colonnes puis afficher les colonnes cacher.

Donc voici mon code que j'utilise mais il ne marche pas comme il faut (puis exécution de ce code est protégé via mdp)

 Sub Protect_Feuille()
      For i = 1 To Sheets.Count
    With Sheets(i)

   ' masquer les collones avant la protection des feuilles
   .Columns("B:B").EntireColumn.Hidden = True
   .Columns("E:F").EntireColumn.Hidden = True

   ' fin des masquages des collones
      .Protect Password:="mdp", DrawingObjects:=True, Contents:=True, Scenarios:=True
      .EnableSelection = xlUnlockedCells

    End With
  Next
   End Sub
Sub UnProtect_Feuille()
    For i = 1 To Sheets.Count
    With Sheets(i)
      .Unprotect Password:="mdp"
      ' afficher les colonnes
      .Range("B:B").EntireColumn.Hidden = False
      .Range("D:F").EntireColumn.Hidden = False

    End With
  Next

Donc comment je puise avoir le code qui cacher les colonnes sauf sur une feuille puis protéger toutes les feuilles, puis un autre code qui annule la protections des feuilles puis afficher toutes les colonnes.

Merci pour votre aide

Bonjour

Essaie ceci :

Sub Protect_Feuille()
Dim i As Integer
For i = 1 To Sheets.Count
    With Sheets(i)
        If UCase(Sheets(i).Name) <> "BASE" Then
   ' masquer les colonnes avant la protection des feuilles
            .Columns("B:B").EntireColumn.Hidden = True
            .Columns("E:F").EntireColumn.Hidden = True
   ' fin des masquages des colonnes
            .Protect Password:="mdp", DrawingObjects:=True, Contents:=True, Scenarios:=True
            .EnableSelection = xlUnlockedCells
        End If
    End With
Next
End Sub

Si ok, clique sur le v vert à coté du bouton EDITER pour clôturer le fil lors de ta réponse

Crdlt

Ok merci pour la réponse j'y vais tester par contre comment je puisse afficher à nouveaux les colonnes dans ce code

[code

Sub UnProtect_Feuille()

For i = 1 To Sheets.Count

With Sheets(i)

.Unprotect Password:="mdp"

End With

Next

Columns("B:B").EntireColumn.Hidden = False

Columns("D:F").EntireColumn.Hidden = False

End Sub][/code]

Puis l'integer ces code pour affichage/protection dans le code qui me affiche/masque les onglets qui est :

Private Sub CB_1_Click()
    Dim i As Integer, MesSht As String, TSht() As String
  ' Tableau des feuilles à AFFICHER/CACHER séparée par des virgule
  MesSht = "Feuil1, Feuil2"
  TSht = Split(MesSht, ",")
  '
  If CB_1.Caption = "MOI" Then
    ' Demander le mot de passe
    USF_Mdp.TextBox1.Value = ""
    USF_Mdp.Show
    If FlgOk = False Then
      MsgBox "Mot de passe érroné !"
      Exit Sub
    End If
    ' Si OK, masquer les feuilles
    For i = 0 To UBound(TSht)
      Sheets(TSht(i)).Visible = xlSheetVisible
      'cacher les colonne

    Next i

    'unproteger les feuilles
UnProtect_Feuille
    CB_1.Caption = "QUITER MOI"
    CB_1.BackColor = 255
  Else
    For i = 0 To UBound(TSht)
      Sheets(TSht(i)).Visible = xlSheetVeryHidden

 ' proteger les feuilles
     Protect_Feuille
    Next i
    CB_1.Caption = "MOI"
    CB_1.BackColor = 32768
  End If

End Sub

J'ai essaye le code mais j'ai cette erreur : erreur d’exécution 1004

Impossible de définir la propriété Hidden de la classe Range

Avant exécution du code tous les onglets du classeur n’ont pas été protéger et tous les colonnes ont été affiché, mais j'y vais regarde ce qui se passe exactement

re

Ok merci pour la réponse j'y vais tester par contre comment je puisse afficher à nouveaux les colonnes dans ce code

Ben suffit de faire de même dans le sens inverse

Sub UnProtect_Feuille()
Dim i As Integer
For i = 1 To Sheets.Count
    With Sheets(i)
        If UCase(.Name) <> "BASE" Then
            .Unprotect Password:="mdp"
            .Columns("B:B").EntireColumn.Hidden = False
            .Columns("D:F").EntireColumn.Hidden = False
        End If
    End With
Next
End Sub

Cordialement

Merci pour la réponse Dan,

Par contre comme j’appelle ces deux code dans un autre code qui me sert de masquer les feuilles, je ne sais pas où je dois insérer le code pour appeler le code protect Feuil

CB_1.Caption = "QUITER MOI"
    CB_1.BackColor = 255
  Else

'ici    Protect_Feuille
    For i = 0 To UBound(TSht)
      Sheets(TSht(i)).Visible = xlSheetVeryHidden

 'ou ici    Protect_Feuille
    Next i
    CB_1.Caption = "MOI"
    CB_1.BackColor = 32768
  End If

Puis actuellement j'utilise un If CB_1.Caption = "moi" Then pour avoir deux Label sur mon bouton quand je cliquer sur moi et quand je sort de moi.

Par contre comment on fait si on veux mettre deux images différent qui exécutent deux différent code et si une images est affiche l'autre ne l'est pas.


C'est bon dans mon fichier test j'ai mis où est ce qu'il faut et cela marche par contre comment je puisse avoir des images au lieu de bouton, sachant une image une macro puis elle se cache et l'autre est afficher puis etc...

Ci joint fichier exemple,

RE

Je ne te suis plus trop là entre ce que tu demandes ici dans ton courrier et ce qui est écrit dans la feuille Accueil

Tu as un bouton "Quitte moi" qui masque des colonnes dans chaque feuille de ton fichier sauf sur la feuille Accueil. Une fois les colonnes masquées ton bouton change de non.

Que cherches tu à faire ? Remplacer ton bouton par deux boutons avec une image ? Si oui, vas par le menu Insertion --> Image, choisis ton image et refais de même pour la deuxième image. Une fois sur ta feuille, clique droite sur chaque image puis attribue lui une macro

Ton code Private Sub CB_1_Click() ne servira plus dans ce cas.

Crdlt

Merci Dan

Pour ton aide et oui avec ton aide et ce que j'ai trouve sur le net et ce que j'ai tester, j'ai la macro qui cache les colonnes, verrouilles les cellules puis masquer les feuilles. Donc à l’ouverture j'ai juste la feuille l’accueil avec 3 autres feuilles.

En fait j'ai placer mal ce code dans un autre code qui masquer mes feuilles. Donc actuellement j'ai un code qui masques feuilles puis à l’intérieur j’appelle ces deux code.

Merci pour ton aide

Rechercher des sujets similaires à "masquer colonnes protection vba onglet"