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 Sub

Hervé.

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é).
Rq: En mode "protégé" ces cellules devraient être incolores

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!

Rechercher des sujets similaires à "completer code vba"