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 SubRien 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 SubDans 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.
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
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
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
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" :'(
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 Boolean4. 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 Sub5. 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



