Saut d'écran si Unprotect avec Excel 2013

  • Initiateur de la discussion Initiateur de la discussion jpoldeux
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

J

jpoldeux

Guest
Bonjour,
Une procédure est lancée depuis un fichier A pour activer ou désactiver la protection des feuilles d'un fichier B.
La méthode Unprotect ouvre les feuilles une à une, ce qui fait sauter l'écran de façon désagréable.
La méthode Protect ne présente pas cet inconvénient.

Sub Proteger()
Dim ws As Worksheet
With Workbooks("FichierB.xlsx")
For Each ws In .Worksheets
ws.Protect Password:="toto"
Next ws
End With
End Sub

Sub Deproteger()
Dim ws As Worksheet
With Workbooks("FichierB.xlsx")
For Each ws In .Worksheets
ws.Unprotect Password:="toto"
Next ws
End With
End Sub

J'ai essayé ScreenUpdating mais ça ne fonctionne pas. Un palliatif consiste à commencer par activer le fichier B, l'impression visuelle étant alors un peu meilleure.

Comment faire pour que Unprotect se comporte comme Protect ?

Jean
 
Re : Saut d'écran si Unprotect avec Excel 2013

bonsoir Jean,
peux-tu nous préciser ce qui ne fonctionne pas lorsque tu ajoutes l'instruction Application.ScreenUpdating = False
au début de ta macro Deproteger ?
le mieux serait d'ailleurs que tu joignes tes 2 fichiers (sans données confidentielles bien sûr) pour que nous puissions reproduire l'inconvénient que tu signales.
Bonne nuit.
Jacou
 
Re : Saut d'écran si Unprotect avec Excel 2013

Bonjour jpoldeux, jacou

Jacou, inutile de demander un fichier, son problème me parait simple et facile à reproduire 😉

En renvanche jpoldeux, chez moi "ScreenUpdating = False" fonctionen parfaitement 😕
Code:
Sub Deproteger()
  Dim ws As Worksheet
  Application.ScreenUpdating = False
  With Workbooks("FichierB.xlsx")
    For Each ws In .Worksheets
      ws.Unprotect Password:="toto"
    Next ws
  End With
  Application.ScreenUpdating = True
End Sub

A+
 
Re : Saut d'écran si Unprotect avec Excel 2013

Bonjour,
Merci à vous deux. J'avais essayé le ScreenUpdating de Bruno mais il ne fonctionne pas chez moi.
Et je ne m'explique pas pourquoi les deux méthodes se comportent différemment.
Ci-joints les fichiers que j'aurais déjà dû envoyer pour test.
A+
 

Pièces jointes

Re : Saut d'écran si Unprotect avec Excel 2013

Re,

Je comprends mieux 😉

Tu peux essayer ce code voir s'il te convient
L'astuce est de masquer le classeur pendant la déprotection et de le ré-afficher après
Petit souci résiduel, il faut ré-activer le classeur qui contient les macros sinon c'est le classeur B qui est affiché
Code:
Sub Deproteger()  Dim ws As Worksheet
  Application.EnableEvents = False
  Windows("FichierB.xlsx").Visible = False
  With Workbooks("FichierB.xlsx")
    For Each ws In .Worksheets
      ws.Unprotect Password:="toto"
    Next ws
  End With
  Windows("FichierB.xlsx").Visible = True
  ThisWorkbook.Activate
  Application.EnableEvents = True
End Sub

Maintenant te dire pour qu'elle raison ça fait ça... 😎

A+
 
Re : Saut d'écran si Unprotect avec Excel 2013

Merci Bruno,
C'est effectivement une amélioration : on ne voit plus que 2 sauts d'écran, en début et en fin de procédure.
J'ai testé ton code puis j'ai retiré les 2 lignes EnableEvents, ça marche aussi. Ces 2 lignes sont-elles vraiment nécessaires ?
A+
 
Re : Saut d'écran si Unprotect avec Excel 2013

Re,

Heuuu ben non, pourquoi ai-je mis ces 2 lignes icon_lol.gif

C'était pour le test, voir si cela changeait qq chose 😉

Au plaisir
 

Pièces jointes

  • icon_lol.gif
    icon_lol.gif
    707 bytes · Affichages: 39
  • icon_lol.gif
    icon_lol.gif
    707 bytes · Affichages: 39
Re : Saut d'écran si Unprotect avec Excel 2013

J'ai repris l'idée de Bruno de cacher l'action, d'une autre façon : en réduisant la fenêtre du fichier B. On n'a alors pas besoin de réactiver le fichier A. Un petit mouvement a lieu dans la colonne A de ce fichier. On peut le faire disparaître par ScreenUpdating.

Sub Deproteger()
Dim ws As Worksheet
Application.ScreenUpdating = False
Windows("FichierB.xlsx").WindowState = xlMinimized
With Workbooks("FichierB.xlsx")
For Each ws In .Worksheets
ws.Unprotect Password:="toto"
Next ws
End With
Application.ScreenUpdating = True
End Sub

Mais ma question initiale reste en suspens : pourquoi Unprotect ne se comporte-t-il pas comme Protect ?
A+
 
Re : Saut d'écran si Unprotect avec Excel 2013

Bonjour à tous

Peut-être une piste à suivre
Le fichier B est en *.xlsm ou *.xls
Dans son ThisWorkBook, on a:
Code:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Sh.Protect "toto"
End Sub

Code:
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
Sh.Unprotect "toto"
End Sub

Ou alors on inverse le raisonnement:
Le fichier B s'auto-protége à l'ouverture (toutes les feuilles)
Code:
Private Sub Workbook_Open()
Dim ws As Worksheet
Application.ScreenUpdating = False
For Each ws In ThisWorkbook.Worksheets
ws.Protect "toto"
Next ws
Application.ScreenUpdating = True
End Sub
Et quand on active une feuille elle se déprotège
Code:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Sh.Unprotect "toto"
End Sub
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

  • Question Question
Microsoft 365 Excel VBA
Réponses
5
Affichages
544
Réponses
7
Affichages
799
Réponses
4
Affichages
696
Réponses
7
Affichages
2 K
Réponses
1
Affichages
653
Réponses
0
Affichages
640
Retour