Bloqueio de edição ...
 
Notifications
Clear all

Bloqueio de edição de célula por título da coluna

9 Posts
4 Usuários
0 Reactions
1,354 Visualizações
(@luizhcosta)
Posts: 0
New Member
Topic starter
 

Bom dia a todos!

Mais uma prova de conhecimento aos colegas.

Possuo uma planilha com várias colunas e por vezes é necessário proteger uma ou outra dessas colunas. Acontece que a planilha é muito dinãmica e a posição das colunas é frequentemente alterada. Preciso bloquear o range "A2:A400" que tem o título "VALOR ATUAL" na célula "A1". Ocorre que a referência da coluna pode ser alterada. Imaginei uma macro que bloquei o intervalo das linhas pelo título "VALOR ATUAL". Outra aplicação no meu caso é que pode haver mais de uma coluna com esse título, logo eu estaria efetuando o bloqueio de todas, o que é de extrema necessidade.

Mais uma vez conto com a ajuda de todos.

Obrigado!

 
Postado : 10/04/2015 6:27 am
(@gtsalikis)
Posts: 2373
Noble Member
 

Use o gerenciador de nomes (Ctrl + F3) e nomeie o intervalo, no caso, o range A2:A400. Coloque um nome significativo, digamos "VALOR_TOTAL"

Isso vai fazer com que o range do intervalo mude automaticamente, caso a coluna seja reposicionada.

Agora, é só referenciar pelo nome que vc criou.

Em vez de usar algo como:
Range("A2:A400").Locked = true

Use:
Range("VALOR_TOTAL").Locked = true

Abs

 
Postado : 10/04/2015 8:03 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Apenas outra alternativa:

Sub Macro1()

ActiveSheet.Unprotect ("123")

Cells.Locked = False

icol = 1
col = Range("Z1").End(xlToLeft).Column 'Supondo que Z seja suficiente.

Do While icol <= col
If Cells(1, icol) = "VALOR ATUAL" Then
Columns(icol).Locked = True
icol = icol + 1
Else
icol = icol + 1
End If
Loop

ActiveSheet.Protect ("123")

End Sub

 
Postado : 10/04/2015 8:13 am
(@issamu)
Posts: 0
New Member
 

Minha sugestão é simplesmente utilizar a ferramenta de VALIDAÇÃO DE DADOS. Selecione as linhas 2:400, vá no menu DADOS e no botão "VALIDAÇÃO DE DADOS", então selecione na lista permitir a opção "PERSONALIZADO" e no campo de fórmulas digite a fórmula: =A$1<>"VALOR ATUAL". Se quiser configure uma mensagem na aba alerta de erros e Pronto. Solução direta sem precisar ficar criando códigos em VBA.

Veja modelo anexo.

Abraços!

 
Postado : 10/04/2015 8:56 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Por falta de sugestões este tópico não vai deixar de ser resolvido.
Segue mais uma opção com VBA :

Sub BloqueiaColsCriterio()
Dim lgTtColunas As Long
Dim iCol As Long
Dim myCol As String

    ActiveSheet.Unprotect ("SuaSenha")
    
    Cells.Locked = False
    
    'Conta as colunas preenchidas
    lgTtColunas = Cells(1, Columns.Count).End(xlToLeft).Column
    
    For iCol = 1 To lgTtColunas
        
        'Condição
        If Cells(1, iCol).Value = "VALOR ATUAL" Then
         
         myCol = GetColumnLetter(iCol)
         
         Range(myCol & "2:" & myCol & "400").Locked = True
        
        End If
        
    Next iCol

    ActiveSheet.Protect ("SuaSenha")

End Sub

Function GetColumnLetter(colNum As Long) As String
    Dim vArr
    vArr = Split(Cells(1, colNum).Address(True, False), "$")
    GetColumnLetter = vArr(0)
End Function
 
Postado : 10/04/2015 8:58 am
(@luizhcosta)
Posts: 0
New Member
Topic starter
 

REALMENTE, não será por falta de opções. Considerei todas as respostas e segui os passos do MAURO COUTINHO que me pareceU mais adequada. Eu gostaria de abusar da generosidade um pouco mais. É o seguinte, na minha planilha eu terei outras colunas com o texto VALOR ATUAL, como disse no posto, mas elas acabam se diferenciando com o ano, ou seja, vão existir "VALOR ATUAL 2014", "VALOR ATUAL 2015", "VALOR ATUAL 2016"...como ficaria a macro para fazer o bloqueio das colunas pela parte do título, no caso, "VALOR ATUAL" ?.

Resumindo, bloquio de todas as colunas que contenham no título a parte do texto "VALOR ATUAL..." !

 
Postado : 10/04/2015 1:21 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Na Macro do Mauro, modifique a linha de 'Condição para:

If Mid(Cells(1, iCol).Value, 1, 11) = "VALOR ATUAL" Then

 
Postado : 10/04/2015 1:59 pm
(@issamu)
Posts: 0
New Member
 

A adequação desta situação para a minha proposta de solução através de validação de dados é alterar a fórmula da validação para:

=CONT.SE(A$1:A$1;"*VALOR ATUAL*")=0

Abraços!

 
Postado : 10/04/2015 2:26 pm
(@luizhcosta)
Posts: 0
New Member
Topic starter
 

Obrigado a todos.Ficou muito boa a solução.

Valeu mesmo.

 
Postado : 10/04/2015 3:26 pm