Notifications
Clear all

Mover linha de uma Planilha para outra no mesmo arquivo

6 Posts
2 Usuários
0 Reactions
1,139 Visualizações
 JCAS
(@jcas)
Posts: 3
New Member
Topic starter
 

Olá Galera.
Em um mesmo arquivo, tenho uma planilha com projetos ativos e outra planilha com projetos encerrados.
Quando encerro um projeto, tenho que copiar a linha onde ele está para a última linha vazia da outra planilha e depois volto para excluir a linha na planilha origem.
Gostaria de fazer isso com uma macro. Como faço isso?

Eu quero selecionar o nome do projeto, que está na coluna A, a partir de uma lista de validação. Ao localizar o nome do projeto, vou clicar em um botão de nome ENCERRAR, a macro deve selecionar toda a linha onde está este projeto e movê-la para a última linha vazia da planilha de projetos encerrados.

Alguém tem sugestão de código?

Obs.: Ainda estou aprendendo VBA e não conheço tanto de código.

JOÃO CARLOS

 
Postado : 31/05/2015 7:56 am
(@srobles)
Posts: 231
Estimable Member
 

Fala João, td bem?

Fiz uma planilha modelo baseada em suas dúvidas. Baixe ela e veja se te ajuda ok?

Qualquer coisa, poste sua planilha aqui que adaptamos a rotina para ela.

[]s

Espero ter ajudado.

Abs.

Saulo Robles

 
Postado : 31/05/2015 12:16 pm
(@srobles)
Posts: 231
Estimable Member
 

João, segue abaixo o código :

Sub encerrarProjeto()
    Dim linhaAtual As Integer
        Sheets("Ativos").Activate
        linhaAtual = ActiveCell.Row 'id da linha selecionada
            If MsgBox("Confirma o encerramento do projeto selecionado?", vbQuestion + vbYesNo) = vbYes Then 'se a resposta a pergunta for sim
                Cells(ActiveCell.Row, "E").Value = "Encerrado" ' muda o status do item para encerrado
                Range("A" & ActiveCell.Row).Select ' seleciona a coluna A da linha ativa
                Range(Selection, Selection.End(xlToRight)).Select ' estende a seleção ate a ultima coluna
                Selection.Copy ' copia os dados
                Sheets("Encerrados").Activate ' seleciona a planilha de encerrados
                    Dim linhaLimpa As Integer
                    linhaLimpa = ActiveSheet.UsedRange.Rows.Count + 1 'conta as linhas que contem valores e soma +1
                        Cells(linhaLimpa, "A").Select 'seleciona a linha em branco
                        ActiveSheet.Paste ' cola as informações
                        Application.CutCopyMode = xlCopy ' cancela o modo copiar e colar do excel
                        Range("A1").Select 'seleciona a primeira linhada planilha
                        Sheets("Ativos").Activate ' seleciona a planilha de ativos
                        ActiveCell.EntireRow.Delete ' deleta a linha inteira
                        Range("A1").Select ' seleciona a primeira linha da planilha
            End If ' fim do laço
End Sub

[]s

Espero ter ajudado.

Abs.

Saulo Robles

 
Postado : 31/05/2015 12:29 pm
 JCAS
(@jcas)
Posts: 3
New Member
Topic starter
 

Olá Saulo.
Muito obrigado pela sua ajuda.
No entanto, não funcionou adequadamente. Talvez eu não tenha feitos os ajustes corretamente.

Eu inclui um novo módulo com o código que você forneceu, mas ao executar a macro ela leva apenas a primeira célula da seleção. O comando de apagar a origem está correto.

Coloquei em anexo a minha planilha.
Na aba "Em fornecimento", eu quero selecionar o nome do projeto e depois clicar no botão "ENTE". Ao fazer isso, a macro deve selecionar toda a linha onde está o nome do projeto e levá-la para a aba "ENTE" (encerrados).

Desde já agradeço muito pelo apoio.

JOÃO CARLOS

 
Postado : 31/05/2015 2:25 pm
(@srobles)
Posts: 231
Estimable Member
 

João, td bem?

Dei uma analisada na sua planilha e adaptei o código, que, agora funcionou perfeitamente. Qualquer dúvida, pode chamar ok?

Segue abaixo, novo código, onde é só adicionar um novo módulo e colá-lo nele.

Sub encerrarProjeto()
    Dim linhaAtual As Integer
        Sheets("EM FORNECIMENTO").Activate
        linhaAtual = ActiveCell.Row 'id da linha selecionada
            If MsgBox("Confirma o encerramento do projeto selecionado?", vbQuestion + vbYesNo) = vbYes Then 'se a resposta a pergunta for sim
                Range("B" & ActiveCell.Row).Select ' seleciona a coluna A da linha ativa
                Range(Selection, Selection.End(xlToRight)).Select ' estende a seleção ate a ultima coluna
                Selection.Copy ' copia os dados
                Sheets("ENTE").Activate ' seleciona a planilha de encerrados
                    Dim i As Integer
                    Dim linhaLimpa As Integer
                        For i = 4 To ActiveSheet.UsedRange.Rows.Count + 1
                            Cells(i, "B").Select
                            If Cells(i, "B") = "" Then
                                linhaLimpa = i 'conta as linhas que contem valores e soma +1
                                Exit For
                            End If
                        Next i
                        Cells(linhaLimpa, "B").Select 'seleciona a linha em branco
                        ActiveSheet.Paste ' cola as informações
                        Application.CutCopyMode = xlCopy ' cancela o modo copiar e colar do excel
                        Range("A1").Select 'seleciona a primeira linhada planilha
                        Sheets("EM FORNECIMENTO").Activate ' seleciona a planilha de ativos
                        ActiveCell.EntireRow.Delete ' deleta a linha inteira
                        Range("A1").Select ' seleciona a primeira linha da planilha
                        linhaAtual=0
                        i=0
                        linhaLimpa=0
            End If ' fim do laço
End Sub

[]s

Espero ter ajudado.

Abs.

Saulo Robles

 
Postado : 31/05/2015 7:32 pm
 JCAS
(@jcas)
Posts: 3
New Member
Topic starter
 

Muito obrigado.
Funcionou perfeitamente!!!
[]s

 
Postado : 01/06/2015 4:36 am