Página 1 de 1
Macro copia e cola linha por linha [Resolvido]
Enviado: Sáb Mai 11, 2019 5:31 pm
por DANIELDDK
Prezados, boa tarde! Tudo bem?
Gostaria de saber se alguém pode me ajudar:
Tenho uma planilha que contém duas abas, sendo que na aba 1 contém 60mil linhas, da coluna A até O, bem acontece que, gostaria de copiar linha por linha da aba 1 e colar no intervalo da aba 2, o intervalo desta ultima aba é de a2:o2, pois nesta seriam realizados alguns calculos, os números copiados da aba 1 sempre serão lançados neste intervalo, na aba 2. Tipo um loop, quando finalizar os calculos ela procuraria a próxima linha da aba 1 e colaria no intervalo da aba 2.
Já esgotei todas as fontes e nenhuma traz linha por linha, somente até a ultima linha preenchida.
Desde já agradeço
Re: Macro copia e cola linha por linha
Enviado: Sáb Mai 11, 2019 8:14 pm
por srobles
DANIELDDK,
Você quer copiar todas as 60mil linhas da aba 1 para a aba 2? Apenas uma linha? A cópia possui algum critério?
Informe com mais detalhes, ou se possível, disponibilize um modelo com poucos dados (fictcios).
Aguardo retorno.
Abs
Re: Macro copia e cola linha por linha
Enviado: Sáb Mai 11, 2019 11:45 pm
por DANIELDDK
srobles,
Primeiramente, obrigado pela atenção.
Preciso que, por exemplo:
Copie o que está na ABA 1 no intervalo A2:O2 e seja colado na ABA 2, no intervalo A2:O2;
Após, copie o que está na ABA 1 no intervalo A3:O3 e seja colado na ABA 2, no intervalo A2:O2;
Após, copie o que está na ABA 1 no intervalo A4:O4 e seja colado na ABA 2, no intervalo A2:O2;
até que chegue no ultimo intervalo preenchido da ABA 1 e finalize a cola na ABA 2.
Observe que na ABA 2 a cola será sempre no mesmo intervalo, pois nesta aba serão feitos alguns cálculos que posteriormente serão transcritos em uma outra aba (ABA 3).
Mais uma vez agradeço a atenção
Re: Macro copia e cola linha por linha
Enviado: Dom Mai 12, 2019 3:25 am
por srobles
DANIELDDK,
Esses cálculos utilizarão sempre as mesmas fórmulas / funções?
Pergunto isso pois, fazer a cópia do desse intervalo para a outra aba, aguardar o cálculo ser feito, copiar novamente para a outra aba, para só então passar para a próxima linha da aba 1, á meu ver, não vai ficar algo prático.
Se pudessemos elaborar a rotina já com as etapas de cálculos embutidas no código, já exportariamos o resultado direto para a outra aba, tornando o processo mais ágil e poupando a elaboração de um código mais extenso e sujeito á falhas.
Abs
Re: Macro copia e cola linha por linha
Enviado: Dom Mai 12, 2019 8:07 am
por DANIELDDK
srobles, bom dia, sim utilizarão sempre os mesmos calculos.
Em anexo as imagens para ficar mais claro, não consegui anexar o arquivo em Excel devido ao seu tamanho.
As formulas utilizadas na aba 2 é o cont.ses(); que verifica se as bolas que são a base para o calculo, sairam nos resultados.
Dai como não tenho muita prática em VBA, fiz uma "pequena solução de contorno
", criando a aba 4 para que possa trazer os resultados e assim servir de base para a aba 2.
Atenciosamente,
Re: Macro copia e cola linha por linha
Enviado: Ter Mai 14, 2019 3:04 pm
por srobles
DANIELDDK,
Acredito que você já tenha os campos formulados com cont.ses() na aba de validação, correto?
Experimente o que deixo abaixo, adicionando um módulo á pasta de trabalho, e depois chame a macro através de um botão :
Código: Selecionar todos
Sub validarDados()
With ThisWorkbook
'Variáveis para controle e manipulação dos dados
Dim rangeValidacao, rangeValidado As Range
Dim linhaOrigemInicio, linhaOrigemFinal, linhaDestino As Long
Application.ScreenUpdating = False
'Aba que contém os dados de Origem
With .Sheets(1)
'Linha inicial
linhaOrigemInicio = 2
'Ultima linha da aba
linhaOrigemFinal = .Cells(Rows.Count, 1).End(xlUp).Row
End With
primeiraEtapa:
'Desabilitamos o modo copia do Excel
Application.CutCopyMode = False
'Com a Aba 1
With .Sheets(1)
'Ativamos
.Activate
'Laço a ser feito em cada linha da aba
'enquanto a linha atual for diferente da ultima
While linhaOrigemInicio <= linhaOrigemFinal
'Selecionamos a linha da coluna A até a O
.Range("A" & linhaOrigemInicio & ":O" & linhaOrigemInicio).Select
'Copiamos os dados
With Selection
.Copy
End With
'Incrementamos o valor para a proxima linha
linhaOrigemInicio = linhaOrigemInicio + 1
'Vamos para a etapa de validação
GoTo proximaEtapa
Wend
End With
'Ao término, exibimos a mensagem
MsgBox "Operação concluída com sucesso!", vbInformation, "Validação de dados"
Application.ScreenUpdating = True
'E saimos da rotina
Exit Sub
proximaEtapa:
'Com a Aba 2
With .Sheets(2)
'Ativamos a aba
.Activate
'Definimos o range de destino
'para colarmos os dados
Set rangeValidacao = Range("A2:O2")
'No intervalo determinado
With rangeValidacao
'Selecionamos
.Select
'E colamos as informações
With Selection
.PasteSpecial xlPasteValues, xlPasteSpecialOperationNone, False, False
End With
End With
'Desabilitamos o modo de cópia
Application.CutCopyMode = False
'Após validarmos os dados
'Definimos o range a ser transferido para a aba 3
'Altere 2 para a linha que contém os dados já calculados
Set rangeValidado = .Range("A2:O2")
'Selecionamos o intervalo
With rangeValidado
.Select
'Copiamos novamente o intervalo
With Selection
.Copy
End With
End With
End With
'E com a Aba 3 (Aba de destino final do dados)
With .Sheets(3)
'Ativamos
.Activate
'Definimos qual linha irá receber os dados validados
linhaDestino = .Cells(Rows.Count, 1).End(xlUp).Row + 1
'Selecionamos a linha na coluna A
.Range("A" & linhaDestino).Select
'Colamos os valores
With Selection
.PasteSpecial xlPasteValues, xlPasteSpecialOperationNone, False, False
End With
'Retornamos para o inicio do laço de validação
GoTo primeiraEtapa
End With
End With
End Sub
Se atente para alterar a seguinte linha, onde creio que você tenha os campos com as fórmulas para validação.
Código: Selecionar todos
'Altere 2 para a linha que contém os dados já calculados
Set rangeValidado = .Range("A2:O2")
Espero ter ajudado.
Abs
Re: Macro copia e cola linha por linha
Enviado: Ter Mai 14, 2019 6:01 pm
por DANIELDDK
srobles, boa noite! Tudo bem?
Cara era exatamente isto que estava tentando fazer... Até encontrei um outro código neste meio tempo, mas o seu ficou perfeito...
Parabéns e sucesso,
Obrigado
srobles escreveu: ↑Ter Mai 14, 2019 3:04 pm
DANIELDDK,
Acredito que você já tenha os campos formulados com cont.ses() na aba de validação, correto?
Experimente o que deixo abaixo, adicionando um módulo á pasta de trabalho, e depois chame a macro através de um botão :
Código: Selecionar todos
Sub validarDados()
With ThisWorkbook
'Variáveis para controle e manipulação dos dados
Dim rangeValidacao, rangeValidado As Range
Dim linhaOrigemInicio, linhaOrigemFinal, linhaDestino As Long
Application.ScreenUpdating = False
'Aba que contém os dados de Origem
With .Sheets(1)
'Linha inicial
linhaOrigemInicio = 2
'Ultima linha da aba
linhaOrigemFinal = .Cells(Rows.Count, 1).End(xlUp).Row
End With
primeiraEtapa:
'Desabilitamos o modo copia do Excel
Application.CutCopyMode = False
'Com a Aba 1
With .Sheets(1)
'Ativamos
.Activate
'Laço a ser feito em cada linha da aba
'enquanto a linha atual for diferente da ultima
While linhaOrigemInicio <= linhaOrigemFinal
'Selecionamos a linha da coluna A até a O
.Range("A" & linhaOrigemInicio & ":O" & linhaOrigemInicio).Select
'Copiamos os dados
With Selection
.Copy
End With
'Incrementamos o valor para a proxima linha
linhaOrigemInicio = linhaOrigemInicio + 1
'Vamos para a etapa de validação
GoTo proximaEtapa
Wend
End With
'Ao término, exibimos a mensagem
MsgBox "Operação concluída com sucesso!", vbInformation, "Validação de dados"
Application.ScreenUpdating = True
'E saimos da rotina
Exit Sub
proximaEtapa:
'Com a Aba 2
With .Sheets(2)
'Ativamos a aba
.Activate
'Definimos o range de destino
'para colarmos os dados
Set rangeValidacao = Range("A2:O2")
'No intervalo determinado
With rangeValidacao
'Selecionamos
.Select
'E colamos as informações
With Selection
.PasteSpecial xlPasteValues, xlPasteSpecialOperationNone, False, False
End With
End With
'Desabilitamos o modo de cópia
Application.CutCopyMode = False
'Após validarmos os dados
'Definimos o range a ser transferido para a aba 3
'Altere 2 para a linha que contém os dados já calculados
Set rangeValidado = .Range("A2:O2")
'Selecionamos o intervalo
With rangeValidado
.Select
'Copiamos novamente o intervalo
With Selection
.Copy
End With
End With
End With
'E com a Aba 3 (Aba de destino final do dados)
With .Sheets(3)
'Ativamos
.Activate
'Definimos qual linha irá receber os dados validados
linhaDestino = .Cells(Rows.Count, 1).End(xlUp).Row + 1
'Selecionamos a linha na coluna A
.Range("A" & linhaDestino).Select
'Colamos os valores
With Selection
.PasteSpecial xlPasteValues, xlPasteSpecialOperationNone, False, False
End With
'Retornamos para o inicio do laço de validação
GoTo primeiraEtapa
End With
End With
End Sub
Se atente para alterar a seguinte linha, onde creio que você tenha os campos com as fórmulas para validação.
Código: Selecionar todos
'Altere 2 para a linha que contém os dados já calculados
Set rangeValidado = .Range("A2:O2")
Espero ter ajudado.
Abs
Re: Macro copia e cola linha por linha
Enviado: Ter Mai 14, 2019 6:08 pm
por srobles
DANIELDDK,
Opa que boa notícia amigo. Fico mais que satisfeito em saber que a macro tenha atendido sua necessidade.
Abs