OVH Cloud OVH Cloud

[VBA] Méthode Unprotect capricieuse

8 réponses
Avatar
CinéPhil
Bonjour,
L'instruction Activesheet.Unprotect fonctionne quand elle en a envie !
Malgré des recherches sur différentes sources, je n'ai pas trouvé pourquoi.

J'ai un bouton de commande sur ma feuille qui appelle :
Private Sub BoutonCreationCarton_Click()
'Crée un nouveau numéro de carton
ActiveSheet.Unprotect 'Déprotège la feuille

'Positionnement du curseur sur la première ligne vide
Call PremièreLigneVide
(...)
ActiveSheet.Protect
End Sub

La semaine dernière, çà bloquait sur cette instruction en me disant :
"Erreur d'exécution 1004, la méthode Unprotect de la classe Worksheet a
échoué."
Ce matin, sans avoir rien modifié, çà s'exécute normalement. Je transfère le
fichier à l'utilisateur qui le teste : 1er appel sans problème, 2nd appel
planté avec le même message ! Je teste à mon tour : idem !

J'ai essayé avec et sans mot de passe, avec Sheets("NomFeuille").Unprotect,
avec xlUserInterfaceOnly, c'est pareil !

Toute idée est bienvenue, il n'y a plus que çà qui bloque pour que je puisse
rendre mon application.

Merci d'avance.

8 réponses

Avatar
Michel Gaboly
Bonjour,

Juste une piste : ActiveSheet peut-être dangereux ; es-tu sûr que la
feuille à déprotéger est toujours au premier plan ?

Par ailleurs, pour appeler une routine quelconque, Call est superflu. Le
nom de la routine suffit.

Bonjour,
L'instruction Activesheet.Unprotect fonctionne quand elle en a envie !
Malgré des recherches sur différentes sources, je n'ai pas trouvé pourquoi.

J'ai un bouton de commande sur ma feuille qui appelle :
Private Sub BoutonCreationCarton_Click()
'Crée un nouveau numéro de carton
ActiveSheet.Unprotect 'Déprotège la feuille

'Positionnement du curseur sur la première ligne vide
Call PremièreLigneVide
(...)
ActiveSheet.Protect
End Sub

La semaine dernière, çà bloquait sur cette instruction en me disant :
"Erreur d'exécution 1004, la méthode Unprotect de la classe Worksheet a
échoué."
Ce matin, sans avoir rien modifié, çà s'exécute normalement. Je transfère le
fichier à l'utilisateur qui le teste : 1er appel sans problème, 2nd appel
planté avec le même message ! Je teste à mon tour : idem !

J'ai essayé avec et sans mot de passe, avec Sheets("NomFeuille").Unprotect,
avec xlUserInterfaceOnly, c'est pareil !

Toute idée est bienvenue, il n'y a plus que çà qui bloque pour que je puisse
rendre mon application.

Merci d'avance.



--
Cordialement,

Michel Gaboly
www.gaboly.com

Avatar
patrick
Bonjour,

j'ai eu ces problèmes mais avec
avec xlUserInterfaceOnly je pouvais travailler
sur les feuilles.
Par contre dans les jours précédents j'ai vu un
fil la dessus ou un contributeur parle
de mettre un do events apres chaque protect
et unprotect.
je n'arrive pas à trouver ce fil je vais continuer
les recherches
@+
patrick




"CinéPhil" a écrit dans le message news:

Bonjour,
L'instruction Activesheet.Unprotect fonctionne quand elle en a envie !
Malgré des recherches sur différentes sources, je n'ai pas trouvé
pourquoi.


J'ai un bouton de commande sur ma feuille qui appelle :
Private Sub BoutonCreationCarton_Click()
'Crée un nouveau numéro de carton
ActiveSheet.Unprotect 'Déprotège la feuille

'Positionnement du curseur sur la première ligne vide
Call PremièreLigneVide
(...)
ActiveSheet.Protect
End Sub

La semaine dernière, çà bloquait sur cette instruction en me disant :
"Erreur d'exécution 1004, la méthode Unprotect de la classe Worksheet a
échoué."
Ce matin, sans avoir rien modifié, çà s'exécute normalement. Je transfère
le

fichier à l'utilisateur qui le teste : 1er appel sans problème, 2nd appel
planté avec le même message ! Je teste à mon tour : idem !

J'ai essayé avec et sans mot de passe, avec
Sheets("NomFeuille").Unprotect,

avec xlUserInterfaceOnly, c'est pareil !

Toute idée est bienvenue, il n'y a plus que çà qui bloque pour que je
puisse

rendre mon application.

Merci d'avance.


Avatar
CinéPhil
J'ai essayé avec Sheets(1), c'est pareil ! Mon classeur ne contient
d'ailleurs qu'une seule feuille.
Petite curiosité supplémentaire : Un autre collègue a testé et n'a pas eu de
problème en Excel 2000. Cette application a été développée sous Excel 97-SR2
et plante avec cette même version. Il y a malheureusement encore beaucoup
d'utilisateurs potentiels avec Excel 97 dans ma boîte !


Bonjour,

Juste une piste : ActiveSheet peut-être dangereux ; es-tu sûr que la
feuille à déprotéger est toujours au premier plan ?

Par ailleurs, pour appeler une routine quelconque, Call est superflu. Le
nom de la routine suffit.

Bonjour,
L'instruction Activesheet.Unprotect fonctionne quand elle en a envie !
Malgré des recherches sur différentes sources, je n'ai pas trouvé pourquoi.

J'ai un bouton de commande sur ma feuille qui appelle :
Private Sub BoutonCreationCarton_Click()
'Crée un nouveau numéro de carton
ActiveSheet.Unprotect 'Déprotège la feuille

'Positionnement du curseur sur la première ligne vide
Call PremièreLigneVide
(...)
ActiveSheet.Protect
End Sub

La semaine dernière, çà bloquait sur cette instruction en me disant :
"Erreur d'exécution 1004, la méthode Unprotect de la classe Worksheet a
échoué."
Ce matin, sans avoir rien modifié, çà s'exécute normalement. Je transfère le
fichier à l'utilisateur qui le teste : 1er appel sans problème, 2nd appel
planté avec le même message ! Je teste à mon tour : idem !

J'ai essayé avec et sans mot de passe, avec Sheets("NomFeuille").Unprotect,
avec xlUserInterfaceOnly, c'est pareil !

Toute idée est bienvenue, il n'y a plus que çà qui bloque pour que je puisse
rendre mon application.

Merci d'avance.



--
Cordialement,

Michel Gaboly
www.gaboly.com




Avatar
CinéPhil
D'autre part, la suppression des call n'a rien changé :-(


Bonjour,

Juste une piste : ActiveSheet peut-être dangereux ; es-tu sûr que la
feuille à déprotéger est toujours au premier plan ?

Par ailleurs, pour appeler une routine quelconque, Call est superflu. Le
nom de la routine suffit.

Bonjour,
L'instruction Activesheet.Unprotect fonctionne quand elle en a envie !
Malgré des recherches sur différentes sources, je n'ai pas trouvé pourquoi.

J'ai un bouton de commande sur ma feuille qui appelle :
Private Sub BoutonCreationCarton_Click()
'Crée un nouveau numéro de carton
ActiveSheet.Unprotect 'Déprotège la feuille

'Positionnement du curseur sur la première ligne vide
Call PremièreLigneVide
(...)
ActiveSheet.Protect
End Sub

La semaine dernière, çà bloquait sur cette instruction en me disant :
"Erreur d'exécution 1004, la méthode Unprotect de la classe Worksheet a
échoué."
Ce matin, sans avoir rien modifié, çà s'exécute normalement. Je transfère le
fichier à l'utilisateur qui le teste : 1er appel sans problème, 2nd appel
planté avec le même message ! Je teste à mon tour : idem !

J'ai essayé avec et sans mot de passe, avec Sheets("NomFeuille").Unprotect,
avec xlUserInterfaceOnly, c'est pareil !

Toute idée est bienvenue, il n'y a plus que çà qui bloque pour que je puisse
rendre mon application.

Merci d'avance.



--
Cordialement,

Michel Gaboly
www.gaboly.com




Avatar
CinéPhil
J'ai essayé de mettre :
Application.EnableEvents = False
au début de la macro et son contraire (true) en fon de macro mais çà ne
change rien.

Quand j'ai essayé xlUserInterfaceOnly, je l'ai peut-être mal utilisé.
Peux-tu me tuyauter sur la manière de l'utiliser ?

Merci.


Bonjour,

j'ai eu ces problèmes mais avec
avec xlUserInterfaceOnly je pouvais travailler
sur les feuilles.
Par contre dans les jours précédents j'ai vu un
fil la dessus ou un contributeur parle
de mettre un do events apres chaque protect
et unprotect.
je n'arrive pas à trouver ce fil je vais continuer
les recherches
@+
patrick




"CinéPhil" a écrit dans le message news:

Bonjour,
L'instruction Activesheet.Unprotect fonctionne quand elle en a envie !
Malgré des recherches sur différentes sources, je n'ai pas trouvé
pourquoi.


J'ai un bouton de commande sur ma feuille qui appelle :
Private Sub BoutonCreationCarton_Click()
'Crée un nouveau numéro de carton
ActiveSheet.Unprotect 'Déprotège la feuille

'Positionnement du curseur sur la première ligne vide
Call PremièreLigneVide
(...)
ActiveSheet.Protect
End Sub

La semaine dernière, çà bloquait sur cette instruction en me disant :
"Erreur d'exécution 1004, la méthode Unprotect de la classe Worksheet a
échoué."
Ce matin, sans avoir rien modifié, çà s'exécute normalement. Je transfère
le

fichier à l'utilisateur qui le teste : 1er appel sans problème, 2nd appel
planté avec le même message ! Je teste à mon tour : idem !

J'ai essayé avec et sans mot de passe, avec
Sheets("NomFeuille").Unprotect,

avec xlUserInterfaceOnly, c'est pareil !

Toute idée est bienvenue, il n'y a plus que çà qui bloque pour que je
puisse

rendre mon application.

Merci d'avance.







Avatar
anonymousA
bonjour,

Enablevents = false ou true d'ailleurs ne change rien effectivement à
une affaire de protection de feuilles.
En dehors d'un bug particulier ou d'une config particulière d'Excel97
que je ne possède pas, il faut chercher ailleurs la source de ton
problème.
Enfin userinterfaceonly traduit simplement le fait que la protection
sera opérante pour un utilisateur (sur une action manuelle donc) mais
inopérante pour une macro tant que le classeur est ouvert et que une
première siginification de protection avec userinterfaceonly =true a
été réalisée.

A+
Avatar
CinéPhil
Merci à ceux qui ont répondu.
J'ai réolu mon problème en supprimant tous les Activesheet.Unprotect et
protect et en créant dans le classeur :
Sub Workbook_Open()
Sheets("MaFeuille").Protect Password:="MotPasse", UserInterfaceOnly:=True
End sub
Les colonnes interdites sont bloquées à la saisie par l'utilisateur mais les
macros peuvent feire tout ce qu'elles veulent.
Avatar
Ange Ounis
Content que tu aies trouvéune solution. Cependant, ce que tu décrivais
ressemblait fort à un bug connu d'Excel 97 concernant les CommandButton(s).
Si c'est bien par l'intermédiaire d'un CommandButton que tu lances ton code,
mets sa propriété TakeFocusOnClick sur False et ça devrait suffire à régler le
problème.

----------
Ange Ounis
----------

Merci à ceux qui ont répondu.
J'ai réolu mon problème en supprimant tous les Activesheet.Unprotect et
protect et en créant dans le classeur :
Sub Workbook_Open()
Sheets("MaFeuille").Protect Password:="MotPasse", UserInterfaceOnly:=True
End sub
Les colonnes interdites sont bloquées à la saisie par l'utilisateur mais les
macros peuvent feire tout ce qu'elles veulent.