Boucle VBA pour protéger plusieurs plages sur plusieurs feuilles

Bonjour,

Tout d'abord je vous prie de m'excuser pour ma demande car je suis à la recherche d'un code complet.

En effet, je suis complètement novice en VBA, je ne maîtrise pas l'anglais ni la programmation hors il semblerait de mes différentes recherches que je sois obligé de passer par un code VBA pour réaliser ce projet, excel ne me permettant pas de le faire (ou feuille par feuille...)

Je vous remercie par avance si vous avez un peu de temps à consacrer à mon problème...

J'ai un classeur contenant une soixantaine d'onglets.

Je souhaite protéger (sans le faire feuille par feuille ) les 40 premières feuilles (mais pas la première !). Ces 40 feuilles ont une structure identique et je souhaite protéger uniquement les cellules A1 à H31 et C34 à H56 des 40 feuilles (mais pas les autres cellules ni les autres feuilles )

L'idée est que même en mode "protéger", je puisse modifier les cellules qui ne sont pas censées être protégées. Cette protection me permet d'éviter de modifier par inadvertance les cellules que je veux protéger.

Il faut que je puisse protéger / déprotéger facilement. Le mot de passe peut être inscrit dans le code. L'idéal serait d'avoir un bouton sur ma première feuille qui me permet de protéger les cellules voulues sur les 40 onglets et un autre bouton qui me permette de déprotéger l'ensemble.

J'espère que ma demande est assez claire.

Merci à toutes les personnes qui pourront m'aider.

Bonjour Sandrinette, bonjour le forum,

Dans le premier onglet de ton classeur deux boutons Protéger et Déprotéger issus de la boîte à outils Contrôle ActiveX et leur code respectifs ci-dessous :

Private Sub CommandButton1_Click() 'Protéger
Dim I As Byte

For I = 2 To 41
    With Sheets(I)
        .Cells.Locked = False
        Application.Union(.Range("A1:H31"), .Range("C34:H56")).Locked = True
        .Protect
    End With
Next I
End Sub

Private Sub CommandButton2_Click() 'Déprotéger
Dim I As Byte

For I = 2 To 41
    With Sheets(I)
        .Cells.Locked = False
        .Unprotect
    End With
Next I
End Sub

Pour compléter mon message précédent, je suis certes à la recherche d'un code tout fait compte tenu de ma méconnaissance de VBA, mais voici tout de même ce que j'ai fait.

Pour déprotéger toutes mes cellules sur toutes les feuilles :

Sub DeprotectionToutesLesFeuilles()

Dim Feuil As Worksheet

For Each Feuil In Sheets

Feuil.Unprotect Password:="jojo"

Next Feuil

End Sub

Pour protéger les cellules (mais que sur la feuille en cours)

Sub verouillage_cellules()

Cells.Select

Selection.Locked = False

ActiveSheet.Unprotect

Range("A1:H31,C34:K56").Select

Range("A1").Activate

Selection.Locked = True

Selection.FormulaHidden = False

ActiveSheet.Protect Password:="jojo", DrawingObjects:=True, Contents:=True, Scenarios:=True

Range("A1").Select

End Sub

Mais je n'arrive pas à trouver comment faire pour sélectionner plusieurs onglets (et pas que la feuille en cours et pas tout le classeur)

Merci

Bonjour Sandrinette, bonjour le forum,

Dans le premier onglet de ton classeur deux boutons Protéger et Déprotéger issus de la boîte à outils Contrôle ActiveX et leur code respectifs ci-dessous :

Private Sub CommandButton1_Click() 'Protéger
Dim I As Byte

For I = 2 To 41
    With Sheets(I)
        .Cells.Locked = False
        Application.Union(.Range("A1:H31"), .Range("C34:H56")).Locked = True
        .Protect
    End With
Next I
End Sub

Private Sub CommandButton2_Click() 'Déprotéger
Dim I As Byte

For I = 2 To 41
    With Sheets(I)
        .Cells.Locked = False
        .Unprotect
    End With
Next I
End Sub

Merci ThauTheme, je fais les essais et reviens vers toi

Bonjour,

Avec le code donné par ThauThème, j'ai le message d'erreur suivant :

"Erreur d'exécution9"

et autre message "erreur d'exécution1004" "impossible de définir la propriété locked de la classe Range

C'est sans doute du B.A..BA mais c'est du charabia pour moi

Merci

Re,

Ce n'est pas du B.A. BA, c'est une erreur de ma part :

Le code corrigé :

Private Sub CommandButton1_Click() 'Protéger
Dim I As Byte 'déclare la variable I (Incrément)

Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
For I = 2 To 41 'boucle sur 40 onglets de 2 à 41
    With Sheets(I) 'prend en compte l'onglet de la boucle
        .Unprotect 'déprotège
        .Cells.Locked = False 'déverrouille toutes les cellules
        Application.Union(.Range("A1:H31"), .Range("C34:H56")).Cells.Locked = True 'verrouille les plages A1:H31 et C34:H56
        .Protect 'protège
    End With 'fin de la prise en compte de l'onglet de la boucle
Next I 'prochain onglet de la boucle
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
End Sub

Private Sub CommandButton2_Click() 'Déprotéger
Dim I As Byte 'déclare la variable I (Incrément)

Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
For I = 2 To 41 'boucle sur 40 onglets de 2 à 41
    With Sheets(I) 'prend en compte l'onglet de la boucle
        .Unprotect 'déprotège
        .Cells.Locked = False 'déverrouille toutes les cellules
    End With 'fin de la prise en compte de l'onglet de la boucle
Next I 'prochain onglet de la boucle
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
End Sub

Couleur dans la v02...

Bonjour Thauthème,

Un grand merci pour ces explications et pas à pas très détaillés et explicites.

Cela fonctionne très bien sur un fichier fictif crée pour l'occasion mais pas sur mon fichier d'origine.

"Erreur d'exécution 1004 : impossible de définir le propriété locked de la classe Range"

C'est un fichier de paie donc un peu délicat. Je vais vérifier page par page le verrouillage des cellules pour m'assurer qu'il n'y ait pas des verrouillages différents d'un onglet à un autre.

Si le problème perdure, est-ce que je peux vous transmettre mon fichier (en l'anonymisant évidemment) ?

Merci beaucoup

Re,

Si le problème perdure, est-ce que je peux vous transmettre mon fichier (en l'anonymisant évidemment) ?

C'est ce que tu aurais dû faire depuis le début. On aurait perdu moins de temps...

Bonjour,

Est-ce que ce ne serait pas dû au fait que certaines cellules sont fusionnées ?

Re,

Oui je pense ! Je m'étais posé la même question mais je n'avais pas le fichier pour le vérifier...

Bonjour,

C'était bien un problème de cellules fusionnées aux extrémités des plages considérées.

Un grand grand merci ThauThème pour ton aide et ton implication.

Rechercher des sujets similaires à "boucle vba proteger plages feuilles"