Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

Bonjour,
Il y a deux besoins dans ta demande
1- Pour que la protection s'applique à l'usager et pas aux macros (pouvoir utiliser les boutons), il faut utiliser
Code:
sh.Protect "toto" UserInterfaceOnly:=True
2- Pour que certaines cellules soient parfois modifiables ou non, il faut modifier leurs propriétés
on peut utiliser Union(range1, range2...) pour définir CellulesVariables
Code:
Modifiable = False
If Range("C45") = "" Then Modifiable = True
For Each c In CellulesVariables
    c.Locked = Modifiable
Next c
Ta macro est effectivement à écrire dans Private Sub Workbook_Open() que tu places dans ThisWorkbook.
Par sécurité (ouverture avec macros désactivées) il faut aussi tout verrouiller à la fermeture Private Sub Workbook_Close()

N'hésite pas à demander si tu as besoin d'explications plus détaillées.
A+
 
Re : Protection avec condition

Merci pour vos messages.

J'ai donc essayé de compléter ma macro avec vos messages
Code:
Private Sub Workbook_Open()
For Each sh In Sheets
    sh.Protect "toto" 'UserInterfaceOnly:=True'
    Modifiable = False
If Range("C45") = "" Then Modifiable = True
For Each c In CellulesVariables
    c.Locked = Modifiable
Next
End Sub


Private Sub Workbook_Close()
For Each sh In Sheets
    sh.Protect "toto"
End Sub

Mais à l'ouverture du fichier j'ai le message d'erreur suivant :
<< Erreur de compilation dans le module caché :This Workbook
Cette erreur se produit généralement lorsque le code est incompatible avec la version, plateforme ou architecture de cette application.
Pour plus d'info blablabla.. >>
et le fichier n'est plus du tout protégé..

Quelqu'un peut m'éclairer où je me suis foiré ? :$
 
Re : Protection avec condition

Bonjour,

A tout hasard, à priori ta variable "CellulesVariables" n'est pas initialisée, ni déclarée du reste...

bon après midi
@+
Gnééé ? lol
jsuis désolé la je comprend rien .. Que dois-je faire pour initialiser/déclarer une variable ?

Désolé en Vba jsuis au niveau -40 de compétence..
 
Re : Protection avec condition

Bonjour,
Tu avais dit que tu avais déterminé les cellules modifiables, il faut que tu les définisses dans "CellulesVariables"
VB:
Private Sub Workbook_Open()
    For Each sh In Sheets
        sh.Protect Password:="toto", UserInterfaceOnly:=True
    Next sh

    Set CellulesVariables = Union( range1, range2 ...) A RENSEIGNER
    Verrouille = True
    If Feuil1.Range("C45") = "" Then Verrouille = False
    For Each c In CellulesVariables
        c.Locked = Verrouille
    Next c
End Sub

Private Sub Workbook_Close()
    CellulesVariables = Union( range1, range2 ...) A RENSEIGNER
    For Each c In CellulesVariables
        c.Locked = True
    Next c
End Sub
en relisant je me suis aperçu que j'avais interverti cellules verrouillées ou non
A+
 
Dernière édition:
Re : Protection avec condition

Re-bonjour,

Voici le code que j'ai fais:

Code:
Private Sub Workbook_Open()
    For Each sh In Sheets
        sh.Protect Password:="toto", UserInterfaceOnly:=True
    Next sh

    CellulesVariables = Union(Range("e2"), Range("g2"), Range("b4"), Range("c10"), Range("c11"), Range("c12"), Range("c13"), Range("c14"), Range("c15"), Range("c16"), Range("c17"), Range("c18"), Range("c19"), Range("b22"), Range("b23"), Range("b24"), Range("b25"), Range("b26"), Range("b27"), Range("b28"), Range("e22:h22"), Range("g35:h40"), Range("c44"), Range("f44"), Range("b51"))
    
    Verrouille = True
    If Feuil1.Range("C45") = "" Then Verrouille = False
    For Each c In CellulesVariables
        c.Locked = Verrouille
    Next c
End Sub

Private Sub Workbook_Close()
    CellulesVariables = Union(Range("e2"), Range("g2"), Range("b4"), Range("c10"), Range("c11"), Range("c12"), Range("c13"), Range("c14"), Range("c15"), Range("c16"), Range("c17"), Range("c18"), Range("c19"), Range("b22"), Range("b23"), Range("b24"), Range("b25"), Range("b26"), Range("b27"), Range("b28"), Range("e22:h22"), Range("g35:h40"), Range("c44"), Range("f44"), Range("b51"))
    For Each c In CellulesVariables
        c.Locked = True
    Next c
End Sub

Mais j'ai le message d'erreur suivant :
<<Erreur d'exécution '13':
Incompatibilité de type>>
🙁

Du coup même lorsque la cellule C45 est remplie, les cellule "déclarées" sont toujours modifiables..

Merci de vos éclaircissements..
 
Re : Protection avec condition

Bonjour,

il est préférable de déclarer les variables...


Code:
Dim CellulesVariables As Range
Set CellulesVariables = Union(Range("e2"), Range("g2"), Range("b4"), Range("c10"), Range("c11"), Range("c12"), Range("c13"), Range("c14"), Range("c15"), Range("c16"), Range("c17"), Range("c18"), Range("c19"), Range("b22"), Range("b23"), Range("b24"), Range("b25"), Range("b26"), Range("b27"), Range("b28"), Range("e22:h22"), Range("g35:h40"), Range("c44"), Range("f44"), Range("b51"))

d'autre part, pour initialiser une variable objet, il faut faire précéder du mot "set"

bon après midi
@+
 
Re : Protection avec condition

Code:
Private Sub Workbook_Open()
    For Each sh In Sheets
        sh.Protect Password:="toto", UserInterfaceOnly:=True
    Next sh
    
Dim CellulesVariables As Range
Set CellulesVariables = Union(Range("e2"), Range("g2"), Range("b4"), Range("c10"), Range("c11"), Range("c12"), Range("c13"), Range("c14"), Range("c15"), Range("c16"), Range("c17"), Range("c18"), Range("c19"), Range("b22"), Range("b23"), Range("b24"), Range("b25"), Range("b26"), Range("b27"), Range("b28"), Range("e22:h22"), Range("g35:h40"), Range("c44"), Range("f44"), Range("b51"))
    
    Verrouille = True
    If Feuil1.Range("C45") = "" Then Verrouille = False
    For Each c In CellulesVariables
        c.Locked = Verrouille
    Next c
End Sub

Comme ca ? parce que la j'ai erreur d'exécution 1004.. 😕
 
Re : Protection avec condition

Re,

le dernière ??? celle-ci :
Code:
End Sub
ou celle-ci :
Code:
Next c
chez moi pas ce problème....
tu n'as pas de cellules fusionnées des fois??? vba et cellules fusionnées pas top...
 
Re : Protection avec condition

Re,

code avec cellules fusionnées :
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("g2"), Range("b4"), Range("c10"), Range("c11"), Range("c12"), Range("c13"), Range("c14"), Range("c15"), Range("c16"), Range("c17"), Range("c18"), Range("c19"), Range("b22"), Range("b23"), Range("b24"), Range("b25"), Range("b26"), Range("b27"), Range("b28"), Range("e22:h22"), Range("g35:h40"), Range("c44"), Range("f44"), Range("b51"))
Verrouille = True
If Feuil1.Range("C45") = "" Then Verrouille = False
    For Each c In CellulesVariables
        If c.MergeCells Then c.MergeArea.Locked = Verrouille Else c.Locked = Verrouille
    Next c
End Sub
 
- 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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…