Bloquer une colonne VBA
Kimie
-
michel_m Messages postés 16602 Date d'inscription Statut Contributeur Dernière intervention -
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
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:
- Bloquer une colonne VBA
- Déplacer une colonne excel - Guide
- Trier une colonne excel - Guide
- Bloquer une colonne excel - Guide
- Colonne word - Guide
- Formule somme excel colonne - Guide
2 réponses
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
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
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
Tu déclenches la macro si on écrit X (ou on l'annule) dans la colonne G, or cettedernière est protégée
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 ?
Et ce problème, il faut que je lrépète pour les colonnes G à CX