XL 2016 Deverouiller cellule avec un code couleur

flochams

XLDnaute Nouveau
Bonjour à tous,

Je me permets de solliciter votre aide.

J’ai mis en pj un exemple de fichier simplifié (le réel fait 10 onglets et des centaines de lignes)

En gros, j’ai mis une zone en bleue qui est la seule qui ne doit pas être verrouillée et agir comme un masque de saisi.

J’ai regardé le forum et j’ai essayé d’adapter du VBA mais ca ne marche pas.

Pourriez-vous m’aider svp ?



Merci par avance
 

Pièces jointes

  • exemple fichier - Copie.xlsx
    10.6 KB · Affichages: 9

Softmama

XLDnaute Accro
Bonjour flochams,


Toutes les cellules de la feuilles sont verrouillées.
Pouvez-vous me confirmer quelles cellules vous souhaitez dans votre exemple que la macro déverrouille ?
J11:W11
Q14:W14
Q18:W18


C'est bien cela ?

Comment sont structurés vos onglets, de façon identique ou y a-t-il des différences.
Peut on avoir un exemple avec 2 ou 3 onglets réels (dont les données sensibles sont remplacées par des factices) ?
 

flochams

XLDnaute Nouveau
Bonjour
Merci pour votre réponse
C'est exactement ca, toutes les cellules avec le code couleur sont dévérouillées pour que des données puissent être saisies manuellement (comme un formulaire en qqe sorte)
Tous les onglets sont structures de la même manière,
J'ai modifié le fichier en exemple
Merci bcp pour votre aide
 

Pièces jointes

  • exemple fichier - Copie.xlsx
    24.9 KB · Affichages: 8
Dernière édition:

Softmama

XLDnaute Accro
Bonjour,

j'étais absent quelques jours, désolé, je reprends :

cette macro fait le job à priori, à adapter au besoin :
VB:
Private Sub CommandButton1_Click()
Dim ws As Worksheet
Dim c As Range


For Each ws In ThisWorkbook.Worksheets 'on regarde chaque onglet
  For Each c In ws.Range("J11:W" & ws.Range("W1000000").End(xlUp).Row) 'chaque cellule de la zone des tableaux
    If c.Interior.ColorIndex = 46 Then c.Locked = False 'si couleur 46 (orange brun) alors on déverrouille
  Next
Next
End Sub

Le fichier en PJ
 

Pièces jointes

  • exemple fichier - Copie (2).xlsm
    37.8 KB · Affichages: 10

flochams

XLDnaute Nouveau
Bonjour
MErci bcp!
Dans le fichier joint et en copiant la macro rien ne se passe.
Par ailleurs, je souhaite que la zone qui a un code couleur soit débloqué et le reste bloqué, je ne sais oas su ma demande initiale était claire

Pourriez vous m'aider à ce sujet?
Merci par avance
 

flochams

XLDnaute Nouveau
Bonjour
Merci bcp pour ton aide
J'ai téléchargé à plusieurs reprises le fichier et lorsque je click sur le bouton ou que je lance la macro, je n'ai pas de message d'erreur , cependant c'est comme si rien ne passait car à ce moment là là feuille n'est pas bloquée à la saisie et du coup tout est déverrouillé

Lorsqu'en revanche je protège la feuille et lance la macro pour déverrouiller les zones de saisie j'obtiens le message suivant "Impossible de définir la propriété locked de la classe range"
Du coup j'ai modifié la macro et rajouter les lignes
Unprotect Password:="test"
et à la fin
Protect Password:="test"
Mais même là j'obtiens un message derreur
J'avoue ne pas comprendre
 

flochams

XLDnaute Nouveau
BOnjour
Merci bcp
Du coup, j'ai essayé de retaper la macro, mais ca bloque
Je ne comprends pas pourquoi
VB:
Private Sub CommandButton1_Click()
Dim ws As Worksheet
For Each ws In Worksheets
ws.Unprotect "test"
Next ws
Dim c As Range

For Each ws In ThisWorkbook.Worksheets 'on regarde chaque onglet
  For Each c In ws.Range("J11:W" & ws.Range("W1000000").End(xlUp).Row) 'chaque cellule de la zone des tableaux
    If c.Interior.ColorIndex = 46 Then c.Locked = False 'si couleur 46 (orange brun) alors on déverrouille
  Next
 
For Each ws In Worksheets
ws.Protect "test"
Next ws

Next
End Sub
 

Softmama

XLDnaute Accro
Bonjour,

Cela semble indiquer que toutes les feuilles du classeur ont le mdp "test". Est-ce bien le cas pour toutes les feuilles du classeur, y compris celles qui n'ont pas de tableaux ?
Il faudrait rajouter dans votre exemple avant le For Each c...
ws.Cells.Locked = True

Sinon, une fois qu'une cellule est déverrouillée, elle ne se reverrouille pas.

Si ces indications ne suffisent pas à vous dépatouiller, merci d'être plus précis sur à quel endroit la macro "bloque", quel est le message d'erreur et quelle ligne est surlignée en jaune au debuggage ?
 

job75

XLDnaute Barbatruc
Il est plus simple d'utiliser l'argument UserInterfaceOnly :
VB:
Private Sub CommandButton1_Click()
Dim ws As Worksheet, c As Range
For Each ws In ThisWorkbook.Worksheets
    ws.Protect "test", UserInterfaceOnly:=True
    ws.Cells.Locked = True 'RAZ
    For Each c In ws.Range("J11:W" & ws.Range("W1000000").End(xlUp).Row)
        If c.Interior.ColorIndex = 46 Then c.Locked = False
Next c, ws
End Sub
 

Pièces jointes

  • exemple fichier - Copie (3).xlsm
    40.5 KB · Affichages: 4

Discussions similaires

Réponses
17
Affichages
692

Statistiques des forums

Discussions
312 231
Messages
2 086 438
Membres
103 208
dernier inscrit
Natsu09