Débogage si saisie sur feuille protégée.

Q

Quaisako

Guest
Bonsoir le Forum,

Est-t-il possible de saisir des données à l'aide d'une USF sur une feuille protégée?

J'ai essayé de déverrouiller les cellules concernées par la saisie, et de protéger la feuille après, mais ce n'est pas la soluce.

Merci d'avance

Quaisako
 
@

@+Thierry

Guest
BOnjour Quaisako

Quand tu protèges ta feuille précise l'argument : UserInterfaceOnly

Ainisi la protection n'est pas applicable aux macros qui peuvent "travailler" sur la feuille protégée avec cet argument...

BOnne JOurnée
@+Thierry
 
W

Willy

Guest
Bonsoir à tous,
Je viens de lire ce fil et ma question s'adresse à Thierry et concerne l'argument UserInterfaceOnly.
Je suis confronté au même pb que Quaisako et Je n'ai rien trouvé sur cet argument dans l'aide vba, cette fonction n'est pas docummentée ?
Peut tu nous en dire un peu plus et nottament comment l'applique t'on ?
merci à toi
Willy
 
@

@+Thierry

Guest
Tout sur le Mode Protect UserInterfaceOnly True

Bonsoir Willy

Oui Très Bonne Question et tu as raison, l'aide est assez mal documentée et les exemples sont inexistants...

Voici le code :

Sub ProtectionSaufMacro()
ActiveSheet.Protect UserInterfaceOnly:=True
End Sub

Que l'on peut aussi écrire comme ceci :

Sub ProtectionSaufMacro()
ActiveSheet.Protect , , , , True
End Sub


Remarque IMPORTANTE de l'aide :
Si vous appliquez la méthode Protect et que l'argument UserInterfaceOnly a la valeur True dans une feuille de calcul et que vous enregistrez le classeur, l'intégralité du classeur (et pas uniquement l'interface) sera protégée lors de la réouverture du classeur. Pour déprotéger la feuille de calcul mais activer à nouveau la protection de l'interface utilisateur après l'ouverture du classeur, vous devez à nouveau appliquer la méthode Protect avec l'argument UserInterfaceOnly affecté de la valeur True.


Par conséquent j'en conclus qu'il est impératif de lancer le code à l'ouverture du fichier par l'évènementielle de ThisWorkBook Workbook_Open()

Puisque tu veux des infos sur cette procédure voici l'intégralité d'un poste de Frédérique Sigonneau, qui lui même reprenait Laurent Longre :


Bonsoir,

Protège ta feuille par macro, en utilisant la méthode Protect avec le
paramètre UserInterfaceOnly à True. Ce paramètre autorise les
modifications *par du code VBA* de cellules protégées.

Ce paramètre doit être réinitialisé à chaque ouverture du classeur.
Utilise le donc dans la procédure Workbook_Open de ton classeur :

Worksheets("Feui1").Protect Password:="zaza", UserInterfaceOnly:=True

FS

PS. Ci-dessous, extraits de l'aide de LL au sujet de ce paramètre :

[Copie]
L'aide sur ce paramètre est très mal formulée. Elle ne devrait pas dire:
"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." Mais
plutôt quelque-chose comme: "Cet argument a la valeur True pour protéger
la feuille des actions effectuées par l'utilisateur, mais pas de celles
qui sont effectuées par macro. Si cet argument n'est pas spécifié, la
protection s'applique à la fois aux manipulations effectuées par
l'utilisateur et par des macros."

Autrement dit, par exemple, après :

Feuil1.Protect UserInterfaceOnly:=True

L'utilisateur ne pourra pas saisir une nouvelle valeur dans la cellule
A1 de Feuil1 si celle-ci est verrouillée. En revanche, une macro pourra
modifier la valeur de cette cellule (Feuil1.Range("A1") = 5, par
exemple) qu'elle soit verrouillée ou non, et sans déclencher de message
d'erreur ou d'avertissement.

Ca peut être très utile par exemple dans le cas d'un classeur avec des
feuilles protégées vis-à-vis de l'utilisateur, où toutes les
manipulations sont réservées à des procédures VBA.

D'autre part, UserInterfaceOnly permet également de protéger les
feuilles tout en autorisant sur ces feuilles les manipulations par
l'utilisateur de filtres, TCD ou symboles du plan (propriétés
EnableAutoFilter, EnablePivotTable et EnableOutlining des feuilles de
calcul). Il permet également d'interdire ou autoriser la sélection de
cellules verrouillées (EnableSelection).
**********
- Protection de toutes les feuilles du classeur :

Private Sub Workbook_Open()
Dim Wksht As Worksheet
For Each Wksht In Me.Worksheets
Wksht.Protect UserInterfaceOnly:=True
Next Wksht
End Sub

- Protection uniquement des feuilles "Tata", "Toto" et "Tutu" :

Private Sub Workbook_Open()
Dim Wksht As Worksheet
For Each Wksht In Me.Worksheets(Array("Toto", "Tata", "Tutu"))
Wksht.Protect UserInterfaceOnly:=True
Next Wksht
End Sub
[Fin copie]


Voilà comme çà c'est une lacune de l'aide comblée, mais attention tout de même car certains codes sont refusés quand même, donc il faut bien tester... (Par Exemple l'instruction "AddComment" est refusée)

Bonne Nuit
@+Thierry
 
Q

Quaisako

Guest
Bonsoir Thierry, bonsoir le Forum,

Merci Thierry, pour ta réponse (même si je n'avais pas percuté tout de suite quant à l'endroit où mettre "UserInterfaceOnly").

Avec ta doc jointe, ça passe mieux.

@+ Quaisako
 

Discussions similaires

Réponses
3
Affichages
522

Statistiques des forums

Discussions
314 019
Messages
2 104 632
Membres
109 091
dernier inscrit
Fbobo