XL 2010 verrouiller une cellule dont la couleur est posée par Mise en Forme Conditionnelle

Ommagawi

XLDnaute Junior
Bonjour,
J'utilise ce code :
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim Cel, Plage As Range
Set Plage = ActiveSheet.Range("B2:Y221")
ActiveSheet.Unprotect
For Each Cel In Plage
If Cel.Interior.ColorIndex <> -4142 Then
If Cel.Locked = False Then Cel.Locked = True
End If
Next
ActiveSheet.Protect
End Sub
Mais rien ne se produit !
Avez vous une solution ?
Merci
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Dans votre ligne de déclaration de variable, il ne suffit pas de mettre Range en bout de ligne pour que toutes les variables de la ligne soient déclarées en Range. (dans votre cas ce n'est pas très important que cel soit un variant)

Dans une procédure évènementielle de classeur il est toujours bien de contrôler le type de feuille passée à la procédure, car un classeur peut avoir des feuilles de travail, des feuilles graphiques et feuilles macro (rares aujourd'hui).

Voici une procédure qui tient compte de ces points. De plus pour le verrouillage des cellules je vous ai mis deux possibilités, une qui traitera toutes les cellules de la plage données en les verrouillant ou dévérouillant et une autre qui ne traitera QUE celles dont le format correspond au critères, laissant les autres dans leur état.

VB:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Dim Cel As Range, Plage As Range
    If Not TypeOf Sh Is Worksheet Then Exit Sub
    Set Plage = Sh.Range("B2:Y221")
    Sh.Unprotect
    For Each Cel In Plage
        '
        ' Si l'on veut verouiller UNIQUEMENT celles qui correspondent au critère
        ' et dévérouiller les autres décommenter la ligne suivante
        'Cel.Locked = Cel.DisplayFormat.Interior.ColorIndex <> -4142
        '
        ' si on veut traiter uniquement celles qui correspondent au critère
         If Cel.DisplayFormat.Interior.ColorIndex <> -4142 Then Cel.Locked = True
    Next
    Sh.Protect
End Sub

Cordialement

[Edition] Hello @chris :) [/Edition]
 

Ommagawi

XLDnaute Junior
Merci de votre contribution mais rien ne se produit.
Je joins mon fichier pour mieux comprendre.
Quand la formation est validée elle passe au vert.
Quand elle est annulée elle passe au rouge.
Je voudrai qu'une fois colorées, les lignes soient verrouillées automatiquement et qu'on ne puisse plus modifier les cellules colorées sauf si on déprotège la feuille.
Est ce possible ?
 

Pièces jointes

  • Exemple vérouillage.xlsx
    12.4 KB · Affichages: 8

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Et la macro, elle est où ?

Je voudrai qu'une fois colorées, les lignes soient verrouillées automatiquement et qu'on ne puisse plus modifier les cellules colorées sauf si on déprotège la feuille.
Quand elle est validée ? Quand elle est annulée ? Les deux ? Quand la colonne ETAT n'est pas vide en fait ? Non ?

Voici un exemple qui verrouille les cellules de la ligne (colonne A à H ) lorsque H n'est plus vide.
Elle le fait au cas par cas sur changement de la valeur de ETAT.

A mon avis, cela va vite devenir pénible, cette protection au cas par cas.
Aussi je vous ai préparé une macro (dans le deuxième fichier) nommée 'Verrouiller' qui verrouille toutes les lignes dont la colonne ETAT contient quelque chose et dévérrouille éventuellement les autres.

Faites vos changements, cliquez sur le bouton 'Verrouillage - protection' et hop !



cordialement
 

Pièces jointes

  • Exemple vérouillage.xlsm
    27.2 KB · Affichages: 7
  • Exemple vérouillage v2.xlsm
    30.3 KB · Affichages: 7
Dernière édition:

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Dans quelle macro de quel fichier ?

Pour le v2 on change With .Range("A1").CurrentRegion par With .Range("A1:H5000")
Idem pour le premier fichier mais sans le point devant Range !

Surtout on essaie de comprendre comment fonctionne la macro et on fait ses propre tests avant de demander modification, sinon on restera toujours dépendant d'un clampin qui voudra peut-être bien nous aider.

Cordialement
 

Discussions similaires

Statistiques des forums

Discussions
315 168
Messages
2 116 934
Membres
112 923
dernier inscrit
ferganih