Protéger et déprotéger une feuille

  • Initiateur de la discussion Jean-Marc
  • Date de début
J

Jean-Marc

Guest
Bonjour

Quelqu'un pourrait m'aider sur deux macros.

J'utilise Excel 97 en réseau, malheureusement je reçois toujour une erreur quand je lance ma macro.

"Erreur d'exécution '1004':
"La méthode Protect de la classe Worksheet a échoué"


' Protection automatique de toutes les feuilles d'un classeur
Private Sub Protéger_Click()
Dim nombre As Integer, i As Integer
nombre = ActiveWorkbook.Sheets.Count
Application.ScreenUpdating = False
For i = 1 To nombre
Worksheets(i).Protect Password:="advance"
Next i
End Sub


' Déprotection automatique de toutes les feuilles d'un classeur
Private Sub Déprotéger_Click()
Dim nombre As Integer, i As Integer
nombre = ActiveWorkbook.Sheets.Count
Application.ScreenUpdating = False
For i = 1 To nombre
Worksheets(i).Unprotect Password:="advance"
Next i
End Sub

Alors si quelqu'un aurait une idée, Welcome!!!

De plus je voudrais applique un code identique mais pour protéger et partager le classeur et le déprotéger.

Merci

Jean-Marc
 
J

Jacques

Guest
Bonsoir Jean-Marc
Avec Excel 2000, tes macros fonctionnent très bien.
Mais avec Excel 97 il me semble bien ( mais il faudrait que je puisse le vérifier) que l'on a un message d'erreur si on essaie de protéger une feuille qui est déjà protégée.
Vérifie, peut-être que le problème vient de là
Bonne soirée
 
J

Jacques

Guest
rebonsoir,
Essaie alors , dans ta macro de protection, de commencer par déprotéger toutes tes feuilles puis ensuite de les protéger.
En effet il me semble que l'erreur ne se manisfeste pas si on essaie de déprotéger une feuille qui n'est pas protégée.
Sinon, il te reste la solution de gérer les erreurs dans ta macro avec une instruction "on error goto ..."

Bonne chance
 
J

Jacques

Guest
Bonsoir Jean-Marc,

tu pourrais par exemple transformer ta macro comme suit :

Private Sub protéger_Click()
Dim nombre As Integer, i As Integer
nombre = ActiveWorkbook.Sheets.Count
Application.ScreenUpdating = False
For i = 1 To nombre
Worksheets(i).Unprotect Password:="advance"
Next i
On Error Resume Next
For i = 1 To nombre
Worksheets(i).Protect Password:="advance"
Next i
End Sub

L'instruction On error resume next permet de ne pas être arrêté par une erreur mais il ne résout pas le problème.
Pour avoir de plus amples explications sur la gestion des erreurs dans les macros, je te conseille (lorsque tu auras ajouté cette instruction dans ta macro) de sélectionner le mot error puis d'appuyer sur la touche F1 pour pouvoir consulter l'aide en ligne de Visual Basic.
Bon courage et bonne soirée