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

Bonjour

Après de longue recherche n'aboutissant pas , je me tourne vers vous .

J'élabore un outils (professionnel) que je ne peux pas finaliser car je ne parviens pas à proteger des cellules tout en permettant d'afficher/masquer les collones concernée par ces cellules .

Pour masquer afficher mes colonnes j'utilise une macro via un bouton , ce bouton permets aussi ,simultanément d'afficher et masquer des onglets.

Quand je protège les cellules pour que mes collègues ne modifient pas les formules ou la mise en forme en utilisant loutil , mes bouton ne fonctionnent plus.

Voici la macro concernée :

Sub AfficherOpport1()
Range("f:f").EntireColumn.Hidden = False
Worksheets("Opportunité_verso").Visible = True
End Sub

Sub Masqueropport1()
Range("f:f").EntireColumn.Hidden = True
Worksheets("Opportunité_verso").Visible = False
End Sub

Sub AfficherOpport2()
Range("g:g").EntireColumn.Hidden = False
Worksheets("Opportunité2_verso").Visible = True
End Sub

Sub MasquerOpport2()
Range("g:g").EntireColumn.Hidden = True
Worksheets("Opportunité2_verso").Visible = False
End Sub

Sub AfficherFaisa1()
Range("h:h").EntireColumn.Hidden = False
Range("d:d").EntireColumn.Hidden = False
Worksheets("Faisabilité_versoBBC").Visible = True
End Sub

Sub MasquerFaisa()
Range("h:h").EntireColumn.Hidden = True
Range("d:d").EntireColumn.Hidden = True
Worksheets("Faisabilité_versoBBC").Visible = False
End Sub

Sub AfficherFaisa2()
Range("j:j").EntireColumn.Hidden = False
Worksheets("Faisabilité2_verso").Visible = True
End Sub

Sub MasquerFaisa2()
Range("j:j").EntireColumn.Hidden = True
Worksheets("Faisabilité2_verso").Visible = False
End Sub

Sub AfficherRea1()
Range("k:k").EntireColumn.Hidden = False
Worksheets("Réalisation_verso").Visible = True
End Sub

Sub MasquerRea1()
Range("k:k").EntireColumn.Hidden = True
Worksheets("Réalisation_verso").Visible = False
End Sub

Sub AfficherRea2()
Range("l:l").EntireColumn.Hidden = False
Worksheets("Réalisation2_verso").Visible = True
End Sub

Sub MasquerRea2()
Range("l:l").EntireColumn.Hidden = True
Worksheets("Réalisation2_verso").Visible = False
End Sub

Sub Affichertouteslesphases()
Range("e:e,d:d,f:f,g:g,h:h,i:i,j:j,k:k,l:l,m:m").EntireColumn.Hidden = False
Worksheets("Faisabilité_versoBBC").Visible = True
Worksheets("Faisabilité_versoDPEc").Visible = True
Worksheets("Faisabilité2_verso").Visible = True
Worksheets("Réalisation2_verso").Visible = True
Worksheets("Réalisation_verso").Visible = True
Worksheets("Opportunité2_verso").Visible = True
Worksheets("Opportunité_verso").Visible = True
Worksheets("Cloture_verso").Visible = True
End Sub

Rien de bien compliqué , je précise d'ailleurs que je ne suis pas un expert des macros.

J'ose imaginer qu'une macro pourrait me permettre de contourner ce problème de protection de cellules, mais je ne saurai pas la pondre.

Je m'en remets donc à vous , les geeks++ d'Excel .

PS : version utilisé : Microsoft® Excel® pour Microsoft 365 MSO (Version 2408 Build 16.0.17928.20114) 64 bits.

En vous remerciant d'avance pour le temps que vous voudriez bien m'accorder.

Bonjour

Lorsque vous postez un code pensez à utiliser les balises de code en cliquant sur l'icone </> disponible dans la barre de menu et en collant votre code dans le fenêtre. C'est plus lisible.
J'ai corrigé pour que vous voyiez


Concernant votre problème, je ne comprends pas trop votre demande.

Déjà un point que vous pouvez corriger. Vous n'avez pas besoin de deux codes pour afficher ou masquer
Exemple pour les deux premiers codes mis en un seul et qu'il vous suffit d'associer à un seul bouton

Sub AfficherMasquerOpport1()
Columns("f:f").Hidden = Not Columns("F:F").Hidden
Worksheets("Opportunité_verso").Visible = Not Worksheets("Opportunité_verso").Visible
End Sub

Dans ce code, il faudrait aussi savoir sur quelle feuille vous êtes lorsque vous affichez ou masquez la colonne F

Peut être voir votre fichier sans données confidentielles ...

Cordialement

Bonjour Dan

Merci pour ce retour rapide!

J'ai plusieurs boutons pour masquer des colonnes et simultanément une feuille , le bouton est lié à une macro (CF ci dessus)

Dans ces colonnes j'ai des cellules que je voudrais protéger pour ne pas permettre aux utilisateurs de modifier le contenu ou la mise en forme.

Pour protéger ces cellules j'utilise la méthode basic via l'onglet révision.

Le problème est que suite à cette protection de cellules , je ne peux plus utiliser mes boutons pour masquer et afficher mes colonnes.

j'aimerai pourvoir protéger certaines cellules tout en permettant de masquer et afficher les colonnes concernées via mes boutons.

Je manipule peut être mal l'onglet révision? Mais j'en doute; peut être qu'une macro pourrait me permettre de régler mon problème?

Je te joins le fichier (mdp :1234), la feuille concernée est nommé "recto" .

Merci beaucoup pour ton aide

cdt

Bonjour

Pour protéger ces cellules j'utilise la méthode basic via l'onglet révision.

Le problème est que suite à cette protection de cellules , je ne peux plus utiliser mes boutons pour masquer et afficher mes colonnes

Où je regarde mal mais là je ne vois pas d'onglet révision
Les boutons se trouvent sur un onglet Extraction Parc Loc

Crdlt


Edit : dans la feuille recto, je vois des boutons sur la droite de la feuille. Si je clique sur MasquerOpport1, cela masque la feuille et la colonne F de la feuille recto. Mais vos boutons sont toujours disponibles....

re,

Par '"Pour protéger ces cellules j'utilise la méthode basic via l'onglet révision." je veux dire que j'utilise l'option révision

puis protéger la feuille .

Je joint le tableur avec la cellule F40 de l'onglet " recto " protégée.

On peux voir que la cellule est bien protégée mais que mes macros ne fonctionnent plus

Mon but est de protéger certaine cellule tout en pouvant masquer/afficher les colonnes avec mes boutons macro.

cdt

Re

On peux voir que la cellule est bien protégée mais que mes macros ne fonctionnent plus

Ok je vois. Mais là c'est normal puisque votre feuille est protégée.
Faites ceci :

- Allez dans l'éditeur VBA
- Sélectionnez Thisworbook
- collez le code ci-dessous dans la fenêtre

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

- enregistrez le fichier et fermez-le
- Ré-ouvrez ensuite le fichier et faites un test
NB :
- La protection est à blanc dans le code
- Pour que cela fonctionne il faut que l'utilisateur active les macros bien entendu


Autre point :
je vous ai proposé de n'utiliser qu'un seul bouton pour les actions de mise en page. Est-ce que cela vous intéresse ou pas ?
Si oui, je vous donnerai le code car celui que je vous ai donné dans mon post précédent doit être complété notamment pour modifier le nom du bouton
Avantage : vous n'avez plus besoin que d'un seul bouton et de la moitié des macros

Bonjour merci pour ce retour

J'ai besoin, pour chaque colonnes, d'un bouton pour masquer et d'un bouton pour afficher. Ceci pour réaliser une mise en page selon les phases concernées. Mais merci pour la proposition.

Pour le code VBA que vous m'avez transmit , j'ai essayé de suivre votre méthode .

Je me suis rendu dans "développeur" puis "Visual basic" , une fenêtre s'est ouverte

une formule était déjà présente =

Function EstMasque(plage As Range) As Boolean
EstMasque = plage.EntireColumn.Hidden
End Function

Dans les menus déroulant , je n'avait pas le choix "Thisworbook" ; le choix " workbook open" , dans le menu déroulant de droite, est apparu après avoir collé votre formule .

J'ai rajouté votre formule en dessous de la formule existante , j'ai enregistrer , j'ai rouvert le tableur mais les boutons liés aux macros ne fonctionnent pas .

J'ai tenté en supprimant la formule déjà présente et en conservant votre formule , enregistrer , rouvrir, mais cela ne fonctionne pas .

J'imagine que j'ai loupé une étapes?

Bonne journée

Cordialement

Bonjour

Dans les menus déroulant , je n'avait pas le choix "Thisworbook" ; le choix " workbook open" , dans le menu déroulant de droite, est apparu après avoir collé votre formule .

Ce n'est pas dans le menu déroulant mais dans VBA project, fenêtre qui se trouve à gauche lorsque vous êtes dans l'éditeur VBA
Mais ce que vous avez fait est bon.
Une fois que le code en place, avez-vous enregistré et fermé d'abord le fichier (comme expliqué) ?

NB : lorsque vous postez un code, utilisez les balises de code en cliquant sur l'icone </> dans la barre de menu. Je vous l'ai déjà ecrit Mercredi.

Re,

Voici une capture dans VBA et la capture du message d'erreur quand je clique sur un bouton lié a une macro.

J'ai bien enregistré le tableur et fermé avant d'éssayé.

Cela fonctionne chez vous?

Cdt

capture mess erreur bouton macro capture vba

Cela fonctionne chez vous?

Oui. Mais là votre code est mal placé. Vous n'avez pas suivi ce que je vous ai écrit

Je ne vous ai pas écrit de mettre cela dans un module mais dans Thisworkbook

Pour voir Thisworkbook

image

J'ai besoin, pour chaque colonnes, d'un bouton pour masquer et d'un bouton pour afficher. Ceci pour réaliser une mise en page selon les phases concernées. Mais merci pour la proposition.

Oui j'ai compris cela. On peut faire avec un seul bouton qui fait les deux fonctions.
Là on a deux solutions.
1. Soit on peut modifier le nom du bouton qui passe de Afficher à Masquer et inversement. dans ce cas, on déprotège la feuille pendant l'exécution du code et on reprotège la feuille automatiquement.
2. Soit on nomme le bouton (Masquer-Afficher opport1) une fois pour toute et on ne déprotège jamais la feuille pendant l'exécution du code

A voir après si vous voulez

Re,

Désolé pour mon incompétence mais je ne trouve pas le chemin pour accéder à cette fenêtre où ce trouve le dossier Thisworkbook.

Soit on nomme le bouton (Masquer-Afficher opport1) une fois pour toute et on ne déprotège jamais la feuille pendant l'exécution du code ==> cette méthode utiliserai donc un bouton qui afficherai ou masquerai la colonne et permettrai ne conserver la protection? Si oui ca me va :)

Merci pour votre patience face à un noob :p

cdt

Désolé pour mon incompétence mais je ne trouve pas le chemin pour accéder à cette fenêtre où ce trouve le dossier Thisworkbook.

Une fois que vous êtes dans l'éditeur VBA, allez dans le menu "Affichage".
Là vous choisissez "Explorateur de Projet".
Vous verrez alors la fenêtre VBA Project (ci-dessous)

NB : Si vous voyez ceci, cliquez sur le + du dossier "Microsoft excel Objets" pour voir les objets feuilles et Thisworkbook dont je vous ai parlés dans mon poste précédent

image

Soit on nomme le bouton (Masquer-Afficher opport1) une fois pour toute et on ne déprotège jamais la feuille pendant l'exécution du code ==> cette méthode utiliserai donc un bouton qui afficherai ou masquerai la colonne et permettrai ne conserver la protection? Si oui ca me va :)

Exact
Dans les deux cas proposés, la feuille sera toujours protégée au final.
La seule différence est que la première solution permet de changer le nom du bouton (passer de Masquer à Afficher et inversément) et que pour se faire il faut déprotéger la feuille dans le code puis la reprotéger à la fin.

Re,

Ok, j'ai trouvé le dossier , j'ai copié la formule , j'ai enregistré , j'ai fermé , j'ai ouvert le tableur et j'ai un message d'erreur à l'ouverture qui me renvoi vers le débogage voir ci dessous

capture debogage capture mess erreur a l ouverture

re

Je me suis basé sur votre fichier posté dans lequel la feuille recto possède un mot de passe à blanc
Si ce n'est pas le cas sur votre fichier cela bugue évidemment
Dans ce cas, mettez votre vrai mot de passe de la feuille "recto" entre les guillemets dans le code

Re

Je n'avais pas renseigné de MDP pour la protection.

J'ai un MDP à l'ouverture "1234" , j'ai donc essayé en renseignant ce même MDP pour la protection puis j'ai renseigné ce MDP entre les guillemets , j'ai enregistré , fermé , ouvert et j'ai un message d'erreur "Impossible d'exécuter le code en mode arrêt" :'(

capture

Vérifiez que votre onglet est bien nommé "recto" et que vous n'avez pas un espace quelque part dans le nom
Exemple : un espace après la lettre o de recto

Je reviens pour la suite dès que vous avez contrôlé

Effectivement ... il y avait bien un espace après "recto" ;

Un grand merci !

Si je veux appliquer le même procédé sur l'onglet "Extraction parc loc" , je copie colle la formule sous celle existante en renommant " Recto" par "Extraction parc locatif" ?

Cdt

Si je veux appliquer le même procédé sur l'onglet "Extraction parc loc" , je copie colle la formule sous celle existante en renommant " Recto" par "Extraction parc locatif" ?

Oui.

Si ok on peut passer au point des boutons. Je vous donnerai ce qu'il faut faire pour le bouton Opport1. Dans l'attente de vous lire

Bonjour,

Oui ça sera bien plus pratique

Merci beaucoup

Cdt

Bonjour,

Oui ça sera bien plus pratique

Voici les étapes à suivre pour les boutons Afficher opport1 et masquer opport 1.

Je vous invite à suivre pas à pas sans sauter une étape

1. Allez le module 2
2. Désactivez ou supprimez les deux codes Sub AfficherOpport1() et Sub Masqueropport1()
3. Tout au dessus du module 2 (donc juste avant la ligne Sub masqueCol), ajoutez cette instruction

Option explicit
Dim onoff As Boolean

4. A la place des deux codes que vous avez supprimés au point 2, mettez le code ci-dessous

Sub AfficherMasquerOpport1()
Application.ScreenUpdating = False

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

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

5. Sur votre feuille "resto", renommez un des deux boutons. Par exemple nommez le bouton comme ceci --> Afficher - Masque Opport1
6. click droite sur le bouton puis choisir "affecter une macro" et choisir le nom du code repris au point 4
7. Supprimez le bouton qui ne sert plus

Important : avant d'exécuter la première fois le code, veuillez à ce que aucune colonne de votre feuille ne soit masquée et que toutes les feuilles de votre fichier soient visibles.

Si ok, je vous donnerai d'autres modifications à effectuer

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