Ma Macro se bloque quand ma feuille et protéger

A

Archi

Guest
Re le forum,

Je viens de protéger ma feuille
Malheureusement en cliquant sur mon bouton macro présent dans cette feuille, celle-ci m'indique

"Erreur d'exécution '1004' La méthode sort de la classe Range à échoué"

Pourtant quand je dévérouille ma feuille, tout rentre dans l'ordre ????

Merci de votre aide
 
R

Roland

Guest
Salut Archi

C'est Archi simple car tu essaies sans doute d'accéder à ta feuille et comme tu la protéger Excel n'est pas d'accord il faut que tu supprime le verrouillage de la cellule dans Format Protection
En tout j'espère car sinon j'aurai .....
A+ Roland
 
@

@+Thierry

Guest
Bonsoir Archi, Roland, le Forum

Je vous conseille de regarder ce fil de presque un an où j'avais documenté la méthode de Protection avec "UserInterfaceOnly" :

=> Lien supprimé

Là est ta solution Archi, vu que tu veux manifestement faire appliquer un Sort par ta macro selon le message d'erreur...

Bonne Soirée
@+Thierry
 
A

Archi

Guest
Bonjour,

Merci à tous de votre aide

J'ai bien lu ton fil Thierry
Néamoins, étant novice dans le monde des macro, peux tu m'indiquer où placer: User inter faceonly

Dans ma macro de tri:

Sub Tri_Classement()
'
' Tri_Classement Macro
' Macro enregistrée le 13/01/2004 par Archi
'

'
Range("C6:O13").Select
Selection.Sort Key1:=Range("F3"), Order1:=xlDescending, Key2:=Range("O3") _
, Order2:=xlDescending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom
End Sub


Merci @+
 
@

@+Thierry

Guest
Re: Ma Macro se bloque quand ma feuille est protégée => UserInterFaceOnly !

Bonjour Archi, Roland, le Forum

La méthode Protect avec l'argument UserInterfaceOnly avec True, signifie (entre autre) que les macros (certaines instructions, pas toutes) peuvent s'exécuter, alors que le user ne peut faire les mêmes actions manuellement.

En conséquence, ce genre de méthode ne peut se paramétrer qu'au moment de la Protection de la Feuille. Sous entendu => Pas au moment du Run de la macro.

De plus, ce genre de méthode est "volatile", c'est à dire qu'il faut la ré-initialiser à chaque utilisation du classeur. En effet une fois le classeur fermé, l'argument UserInterfaceOnly se "volatilise".

En conclusion, il faut faire exécuter le code de paramétrage de Protection d'une (ou plusieurs) feuille(s) avec une macro évènementielle.

L'évènement WorkBook_Open semble bien convenir.

Pour rédiger une macro évènementielle, il faut l'écrire dans le Private Module de "ThisWorkBook". Pour ce faire :

1) Ouvrir VBE (Editeur Visual Basic) => Menu / Outils / Macro / Visual Basic Editor.. Ou raccourci clavier ALT + F11

2) Dans VBE ouvrir la fenêtre Explorateur de Projets => Menu / Affichage / Explorateur de Projets Ou raccourci clavier CTRL + R

3) Dans cet explorateur, expendre le "VBProjet(LeClasseurEnQuestion)"

4) Dans ce Projet expendre "Microsoft Excel Objects"

5) Double click sur "ThisWorkBook"

...à partir de là nous sommes dans le Private Module de "ThisWorkBook"

Ensuite une macro évènementielle qui se déclenchera à chaque ouverture du classeur se rédige comme suit :

Private Sub Workbook_Open()
MsgBox "Bonjour je suis le classeur " & ThisWorkbook.Name
End Sub
Ce code te dira bonjour à chaque ouverture en se présentant avec le nom du classeur... ;-) (sympa, non !! lol)

Voilà, donc dans ton cas, il faut écrire ceci en ajustant le nom de "TaFeuille" :

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

Avec ce code, ta macro "Tri_Classement" ci-dessus pourra fonctionner, alors que le User ne pourra pas modifier la Feuille en question.

Mise En Garde
Toutefois, si la protection des Macros est Haute, ou si le User les désactive, la protection n'aura pas lieu. Par conséquence il est aussi primordiale de procéder également à la protection de cette feuille manuellement (Menu / Outils / Protection) à ne faire qu'une fois.

Remarque Pour Mot de Passe
Si une protection par PassWord est nécessaire, alors il faudra modifier le code de WorkBook_Open également, voici comment le code se présente :

Private Sub Workbook_Open()
Sheets("TaFeuille").Protect Password:="TOTO", UserInterfaceOnly:=True
End Sub

Attention : veiller à synchroniser le Passworld rentré manuellement (Menu / Outils / Protection) avec celui du code. (Case Sensitive !)

Voilà, je pense que tout est clair maintenant !

Bon Dimanche à Tous et Toutes
@+Thierry
 
L

LaurentTBT

Guest
Salut à tous.

Quand je pense que j'ai écrit des dizaines et des dizaines de fois des lignes pour déprotéger mes feuilles en début de macro pour ensuite les reprotéger à la fin!

Et bien voilà encore une astuce qui va bien me servir.

Merci Thierry.

Bonne fin de week-end.
Laurent.
 
@

@+Thierry

Guest
Bonsoir Laurent, Archi, Roland

En outre il est aussi très interressant aussi d'utiliser UserInterfaceOnly dans le cas d"AutoFilter et autres TCD sur des feuilles protégées...

Remarque de Laurent Longre :

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)



Bonne Soirée
@+Thierry
 

Discussions similaires

Statistiques des forums

Discussions
313 137
Messages
2 095 626
Membres
106 308
dernier inscrit
F.DIAS