Protection de feuille + macro

jozerebel

XLDnaute Occasionnel
Bonjour à tous,

J'ai une feuille excel avec des macros associées:

Option Explicit

Sub cacher()
If Feuil1.Range("P1") <> 0 Then Rows("20:21").Hidden = True Else Rows("20:21").Hidden = False
End Sub


Sub pecattente()

If Feuil1.Range("P2") <> 0 Then Range("d18") = ""

End Sub

Sub pecobtenur()
If Feuil1.Range("P3") <> 0 Then Range("H18") = ""

End Sub

lorsque je souhaite protéger ma feuille, même en déprotégeant certaines cellules et lignes, mes macros ne fonctionnent plus et j'obtiens l'erreur 400.

Une aider pour pallier ce problème?

Merci pour vos réponses.
 

Pierrot93

XLDnaute Barbatruc
Re : Protection de feuille + macro

Bonjour,

pour que le code puisse être exécuté sur une feuille protégée, il faut que la protection soit faite via le code en utilisant l'argument "userinterfaceonly", ci-dessous un exemple à placer dans le module "thisworkbook", la procédure se déclenche à l'ouverture du classeur :

Code:
Option Explicit
Private Sub Workbook_Open()
Feuil1.Protect "toto", userinterfaceonly:=True
End Sub

Ceci évite d'avoir à déprotéger / protéger la feuille lors de chaque exécution...

bon après midi
@+
 

CBernardT

XLDnaute Barbatruc
Re : Protection de feuille + macro

Bonjour jozerebel,


Il est nécessaire de déprotéger en début de macro et de reprotéger en fin de macro.

Ici le mot de passe est *** (Trois étoiles). En cas de modification, changer le mot de passe dans les macros.

Essaye avec la syntaxe suivante !

Sub cacher()
With Feuil1
.EnableSelection = xlNoRestrictions
.Unprotect Password:="***"
If .Range("P1") <> 0 Then .Rows("20:21").Hidden = True Else .Rows("20:21").Hidden = False
.EnableSelection = xlNoSelection
.Protect Password:="***", Contents:=True, UserInterfaceOnly:=True, Scenarios:=True
End With
End Sub

Sub pecattente()
With Feuil1
.EnableSelection = xlNoRestrictions
.Unprotect Password:="***"
If .Range("P2") <> 0 Then .Range("d18") = ""
.EnableSelection = xlNoSelection
.Protect Password:="***", Contents:=True, UserInterfaceOnly:=True, Scenarios:=True
End With
End Sub

Sub pecobtenur()
With Feuil1
.EnableSelection = xlNoRestrictions
.Unprotect Password:="***"
If .Range("P3") <> 0 Then .Range("H18") = ""
.EnableSelection = xlNoSelection
.Protect Password:="***", Contents:=True, UserInterfaceOnly:=True,
End With
End Sub

Edit : Bonjour PIERROT93, on s'est croisé :)
 
Dernière édition:

Pierrot93

XLDnaute Barbatruc
Re : Protection de feuille + macro

Re, bonjour Bernard,

@Bernard
sauf erreur, si tu utilises l'argument "UserInterfaceOnly", il n'est pas nécessaire de déprotéger / protéger la feuille lors de l'exécution de code, il me semble que c'est fait pour ca.... Ou alors quelque chose m'échappe...
 

CBernardT

XLDnaute Barbatruc
Re : Protection de feuille + macro

Re,

J'ai peut-être mal compris le souhait de notre ami jozerebel :confused:

La définition de UserInterfaceOnly de l'aide VBA :

Argument de type Variant facultatif. Cet argument a la valeur True pour protéger l'interface utilisateur, mais pas les macros. Si cet argument n'est pas spécifié, la protection s'applique à la fois aux macros et à l'interface utilisateur.

Wait and see
 

jozerebel

XLDnaute Occasionnel
Re : Protection de feuille + macro

Hello,

oups....
Ca ne fonctionne pas. Peut être aurais-je du rajouter que certaines cellules doivent pouvoir être renseignées par l'utilisateur, d'autres doivent être bloquées.

Je retravaille mon fichier pour le poster. Ce sera plus compréhensible.

Merci à tous!
 

jozerebel

XLDnaute Occasionnel
Re : Protection de feuille + macro

Bonjour à tous,


J'essaye désespéremment les solutions des uns et des autres sans succès...

Voilà mes dernières macros:

Option Explicit

Sub cacher()
ActiveSheet.Unprotect "MDP"
If Feuil1.Range("P1") <> 0 Then Rows("20:21").Hidden = True Else Rows("20:21").Hidden = False
ActiveSheet.Protect "MDP", True, True, True


End Sub


Sub pecattente()
ActiveSheet.Unprotect "MDP"
If Feuil1.Range("P2") <> 0 Then Range("d18") = ""
ActiveSheet.Protect "MDP", True, True, True

End Sub

Sub pecobtenur()
ActiveSheet.Unprotect "MDP"
If Feuil1.Range("P3") <> 0 Then Range("H18") = ""
ActiveSheet.Protect "MDP", True, True, True

End Sub

A l'exécution, j'obtiens le message suivant:

"La cellule ou le graphique est protégé et en lecture seule. Pour modifier une cellule ou un graphique protégé, ôtez la protection avec la commande Oter la protection de la feuille (outil/protection). Vous devrez peut-être taper un mot de passe".

Des idées pour m'aider?

D'avance merci.
 

Pierrot93

XLDnaute Barbatruc
Re : Protection de feuille + macro

Bonjour,

aucun code de protection / déprotection dans ton fichier... As tu essayé le code que je te proposais le 30 à 14h42... Attention il y a lieu d'enregistrer et fermer ton classeur, et ce sera actif à la ré-ouverture.... Tu peux bien sur l'exécuter manuellement avant exécution de ton code...

bonne journée
@+

Edition : ce code est à placer dans le module "thisworkbook"
 

jozerebel

XLDnaute Occasionnel
Re : Protection de feuille + macro

Bonjour et merci pour votre attention à mon prb...

Malheureusement, votre code ne fonctionne pas . Quand je coche ma case, il me demande d'ôter la protection de la feuille...

Une idée.
 
Dernière édition:

Pierrot93

XLDnaute Barbatruc
Re : Protection de feuille + macro

Bonjour,

A priori les "case à cocher" de la barre d'outils formulaire que tu as créées réagissent bizarement... Essaye peut être d'en créer de nouvelles en laissant les propriétés par défaut...

A noter, il est préférable d'utiliser les contrôles de la "boîte à outils contrôles", surtout si tu utilises du vba, les objets de la barre à outils formulaire ne sont présents que pour assurer une compatibilité avec les versions antérieures.... Enfin c'est juste mon avis..

bonne journée
@+
 

Papou-net

XLDnaute Barbatruc
Re : Protection de feuille + macro

Bonjour,

A priori les "case à cocher" de la barre d'outils formulaire que tu as créées réagissent bizarement... Essaye peut être d'en créer de nouvelles en laissant les propriétés par défaut...

A noter, il est préférable d'utiliser les contrôles de la "boîte à outils contrôles", surtout si tu utilises du vba, les objets de la barre à outils formulaire ne sont présents que pour assurer une compatibilité avec les versions antérieures.... Enfin c'est juste mon avis..

bonne journée
@+

Bonjour à Tous,

RE : Pierrot93,

C'est également mon avis. Pour ma part, j'ai désactivé l'affichage de la barre d'outils "Formulaires" qui est un "boulet" à gérer en VBA.

Cordialement.
 

Discussions similaires

Réponses
2
Affichages
285

Statistiques des forums

Discussions
312 379
Messages
2 087 771
Membres
103 662
dernier inscrit
rterterert