Bloquer une colonne VBA

Kimie -  
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
Dans un tableau excel, j'essaie de mettre en place un code VBA pour que si on met un x dans une case, toutes les cases de la même colonne soient bloquées.
Il faut que je répète le code sur 48 colonnes, et chaque colonne va de la ligne 33 à la ligne 57.
J'ai essayé un code pour une colonne, mais ça ne fonctionne pas, parce que ça bloque aussi toutes les cellules de la même ligne...

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("G:G")) Is Nothing Then
ActiveSheet.Unprotect
If Target.Value = "x" Then
For j = 1 To 32
Target.Offset(j, 0).Locked = True
Next
For j = -32 To -1
Target.Offset(j, 0).Locked = True
Next

Else

For j = 1 To 32
Target.Offset(j, 0).Locked = False
Next
For j = -32 To -1
Target.Offset(j, 0).Locked = False
Next

End If
ActiveSheet.Protect
End If

End Sub


Est-ce que qqn aurait une idée de comment je pourrais faire?

Merci d'avance

Kimie


A voir également:

2 réponses

Zoul67 Messages postés 1959 Date d'inscription   Statut Membre Dernière intervention   149
 
Bonsoir,

Autrement...
Il m'est venu une idée : comme le principe semble être de ne pas modifier le contenu d'une cellule, on peut rendre la frappe des touches inefficiente...
Suivant la cellule dans laquelle tu te situes, si dans la même colonne à telle ligne ta macro trouve un x, tout caractère saisi est remplacé par un caractère "Null" ou vide.

A+

Matthieu
0
Kimie
 
ça pourrait être une idée, mais je voudrais que la personne qui va rentrer les "x" dans le tableau puissent voir qu'elle a fait une erreur et mettre le x dans une autre case. Donc le message d'excel disant que la case est bloquée me convient bien.
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
Bonjour

Tu déclenches la macro si on écrit X (ou on l'annule) dans la colonne G, or cettedernière est protégée
f Not Application.Intersect(Target, Range("G:G")) Is Nothing Then
ActiveSheet.Unprotect
If Target.Value = "x" Then 


ou ta cellule où tu saisis "x" est hors des lignes 33 à51 et dévérouillé

d'autre part tu indiques 48 colonnes: c'est une procédure valable au cas par cas colone G 33-51 ou sur les 48 colonnes, si c'est ce dernier cas, les colonnes sont elles jointives et à partir de G ?
0
Kimie
 
Le "x" est dans les lignes 34 à 66. Ce que je veux c'est que si je met un "x" dans une case, par exemple G45, alors toutes les autres cases de la même colonne (G34:G66) sont bloquées sauf la case G45 (pour pouvoir supprimer le x et débloquer toutes les cases de la colonne G).
Et ce problème, il faut que je lrépète pour les colonnes G à CX
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
A essayer

Private Sub Worksheet_Change(ByVal Target As Range)
'cx=102
If Not Intersect(Target, Range("G34:CX66")) Is Nothing Then
     col = Target.Column
     Unprotect

     If Target = "x" Then
          Range(Cells(34, col), Cells(66, col)).Locked = True
          Target.Locked = False
     ElseIf Target = "" Then
          Range(Cells(34, col), Cells(66, col)).Locked = False
     End If
Protect
End If
End Sub

Sub initialiser()
Range("G34:CX66").Locked = False
End Sub
0