Protection de feuille

frusciantefan

XLDnaute Junior
Bonjour et bonne année à tous !

Je reviens au front avec mon problème que je n'arrive pas à resoudre :

J'ai donc un fichier avec plusieurs onglets cachés. Il s'agit de formulaires. Les feuilles cachées sont protégées par un MDP, qui ne permet la saisie que de certaines cellules. (J'ai protégé toutes les cellules avec formules).

A partir de la, un menu principal a été crée afin de choisir directement le type de formulaire que l'on souhaite faire apparaitre.

Si je protege le menu principal, lorsque je choisi le formulaire qui me convient, un message d'erreur s'affiche : "La feuille n'existe pas" (message prealablement entrée dans la macro).
Je dois donc passer par une première de-protection pour que le choix soit possible.

Ensuite tout va très bien, les plages protégées restent protégées, on a pas d'action possible dessus.

Ce que je voudrais :

Je ne veux plus passer par l'étape de de-protection du menu principal. Or, si je supprime dans la macro la protection, mes plages protégées dans les feuilles cachées ne le sont plus !!!!
J'ai l'impression que lors de la copie dans le menu principal, le format de protection n'est pas pris en compte...

Voici un fichier exemple. (je n'ai laissé qu'un type de contrat sur les 3 pour ne pas trop allourdir le fichier).

MDP = abc

Si vous pouviez m'aider et m'expliquer le pourquoi ça ne fonctionne pas, je vous en serais très reconnaissant.

Ce fichier s'adresse a une population de personne, pas forcement très qualifiée sur Excel, d'ou ma volonté de supprimer cette étape de de-protection du menu principal!

Merci à vous!

FF
 

Pièces jointes

  • test Formulaire FE.zip
    35.6 KB · Affichages: 58

Excel-lent

XLDnaute Barbatruc
Re : Protection de feuille

Bonjour Frusciantefan et bonne année à toi et tes prôches,

Concernant ton soucis, pour afficher un onglet, tu n'as pas besoin de déprotéger tes onglets.

Voici ta macro corrigé et simplifié :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Erreur
If Not Target.Address = "$B$1" Then
    Exit Sub
    Else: Sheets(Range("B1").Value).Visible = True
End If
Exit Sub
Erreur:
MsgBox "La feuille " & Range("B1") & " n'existe pas !", vbOKOnly + vbExclamation, "FEUILLE INEXISTANTE"
End Sub

A quoi sert le contenu de ta cellule [K1], sans parler de ton tableau en [L1:M3]

Pour te simplifier la vie, pourquoi ne pas mettre la liste de tes formulaires (= nom d'onglets) directement dans la cellule [B1]?

Bonne journée

Cordialement
 

frusciantefan

XLDnaute Junior
Re : Protection de feuille

Merci Excel-Lent !

En revanche ta solution me fait rouvrir l'onglet et je veux que tout ce passe dans le menu principal. D'où les contenus du tableau K:M.
Et du coup, je voudrais conserver les protections dans le menu principal sans avoir a le proteger puis de-proteger!

Tu aurais une autre idée?
 

Excel-lent

XLDnaute Barbatruc
Re : Protection de feuille

Bonsoir Frusciantefan

frusciantefan à dit:
ta solution me fait rouvrir l'onglet et je veux que tout ce passe dans le menu principal

??? Pourtant ce n'est pas ce que j'ai compris de ton précédent message!

frusciantefan à dit:
Si je protege le menu principal, lorsque je choisi le formulaire qui me convient, un message d'erreur s'affiche : "La feuille n'existe pas" (message prealablement entrée dans la macro).

...

C'est bien que tu sélectionne ta feuille comportant le formulaire qui t'intéresse? Comment l'avoir et saisir dedans sans l'ouvrir???

C'est pas très clair!

Peux-tu être plus précis?

A te lire

Cordialement
 

frusciantefan

XLDnaute Junior
Re : Protection de feuille

Au temps pour moi, j'ai du mal m'exprimer ! Les onglets avec les formulaires doivent rester cachés. La selection dans le menu principale cellule B1, fait que l'onglet en question est copié, puis coller dans le menu principal. Ainsi on gere tout depuis un seul et même onglet !

Du coup comme le formulaire est copié, on peut saisir dedans directement dans le menu principal MAIS, j'ai ce probleme de protection de cellule qui ne fonctionne pas... :(
Je suis obligé de deverouiller le menu principal pour choisir le formulaire qui m'interesse sous peine d'avoir un message d'erreur. (Ce message d'erreur disparait lorsque la feuille est deverouillée).

J'espere que c'est plus clair?

Merci encore!!

FF
 

Excel-lent

XLDnaute Barbatruc
Re : Protection de feuille

Bonsoir Frusciantefan,

Concernant ton soucis, en effet, si tu agis sur un onglet protégé, tu es obligé de déprotéger ton onglet au préalable.

Mais bon, ce n'est pas bien méchant, tu rajoute cela au début de ta macro :

Code:
Sheet("Nom de ton onglet").Unprotect Password:="ton mot de passe"

Et cela à la fin de la macro :
Code:
Sheet("Nom de ton onglet").Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:="ton mot de passe"

... et le tour est joué ;)

Bonne soirée

A+
 
Dernière édition:

Pierrot93

XLDnaute Barbatruc
Re : Protection de feuille

Bonjour,

Concernant ton soucis, en effet, si tu agis sur un onglet protégé, tu es obligé de déprotéger ton onglet au préalable.
Petite précision au passage, vba peux agir sur feuille protégée, dès l'instant ou la protection est faite par le code, en utilisant l'argument "userinterfaceonly"...
Code:
Option Explicit
Private Sub Workbook_Open()
Feuil1.Protect "toto", userinterfaceonly:=True
End Sub
bonne journée
@+
 

frusciantefan

XLDnaute Junior
Re : Protection de feuille

Merci à tous pour vos precision, j'ai reussi a faire ce que je souhaite a 50%.

J'arrive a faire dérouler mes feuilles sans message d'erreur. Lorsque je verifies si mes cellules sont protégées après la copie, ça marche :)

en revanche, des que je tape quelque valeur que se soit dans n'importe qu'elle cellule, ça déprotege automatiquement la feuille. (sans avoir a rentrer le mdp...ce que je trouve bizarre...)

Voila le code, peut être y a t'il quelque chose qui cloche dedans?

Je veux donc pouvoir inserer des données dans les cellules de la feuille sans que celle ci ne se déprotège :

Private Sub Worksheet_Change(ByVal Target As Range)
Sheets("Menu Principal").Unprotect "toto"
If Not Target.Address = "$B$1" Then Exit Sub
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Formulaire = CStr(Range("k1"))
Sheets(Formulaire).Range("b1:Z500").Copy
Range("b4").PasteSpecial xlPasteAll
Range("B1").Select
Application.CutCopyMode = True
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Sheets("Menu Principal").Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:="toto"
End Sub
 
Dernière édition:

Excel-lent

XLDnaute Barbatruc
Re : Protection de feuille

Bonsoir Frusciantefan,

C'est normal, ton problème est dû à l'emplacement de ta ligne :

Code:
Sheets("Menu Principal").Unprotect "toto"

Tu l'as placé au mauvaise endroit!

Voici en Français ce que tu as écrit :
-> Déclencher la macro à chaque changement sur la feuille active
-> déprotéger la feuille "Menu Principal"
-> si la cellule modifiée n'est pas B1, arrêter la macro et rendre la main à l'utilisateur.
Oui mais voilà... tu n'as pas reprotégé ta feuille avant d'arrêter ta macro ;)
-> si la cellule modifiée est B1 alors faire ... et puis... et reprotéger la feuille (pour ce cas de figure, tu as bien pensé à reprotéger ta feuille ;))

Solution la plus simple :
Enlever la protection de ta feuille "Menu Principal", APRES avoir testé si la cellule modifié est bien B1

Ce qui donne ceci :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Target.Address = "$B$1" Then Exit Sub
Sheets("Menu Principal").Unprotect "toto"
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Formulaire = CStr(Range("k1"))
Sheets(Formulaire).Range("b1:Z500").Copy
...

Bonne continuation

A+
 

Pierrot93

XLDnaute Barbatruc
Re : Protection de feuille

Bonjour,

regarde si ceci peut t'aider :
Code:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Target.Address = "$B$1" Then Exit Sub
Application.EnableEvents = False
On Error GoTo fin
Sheets("Menu Principal").Unprotect "toto"
Sheets(CStr(Range("k1"))).Range("b1:Z500").Copy Range("b4")
fin:
Application.EnableEvents = True
Sheets("Menu Principal").Protect Password:="toto", DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub

par contre je ne sais pas trop dans quelle feuille se trouve / s'applique ton code ...

bonne journée
@+
 

frusciantefan

XLDnaute Junior
Re : Protection de feuille

Bon, j'ai du me servir du logiciel ACYD pour faire sauter le mdp qui bloquait tout mon menu principal.
Du coup le code d'Excel-lent fonctionne parfaitement, même si je rentre des infos dans les autres celulles, la protection reste active :)

Merci encore a vous tous, je pense que mon Excel à eut un gros bug !

FF
 

Discussions similaires

Réponses
2
Affichages
182

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 321
Messages
2 087 265
Membres
103 501
dernier inscrit
talebafia