Página 1 de 2

Transferência de Dados entre Planilhas e Tabelas

Enviado: 02 Out 2018 às 19:04
por Luisp
Pessoal. Boa noite!

Atualmente tenho 2 códigos idênticos que transferem dados de 2 tabelas (ListObjects tbCompra ; ListObjects tbVenda) para uma terceira tabela (ListObjects tbTotal), onde as informações são consolidadas.

Entretanto, os dados que alimentam as tabelas tbCompra e tbVenda estão em uma planilha (plan2 Carteira) na mesma pasta de trabalho.

Gostaria de contar a ajuda dos amigos para ajustar um dos códigos de forma que a tabela (tbTotal) receba os dados diretamente da planilha (plan2 Carteira) sem a necessidade de passar pelas tabelas tbCompra e tbVenda. Com isso, posso eliminar as 2 tabelas citadas, melhorar o desempenho do arquivo e simplificar a rotina de manipulação dos dados.
Importante destacar que os dados somente são migrados para a tbTotal quando as 5 colunas (A, B, C, D, E) de cada tabela tbCompra e tbVenda são preenchidas. Por exemplo, se as 5 colunas da tbCompra forem preenchidas e as da tbVenda não, então somente os dados da tbCompra é que migrarão.
As informações contidas no último parágrafo são apenas para conhecimento, pois o código atual já contempla esta regra.
Lembrando que na planilha (plan2 Carteira) os dados mudam de colunas e como não se trata de uma tabela, não sei o que substitui o ListObjects no atual código.
Estou enviando a planilha contendo os códigos para facilitar o entendimento.

Desde já agradeço a ajuda e permaneço à disposição para esclarecimentos adicionais.

Att

Luís

Transferência de Dados entre Planilhas e Tabelas

Enviado: 05 Out 2018 às 08:46
por Luisp
Pessoal. Bom dia!
Por favor, agradeço muito quem puder analisar e me ajudar a ajustar o código da minha planilha.
Muito obrigado.

Transferência de Dados entre Planilhas e Tabelas

Enviado: 08 Out 2018 às 15:30
por Luisp
Boa tarde!
Galera, por favor, me ajudem a resolver o problema que descrevi neste tópico.
Gratidão....

Re: Transferência de Dados entre Planilhas e Tabelas

Enviado: 08 Out 2018 às 16:51
por osvaldomp
Olá, Luis.

Se entendi corretamente, você quer inserir os dados na planilha Carteira e aí replicar os dados na planilha Total.

Há alguma conveniência/necessidade para não inserir os dados diretamente na planilha Total ?

Transferência de Dados entre Planilhas e Tabelas

Enviado: 08 Out 2018 às 21:29
por Luisp
Boa noite Osvaldo!
Primeiramente, obrigado pela atenção!
Sim, uma enorme conveniência, pois se tiver que digitar os dados na planilha total, terei um enorme retrabalho em face à grande base de dados que cresceu exponencialmente nos últimos meses. O arquivo que enviei contém apenas uma amostra de dados para exemplificar a rotina.
Além disso, o código desenvolvido na planilha total faz cálculos de preço médio que leva em consideração algumas variáveis/regras antes do cálculo, as quais são gerenciadas pela planilha carteira. Neste sentido, qualquer imput manual inserido erroneamente na planilha total, poderá gerar distorções de preço e consequentemente prejuízos ao negócio.
Há algum tempo iniciamos o projeto com apenas 3 tabelas (compra, venda e total). Naquela oportunidade, o nosso colega aqui do fórum, se não me falha a memória, o nome dele é babdallas, criou o código que está no anexo que enviei na 1ª msg, que executa perfeitamente o que necessito, porém o código atual considera especificamente a transferência de dados entre tabelas e também a transferência dos dados que estão dispostos em colunas sequenciais (a,b,c,d,e,f....).
Como o projeto cresceu e houve a necessidade de inserção de novas colunas,então criamos uma planilha (carteira) e atualmente os dados que necessitam ser transferidos para a tabela total já não estão mais dispostos em colunas sequenciais. Além disso, surgiu a necessidade da transferência de dados não ser mais entre tabelas, mas entre uma planilha comum (carteira) e uma tabela (total).
Meu conhecimento em vba é praticamente zero, por isso desde já peço relevar minha ignorância, mas imaginei um pequeno ajuste no código, substituindo o ListObjects por algum outro critério que referencia uma planilha contendo dados em colunas alternadas.
Enfim, resumidamente é isso.....
Me faça saber se existe algo mais que necessito informá-lo.
Mais uma vez reitero meu agradecimento por sua atenção.
Att
Luís

Re: Transferência de Dados entre Planilhas e Tabelas

Enviado: 08 Out 2018 às 22:06
por osvaldomp
Olá, Luís.
Entendi.
Como me parece que está difícil de você obter ajuda, eu me proponho a elaborar um novo código para replicar os dados da planilha Carteira na planilha Total. Eu acho menos trabalhoso e mais confiável escrever códigos novos do que fazer adaptações em códigos existentes.
No entanto não vou considerar outras operações tais como os cálculos que você comentou ou ordenação/classificação de dados na planilha Total.
Assim, você poderá resolver essa pendência inicial de replicar os dados. Depois, se precisar de um novo código para implementar mais operações, ou você desenvolve aí ou abre um novo tópico aqui no fórum.
Retorne se houver interesse.

Transferência de Dados entre Planilhas e Tabelas

Enviado: 09 Out 2018 às 13:05
por Luisp
Bom dia Osvaldo!
Ok, vamos em frente. Achei que o ajuste no código fosse algo mais simples, mas vamos seguir com a sua sugestão.
Muito obrigado pela atenção.
Abraço,
Luís

Transferência de Dados entre Planilhas e Tabelas

Enviado: 09 Out 2018 às 13:07
por Luisp
Estou online agora, caso preciso de algo......abç

Re: Transferência de Dados entre Planilhas e Tabelas

Enviado: 10 Out 2018 às 19:26
por osvaldomp
Olá, Luís.
Veja se ajuda.

1. instale os dois códigos abaixo em dois módulos comuns. No editor de VBA menu Inserir / Módulo, cole o primeiro código, insira mais um módulo e cole o segundo código.
2. preencha os dados na planilha Carteira, qualquer quantidade de linhas, e rode o primeiro código. Serão replicados os dados nas colunas F:J.
4. em seguida rode o segundo código.
5. se o resultado for satisfatório você poderá remover o apóstrofo inicial da linha 'OrdenaTabela do primeiro código, assim o segundo também será executado ao executar o primeiro.
Código: Selecionar todos
'replica os dados da planilha Carteira na Tabela da planilha Total_Compra_Venda
Sub ReplicaDados()
 Dim emp As Range, rng(), LR As Long
  For Each emp In Range("F12:F" & Cells(Rows.Count, 6).End(3).Row)
   With Sheets("Total_Compra_Venda").Range("tbTotal")
    If Application.CountA(.Columns(5)) = 0 Then
     LR = 0
    Else: LR = .Columns(5).Find(what:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row - 2
    End If
    rng = Array(emp, emp.Offset(, 15), emp.Offset(, 14), emp.Offset(, 16), emp.Offset(, 23))
     .Cells(LR + 1, 5).Resize(, 5) = rng
    rng = Array(emp, emp.Offset(, 15), emp.Offset(, 26), -emp.Offset(, 27), emp.Offset(, 36))
     .Cells(LR + 2, 5).Resize(, 5) = rng
   End With
  Next emp
 'OrdenaTabela
End Sub
Código: Selecionar todos
'ordena a Tabela tbTotal por EMPRESA, FORNECEDOR, DATA
Sub OrdenaTabela()
 With Sheets("Total_Compra_Venda").ListObjects("tbTotal") '.Sort
  .Sort.SortFields.Clear
  .Range.Sort key1:=.ListColumns("EMPRESA").DataBodyRange.Cells(1), Order1:=xlAscending, DataOption1:=xlSortNormal, _
    Key2:=.ListColumns("FORNECEDOR").DataBodyRange.Cells(1), Order2:=xlAscending, DataOption2:=xlSortNormal, _
     Key3:=.ListColumns("DATA").DataBodyRange.Cells(1), Order2:=xlAscending, DataOption2:=xlSortNormal, _
      SortMethod:=xlPinYin, MatchCase:=False, Header:=xlYes
 End With
End Sub

Transferência de Dados entre Planilhas e Tabelas

Enviado: 10 Out 2018 às 22:16
por Luisp
Boa noite Osvaldo!
Agradeço o envio do novo código!
Quando criei o tópico, comentei que tenho 2 tabelas independentes (tbCompra e tbVenda), ou seja, assim que todas as 5 colunas de ambas as tabelas são preenchidas, os dados são carregados para a tabelatotal, porém se apenas as 5 colunas da tabela de compra estiverem preenchidas, então apenas os dados de compras são carregados para a tabela total.
Isto posto, após realização de testes no seu código, segue algumas necessidades de ajustes para refletir o descrito acima:
1 - Assim que os dados de compra (colunas F, T, U,V,AC) forem preenchidos na plan Carteira, o código deverá levar apenas essa informação para a tabela total. Atualmente o seu código está preenchendo 1 linha com os dados de compra na tabelatotal e logo abaixo 1 linha com os dados de venda zerados (colunas F,U,AF,AG, AP) já que nem sempre haverá dados de venda no momento de digitação dos dados de compra.
2 - Fiz o teste no módulo, conforme seu orientação, porém necessito que o código fique na planilha Carteira e seja acionado através do evento change, a fim de transferir os dados imediatamente após o preenchimento de todas as respectivas colunas.
As 5 colunas dos dados de compra são: F, T, U,V,AC. Preciso que os dados migrem para a tabelatotal somente após o preenchimento obrigatoriamente de TODAS as 5 colunas.
As 6 colunas dos dados de venda são: F,U,AF,AG,AH,AP. Preciso que os dados migrem para a tabelatotal somente após o preenchimento obrigatoriamente de TODAS as 6 colunas.
Com relação ao módulo de ordenação, aparentemente está ok, mas vou teste-lo novamente após os ajustes solicitados.
Se tiver alguma dúvida, permaneço a disposição.
E.T. a tabela de vendas são 6 colunas e não 5 como havia mencionado nas msgs anteriores. Esqueci de mencionar a coluna AH

Re: Transferência de Dados entre Planilhas e Tabelas

Enviado: 12 Out 2018 às 15:59
por osvaldomp
osvaldomp escreveu: No entanto não vou considerar outras operações tais como os cálculos que você comentou ou ordenação/classificação de dados na planilha Total.
Isso inclui não verificar células de preenchimento obrigatório e tampouco o disparo do código de forma automática (WorkSheet_Change).
Luisp escreveu: ... assim que todas as 5 colunas de ambas as tabelas são preenchidas, os dados são carregados para a tabelatotal, porém se apenas as 5 colunas da tabela de compra estiverem preenchidas, então apenas os dados de compras são carregados para a tabela total.
Veja o comentário acima em azul.

Atualmente o seu código está preenchendo 1 linha com os dados de compra na tabelatotal e logo abaixo 1 linha com os dados de venda zerados (colunas F,U,AF,AG, AP) já que nem sempre haverá dados de venda ...
Eu tomei por base a planilha Carteira e nela todos os registros de Venda estão preenchidos. ;)
Para contornar, altere o código conforme abaixo.
substitua estas linhas
Código: Selecionar todos
rng = Array(emp, emp.Offset(, 15), emp.Offset(, 26), -emp.Offset(, 27), emp.Offset(, 36))
     .Cells(LR + 2, 5).Resize(, 5) = rng
por estas
Código: Selecionar todos
 If emp.Offset(, 26).Value <> "" Then
     rng = Array(emp, emp.Offset(, 15), emp.Offset(, 26), -emp.Offset(, 27), emp.Offset(, 36))
     .Cells(LR + 2, 5).Resize(, 5) = rng
 End If

Transferência de Dados entre Planilhas e Tabelas

Enviado: 14 Out 2018 às 07:25
por Luisp
Prezado Osvaldo. Bom dia!
Mesmo sem receber a solução plena para o meu tópico, agradeço pelo tempo que você dedicou para tentar me ajudar!
Sua solução atendeu parcialmente o que preciso, mas não resolveu o meu problema. "É como dar um dar um carrinho de controle remoto ao seu filho, mas sem o controle remoto. Ele até brinca, mas não consegue extrair o máximo do brinquedo".
Como você mesmo disse: "Você acha menos trabalhoso e mais confiável escrever códigos novos do que fazer adaptações em códigos existentes".
Mas a sua solução para mim é exatamente o contrário do que você pensa para você, ou seja, se eu quiser ter a plenitude do que pedi neste tópico, terei que abrir um novo tópico e contar com a boa vontade de outro colega para adaptar o seu código à realidade que necessito.
Com todo respeito, vou manter o tópico aberto para tentar encontrar a solução que preciso, mais reitero minha sincera minha gratidão por sua parcial ajuda.
Bom domingo.
Att
Luís

Re: Transferência de Dados entre Planilhas e Tabelas

Enviado: 14 Out 2018 às 09:39
por osvaldomp
Respondido via MP.

Transferência de Dados entre Planilhas e Tabelas

Enviado: 14 Out 2018 às 10:08
por Luisp
Osvaldo, como consigo enviar uma MP?

Re: Transferência de Dados entre Planilhas e Tabelas

Enviado: 14 Out 2018 às 10:15
por osvaldomp
No topo da página clique em Fórum / Membros / clique sobre o nick do usuário / clique no ícone "envelope"

Transferência de Dados entre Planilhas e Tabelas

Enviado: 14 Out 2018 às 10:38
por Luisp
Eu respondi a sua MP e inclusive também enviei uma MP para o colega que me ajudou a criar o código que postei neste tópico, mas percebi que as msg fiaram paradas na caixa de saída e não sei o motivo das msg não saírem da caixa de saída.
Caso não consiga enviar uma MP ao colega babdallas, não me resta alternativa a não ser continuar pedindo ajuda por aqui.

Transferência de Dados entre Planilhas e Tabelas

Enviado: 14 Out 2018 às 11:19
por Luisp
Osvaldo, como não tive o seu retorno sobre a MP, penso que talvez não consegui encaminha-la conforme dito na msg anterior. Sendo assim, vou continuar postando meus pedidos por aqui, visando obter ajuda dos colegas do forúm.

Transferência de Dados entre Planilhas e Tabelas

Enviado: 14 Out 2018 às 11:21
por Luisp
Pessoal. Bom dia!

Será que alguém pode me ajudar a finalizar este tópico, complementando a solução sugerida pelo colega Osvaldo no que tange:

1º - Ajustar o código criado pelo colega Osvaldo para inserir na tabelatotal apenas os novos dados digitados na planilha Carteira, pois atualmente cada vez que o código roda ele inseri na tabelatotal todos os dados digitados na planilha Carteira, gerando duplicidade de dados na tabelatotal;

2º - Após solução do item 1º, ajustar o código para ele rodar automaticamente através do evento change dentro da planilha Carteira, obedecendo o seguinte critério:
2.1 - Dados de compra são: Preciso que os dados migrem da planilha Carteira para a tabela (tabelatotal) que está dentro da planilha Total_Compra_Venda somente após o preenchimento de TODAS as 5 colunas (F,T,U,V,AC);
2.2 - Dados de venda: Preciso que os dados migrem da planilha Carteira para a tabela (tabelatotal) que está dentro da planilha Total_Compra_Venda somente após o preenchimento de TODAS as 6 colunas (F,U,AF,AG,AH,AP);

Agradeço a ajuda.
Obrigado.
Att
Luís

Re: Transferência de Dados entre Planilhas e Tabelas

Enviado: 26 Out 2018 às 15:19
por babdallas
Veja se ajuda.

Transferência de Dados entre Planilhas e Tabelas

Enviado: 26 Out 2018 às 22:05
por Luisp
Babdallas, boa noite!

Amigo o código ficou muito bom. Parabéns pelo excelente trabalho e sincera gratidão pela ajuda prestada!!
Só gostaria de lhe pedir mais um favor:
Quando enviei a planilha, acabei invertendo os nomes das colunas T (Fornecedor) e U (Data Compra). O correto é T (Data Compra) e U (Fornecedor).
Somente agora após testar o seu código e copia-lo para a planilha original que percebi a inversão. Até tentei alterar a sequencia das letras que representam as colunas dentro do seu código, mas não adiantou.
Se for possível realizar essa alteração, agradeço mais esta ajuda. Caso contrário, eu adapto a minha planilha ao seu código.
Muito obrigado,
Luís