none
Localizar, copiar e colar bloco de dados dinâmico RRS feed

  • Pergunta

  • I-Aê Pessoal, blz?

    (O questionamento foi reeditado, por favor, leia com atenção)

    PROBLEMAArquivo Excel exemplo do caso: http://1drv.ms/1q1VqQT 

    1. Preciso que o código VBA ao selecionar na célula PLAN1.C3 e lançar a previsão (D5:D14), seja, com o clicar em "Validar Previsao", enviado e colado especial  em PLAN2, conforme posição do vendedor. Exemplo: MARIA fica na coluna "H" em PLAN2.

    2. Depois preciso que faça o inverso: Com base no selecionado em PLAN1.C3, e clicando em "retornar previsao" o vendedor selecionado tenha sua informação coletada em PLAN2 e colada especial em PLAN1.

    Veja que cada vendedor guarda uma coluna fixa em PLAN2 e que PLAN1 só temos só temos uma coluna tento para planejar como para revisar N-Vendedores. Ademais, precisamos colar especial pois alguns desses valores são formulas que precisaram ser preservadas. 

    Abaixo, explicação complementar da visão do anexo:

    *********************************

    Seguinte, em uma planilha compartilhada, tenho "PLAN1" com a visão de lançamento individual da previsão de vendas.  

    **************************

    [KELLY]

    PRODUTOS | META | PREVISÃO

    Amaciante  | 200   |  150

    Detergente| 50     |     60

    **************************

    Na aba "PLAN2" temos a visão consolidada dessa PREVISÃO, somente previsões, não há metas:

    **************************

    PRODUTOS | KELLY | PEDRO | CARLOS 

    Amaciante  |   150  | 130      | 60

    Detergente|     60  | 30        | 10

    **************************

    Abaixo, o código da nossa segunda necessidade explanada no item "PROBLEMA" início do texto, mas a questão é que preciso usar uma linha que retorne o bloco: "Range(Cells(0,1), Cells(0,14))." e que copie/cole especial.

    **************************

    Sub ProcurarCopiar()
    Dim Celula As Range
    Dim Valor

    Valor = Sheets("PLAN1").[C3].Value

    For Each Celula In Sheets("PLAN2").UsedRange
    If Celula.Value = Valor Then

    'DADOS PARA TRANSPORTAR
    Sheets("PLAN1").[D5].Value = Celula.Offset(1, 0).Value
    Sheets("PLAN1").[D6].Value = Celula.Offset(2, 0).Value
    Sheets("PLAN1").[D7].Value = Celula.Offset(3, 0).Value
    Sheets("PLAN1").[D8].Value = Celula.Offset(4, 0).Value



    Exit For
    End If
    Next
    End Sub

    *********************************

    Desde já agradeço a todos!



    sábado, 30 de agosto de 2014 14:22

Todas as Respostas

  • Não entendi muito bem o que pretende, mas não seria melhor utilizar fórmulas?

    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    sexta-feira, 5 de setembro de 2014 19:43
    Moderador
  • Prezado Felipe,

    Explicando de outo modo....

    Em uma pasta de trabalho (que costumam chamar de planilha) terei duas planilhas (que costumam chamar abas) PREVISAO e BASES.

    Em PREVISAO será lançado a PREVISÃO (em D5:D13) selecionando o nome do vendedor planejador na lista suspensa em C3, que quando salvar, será copiada para BASES na qual o título será o nome (= lista suspensa) do planejador  entre D4 e L4 e logo abaixo receberá aquele valor da PREVISÃO, exemplo: (D5:D13).

    Supondo que tenhamos compreendido o descrito acima....

    O inverso também ocorrerá quando eu for revisar cada planejamento, ou seja, ao selecionar o vendedor, quero trazer o planejado da BASE para a visão da aba PREVISÃO, conforme lista suspensa em C3.

    Solicito que ignore qualquer outra possibilidade como "usar formulas", pois o que informei ficou restrito a minha necessidade. Pois os demais automações já consegui vencer.

    Segue link da base exemplo: http://1drv.ms/1qn50NG

    Desde já agradeço sua atenção brother!

     

     


    :P

    sábado, 6 de setembro de 2014 03:04
  • Olá Bruno, vamos ver se eu entendi...

    O que você chamou inicialmente de plan1 seria esta plan PROJEÇÃO e o que chamou de plan2 seria a plan BASES, certo?

    Bom, para passar os dados da plan PROJEÇÃO para base eu criaria um código para encontrar horizontalmente a posição da área de venda (função MATCH) e colar os dados abaixo da célula encontrada. Acho que da plan2 para a plan1 seria a mesma coisa...

    Na realidade, ficou confuso pra mim também. A planilha que você postou não tem muita relação com a dúvida e o modelo postado inicialmente...

    Michel Macário
    sábado, 6 de setembro de 2014 18:25
  • Michel,

    Como faço o código abaixo que só retornar os valores por linha individual "Sheets("PLAN").[D5].Value = pCelula.Offset(0, 1).Value", retornar logo um bloco mair de dador usando uma linha de código? Tipo "....Cells(0,1), Cells(0,7)...."?

    *********************************

    Sub Previsao()
    Dim pCelula As Range
    Dim pValor

    PValor = Sheets("PLAN1").[C3].Value

    For Each PCelula In Sheets("PLAN2").UsedRange
    If PCelula.Value = pValor Then

    Sheets("PLAN").[D5].Value = pCelula.Offset(0, 1).Value

    Exit For
    End If
    Next
    End Sub

    *********************************


    :P

    domingo, 7 de setembro de 2014 12:38
  • Paulo, isto resolve?

    Sub PassarDados()
    
    Set Pl1 = Worksheets("Plan1")
    Set Pl2 = Worksheets("Plan2")
    
    Pl1.Range("A1:C1").Value = Pl2.Range("A1:C1").Value
    
    End Sub
    

    Att. Michel Macário
    domingo, 7 de setembro de 2014 13:17
  • Michel,

    Não resolve pois conforme o código original, a posição é dinâmica: 

    PValor = Sheets("PLAN1").[C3].Value

    For Each PCelula In Sheets("PLAN2").UsedRange
    If PCelula.Value = pValor Then

    outra coisa, a planilha que postei faz a segunda parte do que preciso, mas ela retornar linha por linha, preciso do bloco todo em um único código, por isso tantei usar CELLS(0,1) CELLS(0, 200).

    Valeu.

     




    :P

    domingo, 7 de setembro de 2014 13:29
  • Então você precisa de algo assim:

    Sub PassarDados()
    
    Set Pl1 = Worksheets("Plan1")
    Set Pl2 = Worksheets("Plan2")
    
    linha = 1
    
    Pl1.Range("A1:C1").Value = Pl2.Range(Pl2.Cells(linha, 1), Pl2.Cells(linha, 3)).Value
    
    End Sub
    Aí você usa uma função de procura para atribuir um valor a variável linha.

    Ou se for para a coluna é só alterar o código, jogando a variável na posição da coluna.

    Att. Michel Macário

    • Editado Michel MO domingo, 7 de setembro de 2014 13:45 Erro ortográfico
    domingo, 7 de setembro de 2014 13:44
  • Michel, bom dia!

    Não compreendi, por favor, releia meu questionamento principal e arquivo que anexei, pois reeditei.

    Valeu!


    :P

    domingo, 7 de setembro de 2014 14:21