Notifications
Clear all

Macro apagar determinada linha na tabela

5 Posts
2 Usuários
0 Reactions
1,096 Visualizações
(@henriqueb)
Posts: 0
New Member
Topic starter
 

Olá Planilheiros,

Estou tendo dificuldades para criar uma rotina de macro,

Imaginem que tenho duas tabelas numa planilha uma ao lado da outra, uma que dei o nome de disponível e outra indisponível, ambas são iguais com duas colunas: "Nome computador","Modelo".

O que estou tentando fazer, é manipular essas linhas, quando eu executar a macro ela irá jogar a linha de uma tabela para outra, exemplo: Escrevi o nome do computador numa célula e cliquei no botão indisponível, ela sai da tabela disponível e entra na indisponível, e vice versa.

Tratamento de erros com ifs, tenho facilidade para tratar, só não consigo desenvolver a lógica para localizar a linha que está na tabela e excluir e jogar na outra tabela.

 
Postado : 21/05/2015 5:38 am
(@edcronos)
Posts: 1006
Noble Member
 

eu comecei a mexer com areas nomeadas agora
mas
já que vc jpá tem uma base

pega a primeira linha da tabela
li=Range(nome tabela).Row

pega a ultima linha da tabela
Lf= Li + Range(nome tabela).Rows.count - 1

for l=Li to Lf ' vai fazer loop em todas as linha da tabela

para coluna a mesma coisa
ou se pode fazer um loop for each

 
Postado : 21/05/2015 5:59 am
(@henriqueb)
Posts: 0
New Member
Topic starter
 

eu comecei a mexer com areas nomeadas agora
mas
já que vc jpá tem uma base

pega a primeira linha da tabela
li=Range(nome tabela).Row

pega a ultima linha da tabela
Lf= Li + Range(nome tabela).Rows.count - 1

for l=Li to Lf ' vai fazer loop em todas as linha da tabela

para coluna a mesma coisa
ou se pode fazer um loop for each

Obrigado, clareou um pouco minha mente, fiz o seguinte código porém estou tendo problemas na hora de ajustar a tabela,

Sub teste()

' Macro, apaga célula que for igual a B2 no intervalo A1:A20 e depois ajusta a tabela, eliminando o espaço em branco da tabela.

For contar = 1 To 20

Set CelulaAtual = Worksheets("Plan1").Cells(contar, 1)

If CelulaAtual.Text = Range("B2").Text Then

CelulaAtual.ClearContents ' Aqui beleza está apagando a célula

Range(Cells(contar + 1, 1):Cells(contar + 20, 1)).Select ' Da erro aqui, sei que a sintaxe ta errada ja tentei essas:
' ja tentei atribuir valor para CelulaAtual com Set CelulaAtual = Worksheets("Plan1").Cells(contar +1, 1) e então tentar o Range("CelulaAtual:A20").Select porém também da errado :/

Selection.Cut Destination:=Range("Cells(contar, 1):A19") ' Se souber a sintaxe da linha anterior acerto aqui
contar = 20
End If

Next contar

End Sub

Alguém sabe a sintaxe ou terei que fazer outro looping :/ ? :cry:

 
Postado : 21/05/2015 9:35 am
(@henriqueb)
Posts: 0
New Member
Topic starter
 

Lembrei que tem como selecionar as células em branco e então deu tudo certo hehe

Segue o código simplificado, ele apenas deleta a célula que estiver entre A1:A20, que for igual a célula B2 e elimina o espaço em branco que ficar.

Para quem ficou curioso essa foi a solução :

Sub teste()

For contar = 1 To 20
Set CelulaAtual = Worksheets("Plan1").Cells(contar, 1)

        If CelulaAtual.Text = Range("B2").Text Then
        CelulaAtual.ClearContents
        Range("A1:A20").Select
        Selection.SpecialCells(xlCellTypeBlanks).Select ' Seleciona espaços em branco
        Selection.Delete Shift:=xlUp 'Delete e sobe todas as celulas para cima 
        
        End If
        
Next contar

End Sub
 
Postado : 21/05/2015 11:13 am
(@edcronos)
Posts: 1006
Noble Member
 

o importante é que vc conseguiu
desculpa não ter entendido seu requerimento,
como vc falou em tabela eu pensei que era uma area nomeada,

para falar a verdade eu nem ia adivinhar que vc queria apagar celulas em branco com condição pela celula b2

 
Postado : 21/05/2015 11:25 am