Vídeo recomendado
https://youtu.be/diWPPPhW-9E

Macro copia e cola linha por linha [Resolvido]

Fórum para dúvidas sobre os fundamentos da linguagem de programação Visual Basic no contexto do VBA
DANIELDDK
Acabou de chegar
Acabou de chegar
Mensagens: 8
Registrado em: Sáb Mai 11, 2019 5:15 pm

Macro copia e cola linha por linha [Resolvido]

Mensagem 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
Editado pela última vez por DANIELDDK em Ter Mai 14, 2019 6:12 pm, em um total de 1 vez.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


srobles
Jedi
Jedi
Mensagens: 805
Registrado em: Qua Mai 06, 2015 7:39 pm

Re: Macro copia e cola linha por linha

Mensagem 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


DANIELDDK
Acabou de chegar
Acabou de chegar
Mensagens: 8
Registrado em: Sáb Mai 11, 2019 5:15 pm

Re: Macro copia e cola linha por linha

Mensagem 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


srobles
Jedi
Jedi
Mensagens: 805
Registrado em: Qua Mai 06, 2015 7:39 pm

Re: Macro copia e cola linha por linha

Mensagem 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


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


DANIELDDK
Acabou de chegar
Acabou de chegar
Mensagens: 8
Registrado em: Sáb Mai 11, 2019 5:15 pm

Re: Macro copia e cola linha por linha

Mensagem 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 :D ", criando a aba 4 para que possa trazer os resultados e assim servir de base para a aba 2.

Atenciosamente,
Anexos
Aba4.JPG
Aba4.JPG (65.82 KiB) Exibido 5032 vezes
Aba1.JPG
Aba1.JPG (41.96 KiB) Exibido 5034 vezes
Aba2.JPG
Aba2.JPG (36.15 KiB) Exibido 5034 vezes
Aba3.JPG
Aba3.JPG (22.97 KiB) Exibido 5034 vezes


srobles
Jedi
Jedi
Mensagens: 805
Registrado em: Qua Mai 06, 2015 7:39 pm

Re: Macro copia e cola linha por linha

Mensagem 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


DANIELDDK
Acabou de chegar
Acabou de chegar
Mensagens: 8
Registrado em: Sáb Mai 11, 2019 5:15 pm

Re: Macro copia e cola linha por linha

Mensagem 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


srobles
Jedi
Jedi
Mensagens: 805
Registrado em: Qua Mai 06, 2015 7:39 pm

Re: Macro copia e cola linha por linha

Mensagem por srobles »

DANIELDDK,

Opa que boa notícia amigo. Fico mais que satisfeito em saber que a macro tenha atendido sua necessidade.

Abs


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Responder