none
Copiar e colar informacoes de uma aba para tabela para diferentes linhas RRS feed

  • Pergunta

  • Eu tenho em uma aba informações que quero copiar para um outra aba em uma linha especifica que muda de acordo com um código YB..

    Sou bem noob em VBA o máximo que consegui fazer foi copiar e colar em locais específicos.

    O que eu queria era algo do tipo abaixo

    Se código = YB152

    copiar (C7;N7....) e colar na em(C3; D3...)

    Se código = YB151

    etc

    A questão é que existem 300 códigos e acredito que seria inviável fazer 300 SEs, mas como disse sou noob em VBA.

    Queria saber qual o melhor jeito de fazer.

    Qualquer ajuda é bem vinda, obrigado!


    • Editado Thiago Krebs quarta-feira, 28 de dezembro de 2016 17:17
    quarta-feira, 28 de dezembro de 2016 17:16

Respostas

  • Sub Main()
        Dim wsRelatório As Worksheet
        Dim wsBanco As Worksheet
        Dim Row As Variant
        
        With ThisWorkbook
            Set wsRelatório = .Worksheets("Relatório")
            Set wsBanco = .Worksheets("Plan1")
        End With
    
        Row = Application.Match(wsRelatório.Range("K7"), wsBanco.Columns("B"), 0)
        If IsError(Row) Then
            MsgBox "Código " & wsRelatório.Range("K7") & " não encontrado.", vbExclamation
            GoTo Quit
        End If
    
        wsBanco.Rows(Row, "C") = wsRelatório.Range("D7")
        wsBanco.Rows(Row, "D") = wsRelatório.Range("N7")
        wsBanco.Rows(Row, "E") = wsRelatório.Range("R7")
        '...e assim por diante
    
    Quit:
    End Sub
    
    

    Recomendo que você dê nome aos intervalos fixos de relatório. Daí, sua rotina ficará bem mais limpa:

        wsBanco.Rows(Row, "C") = [Projeto]
        wsBanco.Rows(Row, "D") = [Líder]
        wsBanco.Rows(Row, "E") = [DataAtualização]
        '...e assim por diante


    http://www.ambienteoffice.com.br || Grupo de WhatsApp: https://chat.whatsapp.com/K1uey5Q4yJdKnsgWkVQAZG

    • Marcado como Resposta Thiago Krebs sexta-feira, 3 de março de 2017 17:01
    quinta-feira, 29 de dezembro de 2016 17:36
    Moderador

Todas as Respostas

  • Você tem que montar uma tabela DE-PARA. Essa tabela consiste basicamente em você escrever numa coluna a origem dos dados e na outra o destino.

    Depois disso, fazer um laço nesses dados para obter todos os cenários.

    Você montou uma tabela de DE-PARA? Se sim, poste um link de sua pasta de trabalho aqui.


    http://www.ambienteoffice.com.br || Grupo de WhatsApp: https://chat.whatsapp.com/K1uey5Q4yJdKnsgWkVQAZG


    quarta-feira, 28 de dezembro de 2016 22:31
    Moderador
  • Sim montei. Em minha primeira aba 'Relatório' tenho um "tabela" e quero que todos os campos sejam copiados e colados em minha outra tabela.

    Primeira aba:

    Segunda aba:

    De acordo com o código selecionada no 'Relatório' quero que as informações sejam coladas na linha especifica, neste exemplo acima caso o código fosse YB152 as informações teriam de ser coladas na linha 4 de cada coluna.

    Link com o arquivo: https://1drv.ms/x/s!AixekfDlHDNMiA5I5OoPQQMB3Sif

    obs: não consigo colocar imagens

    quinta-feira, 29 de dezembro de 2016 13:37
  • Não colora abas do Excel de branco. Isso pode confundir o usuário se há mais de uma planilha selecionada no momento.

    ---

    Não consegui entender seu exemplo, tem muita pouca coisa preenchida.

    Não sei exatamente o que deve ser copiado para onde.


    http://www.ambienteoffice.com.br || Grupo de WhatsApp: https://chat.whatsapp.com/K1uey5Q4yJdKnsgWkVQAZG

    quinta-feira, 29 de dezembro de 2016 14:28
    Moderador
  • Eu fiz upload do arquivo novamente e numerei os campos.

    EX;

    Para código YB152

    D7 =1 (Relatório) ----> Colar em C4 (Plan1)

    N7 =1 (Relatório) ----> Colar em D4 (Plan1)

    R7 =1 (Relatório) ----> Colar em E4 (Plan1)

    C10 =1 (Relatório) ----> Colar em F4 (Plan1)

    F14 =1 (Relatório) ----> Colar em G4 (Plan1)

    G14 =1 (Relatório) ----> Colar em H4 (Plan1)

    H14 =1 (Relatório) ----> Colar em I4 (Plan1)

    I14 =1 (Relatório) ----> Colar em J4 (Plan1)

    J14 =1 (Relatório) ----> Colar em K4 (Plan1)

    K14 =1 (Relatório) ----> Colar em L4 (Plan1)

    L14 =1 (Relatório) ----> Colar em M4 (Plan1)

    M14 =1 (Relatório) ----> Colar em N4 (Plan1)

    N14 =1 (Relatório) ----> Colar em O4 (Plan1)

    O14 =1 (Relatório) ----> Colar em P4 (Plan1)

    P13 =1 (Relatório) ----> Colar em Q4 (Plan1)

    C17 =1 (Relatório) ----> Colar em R4 (Plan1)

    C20 =1 (Relatório) ----> Colar em S4 (Plan1)

    Para código YB151

    D7 =1 (Relatório) ----> Colar em C3 (Plan1)

    N7 =1 (Relatório) ----> Colar em D3 (Plan1)

    R7 =1 (Relatório) ----> Colar em E3 (Plan1)

    C10 =1 (Relatório) ----> Colar em F3 (Plan1)

    F14 =1 (Relatório) ----> Colar em G3 (Plan1)

    G14 =1 (Relatório) ----> Colar em H3 (Plan1)

    H14 =1 (Relatório) ----> Colar em I3 (Plan1)

    I14 =1 (Relatório) ----> Colar em J3 (Plan1)

    J14 =1 (Relatório) ----> Colar em K3 (Plan1)

    K14 =1 (Relatório) ----> Colar em L3 (Plan1)

    L14 =1 (Relatório) ----> Colar em M3 (Plan1)

    M14 =1 (Relatório) ----> Colar em N3 (Plan1)

    N14 =1 (Relatório) ----> Colar em O3 (Plan1)

    O14 =1 (Relatório) ----> Colar em P3 (Plan1)

    P13 =1 (Relatório) ----> Colar em Q3 (Plan1)

    C17 =1 (Relatório) ----> Colar em R3 (Plan1)

    C20 =1 (Relatório) ----> Colar em S3 (Plan1)


    Esta planilha possui somente dois códigos YB151 e o YB152, mas a que irei fazer terá no mín. 70 códigos.

    quinta-feira, 29 de dezembro de 2016 15:59
  • Sub Main()
        Dim wsRelatório As Worksheet
        Dim wsBanco As Worksheet
        Dim Row As Variant
        
        With ThisWorkbook
            Set wsRelatório = .Worksheets("Relatório")
            Set wsBanco = .Worksheets("Plan1")
        End With
    
        Row = Application.Match(wsRelatório.Range("K7"), wsBanco.Columns("B"), 0)
        If IsError(Row) Then
            MsgBox "Código " & wsRelatório.Range("K7") & " não encontrado.", vbExclamation
            GoTo Quit
        End If
    
        wsBanco.Rows(Row, "C") = wsRelatório.Range("D7")
        wsBanco.Rows(Row, "D") = wsRelatório.Range("N7")
        wsBanco.Rows(Row, "E") = wsRelatório.Range("R7")
        '...e assim por diante
    
    Quit:
    End Sub
    
    

    Recomendo que você dê nome aos intervalos fixos de relatório. Daí, sua rotina ficará bem mais limpa:

        wsBanco.Rows(Row, "C") = [Projeto]
        wsBanco.Rows(Row, "D") = [Líder]
        wsBanco.Rows(Row, "E") = [DataAtualização]
        '...e assim por diante


    http://www.ambienteoffice.com.br || Grupo de WhatsApp: https://chat.whatsapp.com/K1uey5Q4yJdKnsgWkVQAZG

    • Marcado como Resposta Thiago Krebs sexta-feira, 3 de março de 2017 17:01
    quinta-feira, 29 de dezembro de 2016 17:36
    Moderador
  • wsBanco.Rows(Row, "C") = wsRelatório.Range("D7")
    wsBanco.Rows(Row, "D") = wsRelatório.Range("N7")
    wsBanco.Rows(Row, "E") = wsRelatório.Range("R7")

    Esta dando erro nesta parte do código, logo na primeira linha.

    "Erro em tempo de execução '1004':

    Erro de definição de aplicativo ou de definição de objeto"

    E muito obrigado!!

    quinta-feira, 29 de dezembro de 2016 18:27
  • Erro meu.

    Troque:

    wsBanco.Rows(Row, "C") = wsRelatório.Range("D7")
    

    por:

    wsBanco.Cells(Row, "C") = wsRelatório.Range("D7")
    


    http://www.ambienteoffice.com.br || Grupo de WhatsApp: https://chat.whatsapp.com/K1uey5Q4yJdKnsgWkVQAZG

    quinta-feira, 29 de dezembro de 2016 19:18
    Moderador
  • Obrigado!
    sexta-feira, 13 de janeiro de 2017 13:13
  • Como  eu poderia fazer pra copiar uma informação do Banco  para o Relatório (seguindo a mesma lógica).

    Para essas duas linhas eu queria que ele copiasse da (Row, "C") e colasse em D7 e (Row, "D") e colasse N7

    wsBanco.Cells(Row, "C") = wsRelatório.Range("D7")
    wsBanco.Cells(Row, "D") = wsRelatório.Range("N7")

    sexta-feira, 13 de janeiro de 2017 13:32
  • Está certo dessa forma, Thiago. Não está conseguindo?

    http://www.ambienteoffice.com.br || Grupo de WhatsApp: https://chat.whatsapp.com/K1uey5Q4yJdKnsgWkVQAZG

    sexta-feira, 13 de janeiro de 2017 13:52
    Moderador
  • Consegui aqui, eu que tinha errado uma coisa. 

    Obrigado!!

    terça-feira, 17 de janeiro de 2017 13:12