Compléter un code VBA
Bonjour,
J'utilise un code VBA pour verrouiller ou déverouiller l'ensembles des feuilles d'un fichier (27 au total) grâce à 2 raccourci (1 pour verrouiller et 1 pour déverrouiller) :
Sub WsLock(Optional Y)
Dim PWd$
'Protége ou déprotège toutes les feuilles
Application.ScreenUpdating = False
If IsMissing(Y) Then
For i = 1 To Worksheets.Count
Worksheets(i).Protect
[A1].Select
Next
Else
For i = 1 To Worksheets.Count
Worksheets(i).Unprotect
[A1].Select
Next
End If
End Sub
Sub deprotege()
WsLock 0
End Sub
Sub protege()
WsLock
End Sub
Ce code fonctionne très bien, néanmoins je souhaiterais le compléter et c'est là où je coince...
Lorsque je déverrouille l'ensemble des feuilles je souhaiterais en même temps et avec le même raccourci que la cellule J7 des feuilles 2 à 25 se colorent en rouge (pour avertir l'utilisateur). De même lorsque je verrouille les feuilles je souhaiterai que ces mêmes cellules se colorent en blanc.
En espérant que mes explications sont suffisamment claires...
Merci d'avance pour votre aide
Bonjour,
Comme ceci peut être ?
Sub WsLock(Optional Y)
Dim I As Integer
'Protége ou déprotège toutes les feuilles
Application.ScreenUpdating = False
If IsMissing(Y) Then
For I = 1 To Worksheets.Count
With Worksheets(I)
If I > 1 Then
.[J7].Interior.ColorIndex = 3 'rouge
End If
'la sélection d'une cellule ne peux
'se faire que si la feuille est active
.Select
.[A1].Select
.Protect
End With
Next
Else
For I = 1 To Worksheets.Count
With Worksheets(I)
.Unprotect
.[J7].Interior.ColorIndex = 0 'automatique
'la sélection d'une cellule ne peux
'se faire que si la feuille est active
.Select
.[A1].Select
End With
Next
End If
Application.ScreenUpdating = True
End SubHervé.
Bonjour et merci d'avoir pris le temps de me répondre.
J'ai essayé votre code mais cela ne fonctionne pas...
Je débute en VBA et je ne suis pas certain de faire les bonnes manipulations.
- Lorsque je remplace le code précédent par le votre et que je lance la macro, une erreur est détectée à partir de :
.[J7].Interior.ColorIndex = 3 'rouge
- D'autre part je ne trouve pas la partie du code qui permettrait de sélectionner les feuilles 2 à 25...???
- Faut-il que je conserve la fin du précédent code ?
Sub deprotege()
WsLock 0
End Sub
Sub protege()
WsLock
End Sub
- Dernière question : est-il possible avec ce code de faire en sorte que les formats de cellules puissent être modifiés lorsque je protège l'ensemble des feuilles ? car pour le moment je peux juste sélectionner les cellules verrouillées ainsi que les cellules déverrouillées.
Je me rends compte que ma demande est compliqué...
Je résume donc :
Je souhaiterai grâce à un raccourci clavier :
- protéger l'ensemble des feuilles d'un classeur tout en permettant de sélectionner les cellules déverrouillées ET les cellules verrouillées et de pouvoir modifier les formats sur les cellules déverrouillées
Puis avec un autre raccourci clavier :
- déprotéger l'ensemble des feuilles du même classeur
- Colorer en rouge la cellule J7 des feuilles 2 à 25 (pour avertir les utilisateurs que le classeur est déprotégé).
Merci d'avance et bonne journée
Merci d'avance
Bonjour
Un essai
Erreur : Code identique à celui de Theze
@farel6g8
Si tu as le message d'erreur c'est que tu relances la macro "protege" avec déjà les feuilles protégées
J'ai effectué quelques modifs et ça fonctionne à présent avec le code suivant (je n'avais pas déverrouillé les cellules J3:J9 sur toutes les feuilles) :
Sub WsLock(Optional Y)
Dim I As Integer
'Protége ou déprotège toutes les feuilles
Application.ScreenUpdating = False
If IsMissing(Y) Then
For I = 1 To Worksheets.Count
With Worksheets(I)
If I > 1 Then
.[J3:J9].Interior.ColorIndex = 0 'automatique
End If
'la sélection d'une cellule ne peux
'se faire que si la feuille est active
.Select
.[A1].Select
.Protect
End With
Next
Else
For I = 1 To Worksheets.Count
With Worksheets(I)
.Unprotect
.[J3:J9].Interior.ColorIndex = 3 'rouge
'la sélection d'une cellule ne peux
'se faire que si la feuille est active
.Select
.[A1].Select
End With
Next
End If
Application.ScreenUpdating = True
End Sub
Sub deprotege()
WsLock 0
End Sub
Sub protege()
WsLock
End Sub
...MERCI BEAUCOUP!
J'ai ajouté 2 boutons sur chaque feuilles pour lancer les macros "protéger" et "déprotéger", ça fonctionne très bien mais n'y aurait-il pas une solution pour qu'à la fin de la macro je me retrouve sur la feuille depuis laquelle je l'ai lancé ?
car pour le moment je me retrouve systématiquement sur la dernière feuille...et comme il y en a 27 c'est pas trop pratique de rechercher la bonne
Optimisation du temps...le seul mot d'ordre...
Bonsoir,
Tu rajoute :
Worksheets(1).Selectà la fin du code pour sélectionner la feuille que tu souhaite (ici la feuille ayant l'indice 1).
Tu devrais indenter ton code pour qu'il soit plus facile à lire (comme dans mon exemple), enfin, c'est mon avis.
Hervé.
Merci pour la réponse!
J'y penserai pour la présentation de mon prochain post...
Bonne nuit!