Bloquer une colonne VBA

Kimie -  
michel_m Messages postés 18903 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

2 réponses

  1. Zoul67 Messages postés 2001 Statut Membre 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
    1. 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
    2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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
    3. 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
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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