Protection avec condition

  • Initiateur de la discussion Initiateur de la discussion Cobbalt
  • 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 !

C

Cobbalt

Guest
Bonjour,

Je suis face à un petit problème sur mon fichier, je vous l'explique de cette façon :

A l'ouverture du fichier
SI cellule C45 de la feuille 1 est vide
ALORS protection de toutes les feuilles du fichier, en laissant certaines cellules modifiables (je les ai déjà déterminées)
SINON
SI cellule C45 de la feuille 1 non vide
ALORS protection de toutes les feuilles du fichier, mais aucune cellule ne peut être modifiée. (cependant les boutons qui contiennent des macros comme : "Imprimer la feuille" doivent être disponible...)
FIN SI

Voila je sais le faire comme ca, mais pas en langage de programmation 🙁

J'ai seulement réussi à faire ce bout de code
Code:
Private Sub Workbook_Open()
For Each sh In Sheets
    sh.Protect "toto"
Next
End Sub

Merci pour votre aide

Cordialement.

Damien
 
Re : Protection avec condition

Erf, j'ai encore un petit soucis la du coup. En fait, peu importe si la cellule C45 est vide ou pas, la totalité de la feuille est verrouillée, même les cellules que j'ai déclaré dans la macro.

Code:
Private Sub Workbook_Open()
Dim CellulesVariables As Range, c As Range, Verrouille As Boolean, sh As Object
For Each sh In Sheets
    sh.Protect Password:="toto", UserInterfaceOnly:=True
Next sh
Set CellulesVariables = Union(Range("e2"), Range("f5"), Range("g6"), Range("g2"), Range("b4"), Range("d4"), Range("a5"), Range("c5"), Range("g5"), Range("b6"), Range("d7"), Range("d8"), Range("c10:c19"), Range("b22:c28"), Range("e22:h28"), Range("g35:h39"), Range("c44"), Range("f44"), Range("b51"), Range("e11"))
Verrouille = True
If Feuil1.Range("C45") <> "" Then Verrouille = True
    For Each c In CellulesVariables
        If c.MergeCells Then c.MergeArea.Locked = Verrouille Else c.Locked = Verrouille
    Next c
End Sub

Private Sub Workbook_Close()
    Dim CellulesVariables As Range
Set CellulesVariables = Union(Range("e2"), Range("f5"), Range("g6"), Range("g2"), Range("b4"), Range("d4"), Range("a5"), Range("c5"), Range("g5"), Range("b6"), Range("d7"), Range("d8"), Range("c10:c19"), Range("b22:c28"), Range("e22:h28"), Range("g35:h39"), Range("c44"), Range("f44"), Range("b51"), Range("e11"))
    For Each c In CellulesVariables
        c.Locked = True
    Next c
End Sub
 
Re : Protection avec condition

Re,

essaye en modifiant comme suit :
Code:
Option Explicit
Private Sub Workbook_Open()
Dim CellulesVariables As Range, c As Range, Verrouille As Boolean, sh As Object
For Each sh In Sheets
    sh.Protect Password:="toto", UserInterfaceOnly:=True
Next sh
Set CellulesVariables = Union(Range("e2"), Range("f5"), Range("g6"), Range("g2"), Range("b4"), Range("d4"), Range("a5"), Range("c5"), Range("g5"), Range("b6"), Range("d7"), Range("d8"), Range("c10:c19"), Range("b22:c28"), Range("e22:h28"), Range("g35:h39"), Range("c44"), Range("f44"), Range("b51"), Range("e11"))
If Feuil1.Range("C45") <> "" Then Verrouille = True
    For Each c In CellulesVariables
        If c.MergeCells Then c.MergeArea.Locked = Verrouille Else c.Locked = Verrouille
    Next c
End Sub
 
Re : Protection avec condition

Bon en fait j'ai un nouveau problème 😡
En ouvrant le fichier sur un autre PC qui n'a pas activé les macros par défaut, il peut tout modifier, sans avoir besoin de mot de passe ou quoi..

Est-ce la macro de fermeture du fichier qui ne marche pas ? ou est-ce qu'on ne peut rien faire si les macros ne sont pas actives ?

Code:
Private Sub Workbook_Close()
    Dim CellulesVariables As Range
Set CellulesVariables = Union(Range("e2"), Range("f5"), Range("g6"), Range("g2"), Range("b4"), Range("d4"), Range("a5"), Range("c5"), Range("g5"), Range("b6"), Range("d7"), Range("d8"), Range("c10:c19"), Range("b22:c28"), Range("e22:h28"), Range("g35:h39"), Range("c44"), Range("f44"), Range("b51"), Range("e11"))
    For Each c In CellulesVariables
        c.Locked = True
    Next c
End Sub
 
Dernière modification par un modérateur:
Re : Protection avec condition

Bonjour Cobalt,
Dans Sub Workbook_Close, j'aurais ajouté une protection de la feuille, au cas où
A+

Bonjour Pierrot
J'ai admiré ta façon de jouer avec les cellules fusionnées, je ne suis jamais à l'aise avec.
Cordialement
 
Re : Protection avec condition

En essayant avec ca, si les macro ne sont pas activé, le mec peut tout faire..
Code:
Private Sub Workbook_Close()
For Each sh In Sheets
    sh.Protect Password:="toto", UserInterfaceOnly:=True
End Sub
J'ai même essayé cette macro
Code:
Sub mail_commercial()
'
' mail_commercial Macro
'Private Sub Workbook_Close()
For Each sh In Sheets
    sh.Protect Password:="toto", UserInterfaceOnly:=True
    Next
    Application.Dialogs(xlDialogSendMail).Show
End Sub

Rien à faire, je suis décidément trop nul en VBA...
 
Re : Protection avec condition

Re,

il faut bien sur que quand tu distribues ton fichier, que les feuilles et les cellules soient protégées / vérouillées au préalable...
Justement cette macro n'est pas sensé le faire ??
Code:
Sub mail_commercial()
'
' mail_commercial Macro
'Private Sub Workbook_Close()
For Each sh In Sheets
    sh.Protect Password:="toto", UserInterfaceOnly:=True
    Next
    Application.Dialogs(xlDialogSendMail).Show
End Sub
 
Re : Protection avec condition

Bon j'ai cette macro, qui normalement devrait verouiller le fichier avant l'envoi par mail. mais la personne qui recoit le mail peut tout modifier vu qu'elle n'a pas activé les macro..
Que dois-je faire ??
La je comprend vraiment plus.. Je pensais avoir tout bien fait..
Code:
Sub mail_commercial()
'
' mail_commercial Macro
'Private Sub Workbook_Close()
    Dim CellulesVariables As Range, c As Range, Verrouille As Boolean, sh As Object
Set CellulesVariables = Union(Range("e2"), Range("f5"), Range("g6"), Range("g2"), Range("b4"), Range("d4"), Range("a5"), Range("c5"), Range("g5"), Range("b6"), Range("d7"), Range("d8"), Range("c10:c19"), Range("b22:c28"), Range("e22:h28"), Range("g35:h39"), Range("c44"), Range("f44"), Range("b51"), Range("e11"))
    For Each c In CellulesVariables
        If c.MergeCells Then c.MergeArea.Locked = Verrouille Else c.Locked = Verrouille
    Next
    Application.Dialogs(xlDialogSendMail).Show
End Sub
 
Dernière modification par un modérateur:
Re : Protection avec condition

Re,

sans doute les cellules fusionnées...
Code:
Private Sub Workbook_Close()
Dim CellulesVariables As Range, c As Range, Verrouille As Boolean, sh As Object
For Each sh In Sheets
    sh.Protect Password:="toto", UserInterfaceOnly:=True
Next sh
Set CellulesVariables = Union(Range("e2"), Range("f5"), Range("g6"), Range("g2"), Range("b4"), Range("d4"), Range("a5"), Range("c5"), Range("g5"), Range("b6"), Range("d7"), Range("d8"), Range("c10:c19"), Range("b22:c28"), Range("e22:h28"), Range("g35:h39"), Range("c44"), Range("f44"), Range("b51"), Range("e11"))

    For Each c In CellulesVariables
        If c.MergeCells Then c.MergeArea.Locked = True Else c.Locked = True
    Next c
End Sub
 
Re : Protection avec condition

Bon, alors en fait voila, quand je ferme le fichier et que je l'envoi par mail, ca verrouille bien le fichier, même si la personne n'a pas activé les macros.

Cependant je voulais faire une macro qui permettrais d'envoyer le fichier directement par mail sans avoir à fermer le fichier (bouton qui permet d'ouvrir directement le mail pour envoi). MAIS la protection ne marche pas quand je fais ca. Pourtant dans cette macro je sauvegarde le fichier sur le PC avant l'envoi par mail.

Voici la macro en question, je voulais savoir si c'était possible, ou si je suis obligé de fermer le fichier pour l'envoyer avec la protection.

Code:
Sub mail_commercial()
'
' mail_commercial Macro
Dim CellulesVariables As Range, c As Range, Verrouille As Boolean, sh As Object
For Each sh In Sheets
    sh.Protect Password:="toto", UserInterfaceOnly:=True
Next sh
Set CellulesVariables = Union(Worksheets("calculette").Range("e2"), Worksheets("calculette").Range("f5"), Worksheets("calculette").Range("g6"), Worksheets("calculette").Range("g2"), Worksheets("calculette").Range("b4"), Worksheets("calculette").Range("d4"), Worksheets("calculette").Range("a5"), Worksheets("calculette").Range("c5"), Worksheets("calculette").Range("g5"), Worksheets("calculette").Range("b6"), Worksheets("calculette").Range("d7"), Worksheets("calculette").Range("d8"), Worksheets("calculette").Range("c10:c19"), Worksheets("calculette").Range("b22:c28"), Worksheets("calculette").Range("e22:h28"), Worksheets("calculette").Range("g35:h39"), Worksheets("calculette").Range("c44"), Worksheets("calculette").Range("f44"), Worksheets("calculette").Range("b51"), Worksheets("calculette").Range("e11"))

    For Each c In CellulesVariables
        If c.MergeCells Then c.MergeArea.Locked = True Else c.Locked = True
    Next c
    ActiveWorkbook.SaveAs "C:\Conditions client 2011\CC" & " " & Worksheets("calculette").Range("B4").Value & " " & Worksheets("calculette").Range("D4").Value, xlOpenXMLWorkbookMacroEnabled
    Application.Dialogs(xlDialogSendMail).Show
End Sub

Merci
 
- 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

Retour