Protection cellules permettant tout de même de masquer et afficher colonne

Bonjour

Je reviens vers vous de retour de congés.

J'ai réussis les manipulations , cela fonctionne, génial!

J'aimerai que 2 colonnes ( la h et la d) se masquent/affichent simultanément, j'ai tenté 2 méthodes mais j'ai des messages d'erreurs

1 ere méthode=

Sub AfficherMasquerFaisaBBC()

Application.ScreenUpdating = False

With ActiveSheet
If onoff = True Then
.Columns("h:h").Hidden = False
onoff = False
Else:
.Columns("h:h").Hidden = True
onoff = True
If onoff = True Then
.Columns("d:d").Hidden = False
onoff = False
Else:
.Columns("d:d").Hidden = True
onoff = True
End If
End With

With Worksheets("Faisabilité_versoBBC")
.Visible = Not .Visible
End With
Application.ScreenUpdating = True
End Sub

J'ai essayé aussi comme ceci

Columns("h:h,d:d").Hidden = False

Pourriez vous me corriger svp?

Merci beaucoup

Bonne journée

Bonjour,

hum... 3ieme fois que je vous demande d'utiliser les balises de code lorsque vous postez un code sur le forum. Peut être que vous ne voulez pas en fait ?


J'aimerai que 2 colonnes ( la h et la d) se masquent/affichent simultanément, j'ai tenté 2 méthodes mais j'ai des messages d'erreurs

Votre code comme ceci dans ce cas

Sub AfficherMasquerFaisaBBC()

Application.ScreenUpdating = False
With ActiveSheet
    If onoff = True Then
        .Columns("h:h").Hidden = False
        .Columns("d:d").Hidden = False
        onoff = False
    Else:
        .Columns("d:d").Hidden = True
        .Columns("h:h").Hidden = True
        onoff = True
    End If
End With

With Worksheets("Faisabilité_versoBBC")
    .Visible = Not .Visible
End With
Application.ScreenUpdating = True
End Sub

NB : Moyennant une adaptation de code, sachez que l'on pourrait aussi changer le texte Afficher ou Masquer dans le bouton et inversement selon le cas

Si intérêt je peux vous amender les codes

Re,

Désolé , je ferai ce balisage de code pour la prochaine fois :)

"NB : Moyennant une adaptation de code, sachez que l'on pourrait aussi changer le texte Afficher ou Masquer dans le bouton et inversement selon le cas"

En fait on peut littéralement faire ce que l'on veut avec les VBA. Ca serait top oui !

Merci!

Cdt

Re,

Même chose pour les citations, vous avez l'icone " juste à droite de l'icone </> lorsque vous reprenez un texte venant d'un post


En fait on peut littéralement faire ce que l'on veut avec les VBA. Ca serait top oui !

Ok. La première chose à modifier est ce code qui se trouve dans THISWORKBOOK

Private Sub Workbook_Open()
Sheets("recto").Protect "1234", DrawingObjects:=False, UserInterfaceOnly:=True
End Sub

Une fois modifié, fermez le fichier puis ré-ouvrez le et dites moi si vous avez accès aux boutons. (Ne faites pas le test sur des macros où vous avez placé le ONOFF)

Re,

Les boutons sont bien présent après avoir modifié le code , enregistré le fichier et ré-ouvert

Oui les boutons sont présents mais avant d'aller plus loin est-ce que cela fonctionne quand la feuille est verrouillée ?

Bonjour

Oui ça fonctionne

Bonjour

Merci de la précision.
Remplacez le code que je vous ai donné ici au point 4 --> https://forum.excel-pratique.com/s/goto/1223710 par celui ci-dessous et associez le au bouton concerné

Sub AfficherMasquerOpport1()
Application.ScreenUpdating = False

With ActiveSheet
    With .Shapes(Application.Caller).DrawingObject
        If .Caption = "Afficher Opport 1" Then
            .Caption = "Masquer Opport 1"
        Else:
            .Caption = "Afficher Opport 1"
        End If
    End With
    .Columns("f:f").Hidden = Not .Columns("F:F").Hidden
End With

With Worksheets("Opportunité_verso")
    .Visible = Not .Visible
End With
Application.ScreenUpdating = True
End Sub

Veillez à ce que :
1. le nom du bouton concerné soit bien nommé --> "Masquer Opport 1"
2. Que toutes les colonnes soient affichées sur la feuille avant de cliquer sur le bouton

Faites un test et dites moi si ok

Ensuite je vous donnerai le code pour le bouton TOUT AFFICHER qui devra être modifié aussi

Rem : si vous conservez l'idée de changement de nom sur le bouton en utilisant le code ci-dessus il va falloir adapter tous les autres codes et aussi celui que je vous ai donné hier --> https://forum.excel-pratique.com/s/goto/1224982
Là je peux vous donner tous les codes à placer dans le module

Bonjour

J'ai effectué les manip et adapté le code pour toute les phases et cela fonctionne. Merci

J'aurai besoin de votre aide pour adapter le code du bouton tout afficher

Cdt

Bonjour

J'aurai besoin de votre aide pour adapter le code du bouton tout afficher

Ok. Tout dépend de ce que vous avez choisi comme code. Celui qui modifie le texte du bouton ou pas ?

Re,

Oui c'est bien ça

"Tout afficher" ==> "Tout masquer"

Cdt

Re,

Voici le code

Sub MasqueAffichertout()
Dim sh As shape

Application.ScreenUpdating = False
With ActiveSheet
    .Columns("D:M").Hidden = Not .Columns("D:M").Hidden 'masquer - afficher colonnes
    For Each sh In .Shapes
        With .Shapes(sh.Name) 'modifier texte bouton
            On Error Resume Next
            If .DrawingObject.Caption Like "*Afficher*" Then
                .TextFrame.Characters.Text = Replace(.TextFrame.Characters.Text, "Afficher", "Masquer")
            Else
                .TextFrame.Characters.Text = Replace(.TextFrame.Characters.Text, "Masquer", "Afficher")
            End If
        End With
    Next sh
End With

With Worksheets("Faisabilité_versoBBC")
    .Visible = Not .Visible
End With
With Worksheets("Faisabilité_versoDPEc")
    .Visible = Not .Visible
End With
With Worksheets("Faisabilité2_verso")
    .Visible = Not .Visible
End With
With Worksheets("Réalisation2_verso")
    .Visible = Not .Visible
End With
With Worksheets("Réalisation_verso")
    .Visible = Not .Visible
End With
With Worksheets("Opportunité2_verso")
    .Visible = Not .Visible
End With
With Worksheets("Opportunité_verso")
    .Visible = Not .Visible
End With
With Worksheets("Cloture_verso")
    .Visible = Not .Visible
End With

Worksheets("recto").Select
End Sub

Instructions à suivre :
- Associez le code au bouton "Tout Afficher et renommez-le en "Tout Masquer"
- Veillez à ce que les colonnes soient toutes affichées et toutes les feuilles affichées avant d'exécuter le code
- En haut du module où se trouve le code, mettez cette ligne juste en dessous de l'instruction "Option explicit" --> Option Compare Text"
- dans un message précédent (https://forum.excel-pratique.com/s/goto/1223710 - Point 3) je vous avais fait ajouté une ligne --> Dim Onoff as boolean. Vous pouvez la supprimer

Faites un test

Bonjour

Ca fonctionne , merci.

Pour être certain que les utilisateurs ne renomment pas les feuilles, ce qui ferait planter les macros, comment les protéger?

Aussi , comment empêcher l'accès aux codes?

Cdt

Bonjour

Pour être certain que les utilisateurs ne renomment pas les feuilles, ce qui ferait planter les macros, comment les protéger?

Très bonne idée.
Pour répondre à votre question, faites au plus simple. Remplacez simplement le nom de vos feuilles par le codeName de chaque feuille. C'est sans mot de passe et il y irait bien mal qu'un utilisateur pénètre dans l'éditeur pour aller modifier le nom en question.

Pour trouver le codeName de chaque feuille :
- allez dans l'éditeur VBA
- A gauche dans la fenêtre VBA Project, vous verrez le nom des onglets et à gauche le codeName à utiliser. (si vous ne voyez pas la fenêtre VBA Project --> allez dans Menu affichage --> Explorateur de projets)
- Dans les codes, remplacez le nom des onglets par le codename "Feuil...."

Exemple : pour la feuille nommée "recto"

presse papier02

Dans tous les codes où vous mentionnez --> Sheets(nom de l'onglet), il vous suffit de remplacer l'instruction par "Feuil...."

Pour la feuille "recto" qui reprend vos boutons et que dans les codes proposés, j'ai utilisé "Activesheet". Il vous suffit remplacer "Activesheet" par Feuil6

Si souci dites moi

Re,

J'ai suivis les instructions mais il semble que j'ai mal compris car cela masque et affiche bien la colonne mais pas la feuille associée .

J'ai remplacé le nom des onglets par Feuil6 , Feuil7 etc

Cela donne :

With Worksheets("Feuil6")

Cdt

Re ,

J'avais effectivement mal compris

J'ai remplacé " l'instruction entière" par Feuil6 et cela fonctionne même en renommant la feuille

Merci

J'ai remplacé le nom des onglets par Feuil6 , Feuil7 etc

Oui normal --> vous avez mal lu et appliqué ce que je vous ai écrit....
Dans tous les codes où vous mentionnez --> Sheets(nom de l'onglet), il vous suffit de remplacer l'instruction par "Feuil...."

Edit : ok. Désolé j'ai posté sans voir votre réponse...

Crdlt

Oubliez pas de cloturer le fil

Re,

Si je veux également protéger d'autre feuilles tout en permettant de masquer/afficher je modifie le code dans "thisworkbook" ? :

Private Sub Workbook_Open()
Sheets("recto").Protect "BDTDPL", DrawingObjects:=False, UserInterfaceOnly:=True
End Sub

Comme tel en rajoutant le nom de la feuille supplémentaire? :

Private Sub Workbook_Open()
Sheets("recto,planning de projet").Protect "BDTDPL", DrawingObjects:=False, UserInterfaceOnly:=True
End Sub

re

Vos codes et les balises .... déjà demandé deux fois https://forum.excel-pratique.com/s/goto/1223257 ...;et ici https://forum.excel-pratique.com/s/goto/1223473


Si je veux également protéger d'autre feuilles tout en permettant de masquer/afficher je modifie le code dans "thisworkbook" ? :

Oui. et vous utilisez le même code en ajoutant la ligne en supplément.
Donc pas deux codes OPEN identique mais 1 seul code OPEN avec les deux lignes

On pourrait aussi créer une variable qui reprend le mot de passe si vous avez trop de lignes à ajouter. Cela serait plus simple si par hasard vous vouliez le changer

J'ai procédé comme tel mais cela ne fonctionne pas :

Private Sub Workbook_Open()
Sheets("recto").Protect "BDTDPL", DrawingObjects:=False, UserInterfaceOnly:=True
Sheets("Extraction Parc Loc").Protect "BDTDPL", DrawingObjects:=False, UserInterfaceOnly:=True
End Sub

Pas de message d'erreur mais les boutons ne réagissent pas

Rechercher des sujets similaires à "protection permettant tout meme masquer afficher colonne"