VBA Protection de plages de cellules sur différentes feuilles problème Range

Elle Woods

XLDnaute Nouveau
Bonjour à tous,

J'ai un problème avec le code VBA que je suis entrain de construire sur mon fichier.
Dans un premier temps je vous explique le fonctionnement de mon fichier :
Celui ci va servir pour la gestion de dossiers et tâches à réalisées par dossier. Pour chaque tâche à faire il y a un responsable, une date butoir, la validation d'un supérieur et la date de réalisation.

Mon fichier envoi déjà des emails pour les retards et calcul dans un tableau (feuille statistiques) les résultats de chaque responsable.
Pour que personne ne puisse modifier les dates butoirs (à part le supérieur hiérarchique) je souhaiterais protéger uniquement les colonnes T(date) et U(visa).

C'est pourquoi j'ai créer ce code à l'ouverture de mon classeur :
Code:
Private Sub Workbook_Open()



Application.Visible = False

For A = 1 To 16

Sheets(A).Cells.Select
Selection.Locked = False
Range("T:U").Select
Selection.Locked = True
Sheets(A).Protect Password:="toto"

Next A


Call Mail2
Call Remplir_tableau
Bonjour.Show

End Sub

Mais j'obtiens un code d'erreur avec la sélection "Range", j'ai déjà essayé plusieurs combinaison possible mais rien à faire...

ce problème arrive aussi pour l'Userform permettant de débloquer la sélection par un mdp

Code:
Private Sub Valider_Click()



If mdp = "toto" Then

Unload Me

For A = 1 To 16
    Sheets(A).Visible = True
    Sheets(A).Range("T16:U500").Select
    Selection.Locked = False
    Sheets(A).Unprotect Password:="toto"

Next A

End If

End Sub


Je cherche toujours une solution pour bloquer les colonnes T et U à la modification sauf pour un utilisateur qui aura la mode de passe et celui ci sera aussi le seul à pouvoir voir la feuilles statistiques.
Mais je suis un peu coincée...

Si quelqu'un a une idée pour me sortir de ce chantier je prends :)

Merci d'avance,
vous trouverez ci joint mon fichier avec tous les codes réalisés pour l'instant.

Je suis toute ouïe à vos suggestions.

Elle Woods

Edit : dans ThisWorkBook le code est précédé de ' pour permettre l'ouverture.. ^^
 

Pièces jointes

  • suivi dossier.xlsm
    133.4 KB · Affichages: 136
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re : [VBA] Protection de plages de cellules sur différentes feuilles problème Range

Bonjour Elle Woods et bienvenue, bonjour le forum,

Essaie comme ça :
Code:
Private Sub Workbook_Open()
Dim A As Byte

Application.Visible = False
For A = 1 To 16
    With Sheets(A)
        .Cells.Locked = False
        .Range("T:U").Locked = True
        .Protect Password:="toto"
    End With
Next A
Call Mail2
Call Remplir_tableau
Bonjour.Show
End Sub
Pour sélectionner une plage dans un onglet, il faut que l'onglet lui-même soit actif... Le code que je te propose ne sélectionne rien mais fait la même chose. Il faut éviter le plus possible ces Select qui ralentissent considérablement l'éxécution du code... Pour que ton code fontionne il faudrait rajouter :
Code:
Sheets(A).Select
en premier...
 
Dernière édition:

Elle Woods

XLDnaute Nouveau
Re : [VBA] Protection de plages de cellules sur différentes feuilles problème Range

Bonjour Robert,

Merci pour ta réponse, j'ai alors essayé de mettre le code :
Code:
Private Sub Workbook_Open()
Dim A As Byte

Application.Visible = False

For A = 1 To 16
Sheets(A).Select
    With Sheets(A)
        .Cells.Locked = False
        .Range("T:U").Locked = True
        .Protect Password:="toto"
    End With
Next A
Call Mail2
Call Remplir_tableau
Bonjour.Show
End Sub

J'espère avoir mis Sheets(A).Select au bon endroit, mais j'ai encore un message d'erreur lorsque j'arrive à Range..
J'ai bien regardé avec le pas à pas et c'est toujours à "range" que le problème se pose...
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : [VBA] Protection de plages de cellules sur différentes feuilles problème Range

Bonjour Elle Woods, bonjour le forum,

Je me suis mal exprimé je pense... Soit tu utilisais le code que je t'avais proposé, soit le tien en rajoutant le Sheets(A).Select.
Mais de toute manière ça va planter car tu demandes une boucle sur 16 onglets en faisant référence à leur numéro index A : For A = 1 To 16 et il n'y a pas 16 onglet (même si il y en a un qui se nomme Feuil16(Statistiques)). Il y en a 14 en tout dont deux que tu veux exclure. Quand A = 15 ça plante...
Essaie comme ça :
Code:
Private Sub Workbook_Open()
Dim A As Byte
Dim o As Object


Application.Visible = False
For A = 1 To Sheets.Count 'boucle sur tous les onglets
    On Error Resume Next 'gestion des erreurs (si une erreur est générée, passe à la ligne suivante)
    Set o = Sheets(CStr(A)) 'définit l'onglet o (si c'est onglet n'existe pas ça provoque une erreur)
    If Err <> 0 Then 'condition : si une erreur a été générée
        Err = 0 'annule l'erreur
        GoTo suite 'va à l'étiquette "suite"
    End If 'fin de la condition
    On Error GoTo 0 'annule la gestion des erreurs
    With o
        .Unprotect Password:="toto" 'déprotège (pour éviter le plantage d'une éventuelle protection antérieure)
        .Cells.Locked = False
        .Range("T:U").Locked = True
        .Protect Password:="toto"
    End With
suite: 'étiquette
On Error GoTo 0 'annule la gestion des erreurs
Next A
Call Mail2
Call Remplir_tableau
Bonjour.Show
End Sub
 

Elle Woods

XLDnaute Nouveau
Re : [VBA] Protection de plages de cellules sur différentes feuilles problème Range

Merci ça marche super bien!

Maintenant je vais essayer de comprendre ça pour l'appliquer à la dé-protection de mes onglets et si tout marche je mettrais le sujet en résolu, mais donc le doute je le garde encore un peu :)

Encore merci pour ton aide Robert,

Passes une bonne journée en espérant que j'arrive à me débrouiller toute seule :)
 

Elle Woods

XLDnaute Nouveau
Re : [VBA] Protection de plages de cellules sur différentes feuilles problème Range

Re bonjour Robert, le forum,

Alors j'ai bien regardé pour essayer de comprendre mais je ne comprend pas pourquoi tu mets :
Code:
Set o = Sheets(CStr(A))

Si j'ai tout bien compris, on va tester que le A soit valider est quand A = 14 ou A = 15, la macro reconnait l'erreur et va donc à "Next A".

et ensuite pour chaque feuille active = déverrouiller, verrouiller la sélection, protéger la sélection et mode de passe.

Je comprend aussi que c'est par "Set o = Sheets(CStr(A))" que l'onglet actif est défini mais je ne comprend pas pourquoi utiliser o et renvoyé une chaîne...

Merci pour vos lumières :)
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : [VBA] Protection de plages de cellules sur différentes feuilles problème Range

Bonsoir Elle Woods, bonsoir le forum,

Comme je t'ai dans dans mon post antérieur, il n'y a pas d'onglets 15 ou 16. Ce qui va provoquer une erreur ce sont les onglets Accueil et Statistique.Cette ligne "Set o = Sheets(CStr(A))" permet de provoquer ou pas une erreur en fonction du nom de l'onglet. Elle n'a que cette fonction. Du coup la gestion des erreurs permet de passer à l'onglet suivant.
Si tu avais placé l'onglet statistique en premier ou en second (Accueil / Statistiques / le reste... ou, Statistiques / Accueil / le reste...) on aurait pu utliser les index comme tu le proposait au début :
Code:
For A = 3 To 12
    With Sheets(A)
        .Unprotect Password:="toto" 'déprotège (pour éviter le plantage d'une éventuelle protection antérieure)
        .Cells.Locked = False
        .Range("T:U").Locked = True
        .Protect Password:="toto"
    End With
Next A
Mais si un utilisateur déplaçait ou rajoutait un onglet ça pouvait planter. La méthode que je t'ai proposée me parait plus fiable. Mais c'est vrai que je ne connais pas ton projet et je ne sais pas comment il va évoluer...
 
Dernière édition:

Elle Woods

XLDnaute Nouveau
Re : [Resolu] VBA Protection de plages de cellules sur différentes feuilles problème

Bonjour à tous,

Mon problème n'est ne fait plus résolu.
J'ai bien utiliser le code de Robert, et j'ai utilisé le même dans mon USF pour déverrouiller le programme.
Tout marchait comme sur des roulettes quand....

En voulant finir la mise en page de mon tableau j'ai voulu mettre des noms sur les onglets pour que l'on puisse plus facilement s'y retrouver et paffff.
Cela ne marche plus..
j'ai pensé à enlever la gestion des erreurs, ainsi tout fonctionnait jusqu'a ce que j'essaye de changer l'ordre des onglets en en faisant de nouveau et en supprimant... Excel à alors planté.

Si une âme charitable à une idée pour me dépatouiller.

Merci beaucoup

Elle Woods
 

Bebere

XLDnaute Barbatruc
Re : VBA Protection de plages de cellules sur différentes feuilles problème Range

bonjour Elle Woods,Robert
exclure les feuilles non concernées
exemple
Code:
Public Sub BoucleFeuil()
Dim Ws As Worksheet

For Each Ws In Worksheets
If Ws.Name <> "accueil" Or Ws.Name <> "Statistiques" Then 'à corriger acceuil
    With Ws
        .Cells.Locked = False
        .Range("T:U").Locked = True
        .Protect Password:="toto"
    End With

End If
Next Ws

End Sub
 

Discussions similaires