Notifications
Clear all

Como bloquear células específicas através de uma macro?

10 Posts
5 Usuários
0 Reactions
1,229 Visualizações
 Josy
(@josy)
Posts: 0
New Member
Topic starter
 

Não sei se isso é possível... E nem como fazê-lo.
Por exemplo:
Em Plan1...
A B C D E F G ...
1 X X
2 X X
3 X X X
4 X X X X
5 X X X
...
As mesmas informações são copiadas para Plan2
Bloquear células específicas... as que contiverem a letra "X", SOMENTE em Plan 2. Neste caso, B1, E1, C2, G2, B3, D3, G3, B4, C4, D4, G4, E5, F5, G5... Bloqueando e fazendo o processo inverso de desbloquear caso o "X" seja apagado em Plan1.

Se alguém puder me ajudar, ficarei muito agradecida. :oops: Mesmo pq isso me tirou o sono hoje... :shock: :lol:

P/S.: Se puder explicar o q a macro está realizando passo a passo... melhor ainda... pq pretendo aprender com isso. Já que não entendo muita coisa de VBA, e estou aprendendo com ajuda desse fórum e pesquisando na Net.

 
Postado : 19/08/2015 5:19 am
(@issamu)
Posts: 0
New Member
 

Minha sugestão é utilizar validação de dados, que não depende de macro para funcionar. Seria muito mais simples.
É só selecionar o intervalo desejado na Plan2 e aplicar a Validação de dados de forma personalizada com a fórmula referenciada à célula que estiver ativa na planilha. Se você selecionar as células B1, E1, C2, G2, B3, D3, G3, B4, C4, D4, G4, E5, F5, G5 nessa ordem segurando CRTL, a célula ativa vai ser a ultima selecionada, ou seja, G5. Então a fórmula na validação será:

=Plan1!G5<>"X"

Você pode até definir a mensagem de alerta de erro.

Qualquer dúvida pergunte.

 
Postado : 19/08/2015 6:41 am
 Josy
(@josy)
Posts: 0
New Member
Topic starter
 

Obrigada pela resposta... Mas para o que eu necessito... Validação de dados com lista, não é o que eu preciso.
Obrigada mesmo assim.

 
Postado : 19/08/2015 8:07 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Josy, poderia detalhar melhor, não comprrendi.

Voce quer copiar da Plan1 para a Plan2 somente as celulas que contiverem a letra "X", e bloquear SOMENTE em Plan 2. Neste caso, B1, E1, C2, G2, B3, D3, G3, B4, C4, D4, G4, E5, F5, G5 ?
Como é efetuada esta cópia ?

Bloqueando e fazendo o processo inverso de desbloquear caso o "X" seja apagado em Plan1.
O que quer dizer com fazer inverso caso seja apagado na Plan1 ?
Os ranges na Plan1 teem formulas e são copiadas para a Plan2 ou só valores ?

Se possivel anexe um modelo reduzido de como está o layout e de como deveria ficar apos as ações.

[]s

 
Postado : 19/08/2015 9:05 am
(@pfarias)
Posts: 0
New Member
 

Josy,

Vê se é o que você procura!
Qualquer dúvida, pode falar.

 
Postado : 19/08/2015 10:31 am
 Josy
(@josy)
Posts: 0
New Member
Topic starter
 

Obrigada por sua resposta.
Mas acabou bloqueando todas as células.

De qq forma obrigada!

 
Postado : 26/08/2015 10:03 am
(@mprudencio)
Posts: 0
New Member
 

Disponibilize um arquivo e diga no arquivo quais celulas devem ser bloqueadas

 
Postado : 26/08/2015 11:12 am
 Josy
(@josy)
Posts: 0
New Member
Topic starter
 

Olá, Mauro Coutinho. A macro que um amigo daqui fez foi essa. Serviu perfeitamente ao que necessito. Porém, eu queria que fosse possível, ao usar o teclado com as setas, pulasse automaticamente as células que estivessem bloqueadas a partir dessa macro. Porém, ela permiti selecionar tanto células bloqueadas como desbloqueadas. Será que é possível fazer uma modificação para NÃO SELECIONAR CÉLULAS BLOQUEADAS? Como acrescentar isso aqui? :oops:

Option Explicit

'Protege células marcadas
Public Sub ProtectCell()
Dim wsParam As Worksheet
Dim wsBlock As Worksheet
Dim UltL As Long
Dim i As Long
Dim j As Long

Set wsParam = ThisWorkbook.Worksheets("RelAtrib")
Set wsBlock = ThisWorkbook.Worksheets("Manha")
UltL = wsParam.Cells(Rows.Count, 1).End(xlUp).Row
wsBlock.Unprotect "senha"

For i = 1 To UltL
For j = 2 To 39
If wsParam.Cells(i, j).Value = "X" Then
wsBlock.Cells(i, j).Locked = True
End If
Next j
Next i

wsBlock.Protect "2015"
Set wsParam = Nothing
Set wsBlock = Nothing

End Sub

'Desprotege células marcadas
Public Sub UnProtectCell()
Dim wsParam As Worksheet
Dim wsBlock As Worksheet
Dim UltL As Long
Dim i As Long
Dim j As Long

Set wsParam = ThisWorkbook.Worksheets("RelAtrib")
Set wsBlock = ThisWorkbook.Worksheets("Manha")
UltL = wsParam.Cells(Rows.Count, 1).End(xlUp).Row
wsBlock.Unprotect "senha"

For i = 1 To UltL
For j = 2 To 39
If wsParam.Cells(i, j).Value = "X" Then
wsBlock.Cells(i, j).Locked = False
End If
Next j
Next i

wsBlock.Protect "2015"
Set wsParam = Nothing
Set wsBlock = Nothing

End Sub

Até comecei a fazer a planilha, mas como estou vendo todas as possibilidades do que preciso, ainda não avancei. Está só no começo. Não sei se vai ser possível concluir o que preciso somente com vba. De qq forma, segue o anexo abaixo. :D

 
Postado : 28/08/2015 5:19 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Josy, pelo que entendi é só adicionar a restrição quanto às condições de Seleção atraves da própria propriedade "EnableSelection" acrescentando a linha :

wsBlock.EnableSelection = xlNoSelection
A propriedade "EnableSelection" tem 3 parâmetros que são :

.EnableSelection = xlUnlockedCells ' - Permite Selecionar Celulas Desbloqueadas
.EnableSelection = xlNoSelection ' - Não permite nenhuma seleção
.EnableSelection = xlNoRestrictions ' - Permite Selecionar Bloqueadas e Desbloqueadas

Veja se é isto e qq coisas retorne.

[]s

 
Postado : 28/08/2015 11:14 am
 Josy
(@josy)
Posts: 0
New Member
Topic starter
 

Ainda não resolveu

 
Postado : 31/08/2015 7:15 am