Ir ao conteúdo
  • Cadastre-se

Excel Copiar valor de uma planilha para outra sem substituir - VBA Excel


Posts recomendados

Pessoal eu estou com uma situação delicada,

 

Tenho um livro do excel com duas planilhas para processamento de facturas, na Folha1 insiro os dados digitalizados e depois uso uma macro para copiar estes dados para a folha2 por critério. Tenho uma segunda macro que limpa os dados copiados e reorganiza a infomação na Folha1 para não existirem linhas vazias.

 

O problema é que os dados da Folha2 já copiados anteriormente são sempre substituídos pelos novos da Folha1 e eu preciso de um código que apenas cole nas linhas vazias para poder ter um histórico.

 

Abixo a macro que usei:

 

Sub Digitalização3()
          ultimaLinha = Folha1.Cells(Rows.Count, "a").End(xlUp).Row
  lin = 2
  For i = 2 To ultimaLinha
  
        If Folha1.Cells(i, 5) = "Feito" Then
            Folha2.Cells(lin, 1) = Folha1.Cells(i, 1)
            Folha2.Cells(lin, 2) = Folha1.Cells(i, 2)
            Folha2.Cells(lin, 3) = Folha1.Cells(i, 3)
            Folha2.Cells(lin, 4) = Folha1.Cells(i, 4)
            Folha2.Cells(lin, 5) = Folha1.Cells(i, 5)
        lin = lin + 1
        
        End If
        
        If Folha1.Cells(i, 5) = "Feito" Then
               Folha1.Cells(i, 1).ClearContents
               Folha1.Cells(i, 2).ClearContents
               Folha1.Cells(i, 3).ClearContents
               Folha1.Cells(i, 4).ClearContents
               Folha1.Cells(i, 5).ClearContents
                   
    End If
    Next
    
End Sub

 

Em  anexo envio um ficheiro modelo.

 

Desde já agradeço pela ajuda.

 

Processamento MCI.xlsx

Link para o comentário
Compartilhar em outros sites

Bem vindo, @4hosanaj

 

Ao invés de lin = lin + 1 refira-se também à última linha preenchida da Folha2 calculando lin no início do Loop. Exemplo:

 

Sub Digitalização3()
  ultimaLinha = Folha1.Cells(Rows.Count, "a").End(xlUp).Row
  For i = 2 To ultimaLinha
        If Folha1.Cells(i, 5) = "Feito" Then
            lin = Folha2.Cells(Rows.Count, "a").End(xlUp).Row + 1
            Folha2.Range(Folha2.Cells(lin, 1), Folha2.Cells(lin, 5)).Value = _
            Folha1.Range(Folha1.Cells(i, 1), Folha1.Cells(i, 5)).Value
            Folha1.Range(Folha1.Cells(i, 1), Folha1.Cells(i, 5)).ClearContents
        End If
    Next
End Sub

 

Link para o comentário
Compartilhar em outros sites

@Edson Luiz Branco Ainda assim não funciona, envio em anexo o ficheiro com o código inicial funcionando (mover os dados de uma folha para outra), e se possível efectuar por favor a alteração do códico para o efeito pretendido.

 

Desde já agradeço a atenção ao assunto. 

 

Nota: Envio Zipado por que não aceita carregar livro com permissão para macros.

Processamento MCI.zip

Link para o comentário
Compartilhar em outros sites

Boa tarde, @4hosanaj

 

De duas uma: ou eu não entendi o que você deseja, ou você não chegou a testar o código que passei (veja no anexo).

 

Só se o que você quer se refere é a essa tal segunda macro...

Em 12/08/2018 às 13:21, 4hosanaj disse:

...Tenho uma segunda macro que limpa os dados copiados e reorganiza a infomação na Folha1 para não existirem linhas vazias.

 

Se for isso, ela não estava presente no anexo de sua mensagem.

Processamento MCI1.zip

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...