Logo Hardware.com.br
viniciussn
viniciussn Novo Membro Registrado
13 Mensagens 1 Curtida

[Resolvido] Copiar dados de várias pastas de trabalhos diferentes.

#1 Por viniciussn 10/08/2018 - 14:01
Boa tarde pessoal!

Gostaria de uma ajuda se possível, pois eu não entendo muito bem de VBA.

Estou querendo criar um código onde eu tenho uma planilha "Resumo dos Ensaios" em uma pasta de trabalho. E também possuo várias outras pastas de trabalho onde servirão de origem para os dados a serem copiados para a planilha resumo dos ensaios (destino). Eu já até conseguir fazer funcionar com um código que achei na internet e fui alterando. Porém esta planilha "Resumo dos Ensaios" possui em média 22 colunas que deveriam ser preenchidas por outras 22 pastas de trabalho diferentes. Do jeito que eu fiz até agora, está funcionando para 3 colunas, ou seja para 3 pastas de trabalho. Eu consigo fazer para todas as 22, porém do jeito que estou fazendo o código vai ficar enorme. Eu queria fazer um código mais simples, onde ele automaticamente entendesse que caso exista as planilhas 001, 002, 003, 004... (e por aí vai...) dentro de uma pasta específica, as colunas sejam preenchidas com os dados corretos. E caso não exista todas as 22 dentro da pasta, ele só preenche a mesma quantidade de colunas de planilhas existentes. Não sei se conseguir explicar direito. Mas vou enviar o código e a planilha em anexo para vocês tentarem me entender e me ajudar da melhor forma possível. Desde já agradeço a todos!

Sub IMPORTAÇÃO()

Application.ScreenUpdating = False

Dim wsOrigem As Worksheet
Dim wsDestino As Worksheet

Workbooks.Open Filename:="C:\Users\Vinicius.Nascimento\Desktop\TESTE\001.xlsx"

Set wsOrigem = Workbooks("001.xlsx&quot.Worksheets("RESUMO&quot
Set wsDestino = Workbooks("RESUMO DOS ENSAIOS.xlsm&quot.Worksheets("RESUMO&quot

wsDestino.Range("E7&quot.Value = wsOrigem.Range("F10&quot.Value
wsDestino.Range("E8&quot.Value = wsOrigem.Range("F11&quot.Value
wsDestino.Range("E9&quot.Value = wsOrigem.Range("F12&quot.Value
wsDestino.Range("E10&quot.Value = wsOrigem.Range("F13&quot.Value
wsDestino.Range("E11&quot.Value = wsOrigem.Range("F33&quot.Value
wsDestino.Range("E12&quot.Value = wsOrigem.Range("F16&quot.Value
wsDestino.Range("E13&quot.Value = wsOrigem.Range("F17&quot.Value
wsDestino.Range("E14&quot.Value = wsOrigem.Range("F18&quot.Value
wsDestino.Range("E15&quot.Value = wsOrigem.Range("F19&quot.Value
wsDestino.Range("E16&quot.Value = wsOrigem.Range("F20&quot.Value
wsDestino.Range("E17&quot.Value = wsOrigem.Range("F21&quot.Value
wsDestino.Range("E18&quot.Value = wsOrigem.Range("F22&quot.Value
wsDestino.Range("E19&quot.Value = wsOrigem.Range("F23&quot.Value
wsDestino.Range("E20&quot.Value = wsOrigem.Range("F24&quot.Value
wsDestino.Range("E21&quot.Value = wsOrigem.Range("F25&quot.Value
wsDestino.Range("E22&quot.Value = wsOrigem.Range("F26&quot.Value
wsDestino.Range("E23&quot.Value = wsOrigem.Range("F27&quot.Value
wsDestino.Range("E24&quot.Value = wsOrigem.Range("F28&quot.Value
wsDestino.Range("E25&quot.Value = wsOrigem.Range("F29&quot.Value
wsDestino.Range("E26&quot.Value = wsOrigem.Range("F34&quot.Value
wsDestino.Range("E27&quot.Value = wsOrigem.Range("F35&quot.Value
wsDestino.Range("E31&quot.Value = wsOrigem.Range("F31&quot.Value
wsDestino.Range("E32&quot.Value = wsOrigem.Range("F37&quot.Value
wsDestino.Range("E33&quot.Value = wsOrigem.Range("F36&quot.Value
wsDestino.Range("E34&quot.Value = wsOrigem.Range("F32&quot.Value

Workbooks("001.xlsx&quot.Close SaveChanges:=True

Workbooks.Open Filename:="C:\Users\Vinicius.Nascimento\Desktop\TESTE\002.xlsx"

Set wsOrigem = Workbooks("002.xlsx&quot.Worksheets("RESUMO&quot
Set wsDestino = Workbooks("RESUMO DOS ENSAIOS.xlsm&quot.Worksheets("RESUMO&quot

wsDestino.Range("F7&quot.Value = wsOrigem.Range("F10&quot.Value
wsDestino.Range("F8&quot.Value = wsOrigem.Range("F11&quot.Value
wsDestino.Range("F9&quot.Value = wsOrigem.Range("F12&quot.Value
wsDestino.Range("F10&quot.Value = wsOrigem.Range("F13&quot.Value
wsDestino.Range("F11&quot.Value = wsOrigem.Range("F33&quot.Value
wsDestino.Range("F12&quot.Value = wsOrigem.Range("F16&quot.Value
wsDestino.Range("F13&quot.Value = wsOrigem.Range("F17&quot.Value
wsDestino.Range("F14&quot.Value = wsOrigem.Range("F18&quot.Value
wsDestino.Range("F15&quot.Value = wsOrigem.Range("F19&quot.Value
wsDestino.Range("F16&quot.Value = wsOrigem.Range("F20&quot.Value
wsDestino.Range("F17&quot.Value = wsOrigem.Range("F21&quot.Value
wsDestino.Range("F18&quot.Value = wsOrigem.Range("F22&quot.Value
wsDestino.Range("F19&quot.Value = wsOrigem.Range("F23&quot.Value
wsDestino.Range("F20&quot.Value = wsOrigem.Range("F24&quot.Value
wsDestino.Range("F21&quot.Value = wsOrigem.Range("F25&quot.Value
wsDestino.Range("F22&quot.Value = wsOrigem.Range("F26&quot.Value
wsDestino.Range("F23&quot.Value = wsOrigem.Range("F27&quot.Value
wsDestino.Range("F24&quot.Value = wsOrigem.Range("F28&quot.Value
wsDestino.Range("F25&quot.Value = wsOrigem.Range("F29&quot.Value
wsDestino.Range("F26&quot.Value = wsOrigem.Range("F34&quot.Value
wsDestino.Range("F27&quot.Value = wsOrigem.Range("F35&quot.Value
wsDestino.Range("F31&quot.Value = wsOrigem.Range("F31&quot.Value
wsDestino.Range("F32&quot.Value = wsOrigem.Range("F37&quot.Value
wsDestino.Range("F33&quot.Value = wsOrigem.Range("F36&quot.Value
wsDestino.Range("F34&quot.Value = wsOrigem.Range("F32&quot.Value

Workbooks("002.xlsx&quot.Close SaveChanges:=True

Workbooks.Open Filename:="C:\Users\Vinicius.Nascimento\Desktop\TESTE\003.xlsx"

Set wsOrigem = Workbooks("003.xlsx&quot.Worksheets("RESUMO&quot
Set wsDestino = Workbooks("RESUMO DOS ENSAIOS.xlsm&quot.Worksheets("RESUMO&quot

wsDestino.Range("G7&quot.Value = wsOrigem.Range("F10&quot.Value
wsDestino.Range("G8&quot.Value = wsOrigem.Range("F11&quot.Value
wsDestino.Range("G9&quot.Value = wsOrigem.Range("F12&quot.Value
wsDestino.Range("G10&quot.Value = wsOrigem.Range("F13&quot.Value
wsDestino.Range("G11&quot.Value = wsOrigem.Range("F33&quot.Value
wsDestino.Range("G12&quot.Value = wsOrigem.Range("F16&quot.Value
wsDestino.Range("G13&quot.Value = wsOrigem.Range("F17&quot.Value
wsDestino.Range("G14&quot.Value = wsOrigem.Range("F18&quot.Value
wsDestino.Range("G15&quot.Value = wsOrigem.Range("F19&quot.Value
wsDestino.Range("G16&quot.Value = wsOrigem.Range("F20&quot.Value
wsDestino.Range("G17&quot.Value = wsOrigem.Range("F21&quot.Value
wsDestino.Range("G18&quot.Value = wsOrigem.Range("F22&quot.Value
wsDestino.Range("G19&quot.Value = wsOrigem.Range("F23&quot.Value
wsDestino.Range("G20&quot.Value = wsOrigem.Range("F24&quot.Value
wsDestino.Range("G21&quot.Value = wsOrigem.Range("F25&quot.Value
wsDestino.Range("G22&quot.Value = wsOrigem.Range("F26&quot.Value
wsDestino.Range("G23&quot.Value = wsOrigem.Range("F27&quot.Value
wsDestino.Range("G24&quot.Value = wsOrigem.Range("F28&quot.Value
wsDestino.Range("G25&quot.Value = wsOrigem.Range("F29&quot.Value
wsDestino.Range("G26&quot.Value = wsOrigem.Range("F34&quot.Value
wsDestino.Range("G27&quot.Value = wsOrigem.Range("F35&quot.Value
wsDestino.Range("G31&quot.Value = wsOrigem.Range("F31&quot.Value
wsDestino.Range("G32&quot.Value = wsOrigem.Range("F37&quot.Value
wsDestino.Range("G33&quot.Value = wsOrigem.Range("F36&quot.Value
wsDestino.Range("G34&quot.Value = wsOrigem.Range("F32&quot.Value

Workbooks("003.xlsx&quot.Close SaveChanges:=True

Application.ScreenUpdating = True

End Sub

Anexos

Responder
EdsonBR
EdsonBR Veterano Registrado
273 Mensagens 280 Curtidas
#2 Por EdsonBR
10/08/2018 - 15:40
Boa tarde, @viniciussn, seja bem vindo ao fórum da Comunidade do Hardware!
viniciussn disse:
...caso exista as planilhas 001, 002, 003, 004... (e por aí vai...) dentro de uma pasta específica, as colunas sejam preenchidas com os dados corretos. E caso não exista todas as 22 dentro da pasta, ele só preenche a mesma quantidade de colunas de planilhas existentes.


Perguntas:
1) Essas N pastas de trabalho Origem estarão sozinhas dentro de uma pasta ou no mesmo diretório que a do Resumo dos Ensaios ou ainda misturada a outros arquivos?
2) Estarão sempre em sequência e começando com 001.xlsx ou podem pular algum valor?
3) Caso estejam pulando números, a planilha Resumo também ficará com colunas em branco intercaladas ou condensa tudo para as primeiras colunas?
viniciussn
viniciussn Novo Membro Registrado
13 Mensagens 1 Curtida
#3 Por viniciussn
10/08/2018 - 15:56
EdsonBR disse:
Boa tarde, @viniciussn, seja bem vindo ao fórum da Comunidade do Hardware!


Perguntas:
1) Essas N pastas de trabalho Origem estarão sozinhas dentro de uma pasta ou no mesmo diretório que a do Resumo dos Ensaios ou ainda misturada a outros arquivos?
2) Estarão sempre em sequência e começando com 001.xlsx ou podem pular algum valor?
3) Caso estejam pulando números, a planilha Resumo também ficará com colunas em branco intercaladas ou condensa tudo para as primeiras colunas?


Boa tarde @EdsonBR !

Respostas:

1)Bom, para facilitar estou trabalhando com todas elas em um mesmo diretório (dentro de uma única pasta), pois acho que deve ser mais fácil do que cada uma estar em um local diferente. Mas aceito sugestão no que for mais fácil de fazer.

2)A ideia inicial é que sejam em sequencia sim, porém pode existir um mês em que terei mais de 22 planilhas (arquivos/pastas de trabalho) diferentes. E como a planilha Resumo só possui 22 colunas para preencher, minha ideia era executar o código em 22 planilhas, copiar um novo arquivo e executar novamente com as demais (023, 024, 025...) Ficando com 02 (dois) arquivos "Resumo". Ou se conseguisse, queria que a partir da 22, fosse criado uma nova aba com os demais valores (023, 024, 025...). Mas isso deve ser muito complicado né... rs.

3)Bom, se for possível, eu gostaria que no caso de pular números, fossem condensados tudo para as primeiras colunas.

Desde já, agradeço seu apoio! Um forte abraço!
TRONNER
TRONNER Cyber Highlander Registrado
32.2K Mensagens 7.3K Curtidas
#4 Por TRONNER
11/08/2018 - 12:18
Por conta do trampo novo, estou me obrigando a conhecer mais do Excel e daí pergunto, ele possui entre sua infinidade e opções a integração com as mais variadas fontes e aí vem, sabendo que você pode agregar outras planilhas numa sintetizada, não seria mais fácil do que fazer por vba ?!
cool.png**Quando pensar ser um Golias, cuidado para não encontrar algum Davi**
veja.png Conheça os Poderosos e Gratuitos [ Iperius Backup ] e [ Iperius Remote ]
veja.png Todo dia um software novo e grátis [ clicando aqui ]
boa.gif Faça valer a sua voz com o Mudamos+ { https://www.mudamos.org }
EdsonBR
EdsonBR Veterano Registrado
273 Mensagens 280 Curtidas
#5 Por EdsonBR
11/08/2018 - 13:58
Boa tarde, @viniciussn

Fiz de forma que atendesse a todos os requisitos, ou seja, pode ter mais de 22 planilhas na pasta e se isso ocorrer cria nova planilha na mesma pasta de trabalho e se alguma numeração estiver faltando, condensa para preencher todas as colunas necessárias.
Verifique e dê retorno.

@TRONNER, com certeza! O Excel à partir das novas versões trouxe as ferramentas Power BI que eliminam grande parte daquilo que só era possível fazer como o VBA. Entretanto, a complexidade do todo da situação do colega Vinicius é maior do que o Power BI ou o nativo "Obter Dados Externos" pode dar conta.

Pra ilustar, basta dar uma olhada nos intervalos de Origem e Destino do código acima. Olhando mais atentamente, vc percebe que não é um intervalo contínuo. Tem saltos de célula no de Destino e no de Origem pior ainda, pois além de saltos, eles não se correspondem um a um com o de Destino. Isso é um tanto mais complexo de fazer com outras ferramentas. Já com VBA facilita muito.

Além do que, a grande maioria ainda usa versões mais antigas do Excel, principalmente em corporações.

Anexos

viniciussn
viniciussn Novo Membro Registrado
13 Mensagens 1 Curtida
#6 Por viniciussn
12/08/2018 - 19:26
EdsonBR disse:
Boa tarde, @viniciussn

Fiz de forma que atendesse a todos os requisitos, ou seja, pode ter mais de 22 planilhas na pasta e se isso ocorrer cria nova planilha na mesma pasta de trabalho e se alguma numeração estiver faltando, condensa para preencher todas as colunas necessárias.
Verifique e dê retorno.



Boa noite @EdsonBR!

Muito obrigado mesmo pela ajuda. Ficou excelente!!! Perfeito!

Que Deus lhe abençoe hoje e sempre!
viniciussn
viniciussn Novo Membro Registrado
13 Mensagens 1 Curtida
#7 Por viniciussn
13/08/2018 - 14:04
@EdsonBR e demais amigos! Boa tarde!

Realizei um teste em vários arquivos de onde trabalho. Ficou muito bom. Só tive que fazer umas pequenas alterações no código em questão do local dos dados. Porém gostaria de saber se podem me ajudar um pouco mais. Na planilha "Resumo", tem 03 linhas que deveriam ser preenchidas por outras planilhas, sem ser as que eu já havia falado (001, 002, 003, ...). As linhas que falo são as de número 28 e 29 (densidade e umidade) a partir da coluna E até a coluna Z.

O critério que eu precisaria utilizar é que se o número da estaca na planilha "Resumo" (E9, F9, G9, ...) estiver entre o "Trecho" (F13:G13, H13:I13, J13:K13, ...) da planilha (001, 002, 003, ...) (em anexo) de outra pasta de trabalho em outro diretório diferente do já informado ("C:\Users\Vinicius.Nascimento\Desktop\TESTE\"), o valor correspondente ao "Teor de umidade" (F35, H35, J35, ...) ou (F37, H37, J37, ...) seja copiado para o campo "Umidade" (E29, F29, G29, ...) da planilha "Resumo". E o valor correspondente a "Densidade aparente do solo seco" (F38, H38, J38, ...) seja copiado para o campo "Densidade" (E28, F28, G28, ...) da planilha "Resumo".

É meio confuso pra explicar digitando aqui, mas espero que tenham entendido. Caso alguém possa continuar me ajudando eu agradeceria muito.

Obrigado!

Anexos

EdsonBR
EdsonBR Veterano Registrado
273 Mensagens 280 Curtidas
#8 Por EdsonBR
13/08/2018 - 16:34
Boa tarde, Vinicius
viniciussn disse:
...O critério que eu precisaria utilizar é que se o número da estaca na planilha "Resumo" (E9, F9, G9, ...) estiver entre o "Trecho" (F13:G13, H13:I13, J13:K13, ...) da planilha (001, 002, 003, ...)

E quando o número da estaca não estiver previsto entre aqueles valores? Por exemplo, em sua planilha os valores na 001.xlsx são:
1700 a 1800, 1810 a 1840, 1841 a 1860

Tudo bem que no Resumo a estaca de exemplo é a 1850 então está no último trecho, ok. Mas se fosse 1805 que está faltando? ou 1650? ou 1900? Ou vazio?

Outra coisa:

viniciussn disse:
...o valor correspondente ao "Teor de umidade" (F35, H35, J35, ...) ou (F37, H37, J37, ...) seja copiado para o campo "Umidade" (E29, F29, G29, ...) da planilha "Resumo"...


Qual dos dois teores de umidades vai no Resumo, o primeiro (F35) ou o do Método Speedy (F37)?
viniciussn
viniciussn Novo Membro Registrado
13 Mensagens 1 Curtida
#9 Por viniciussn
13/08/2018 - 17:43
@EdsonBR, boa tarde!

EdsonBR disse:

E quando o número da estaca não estiver previsto entre aqueles valores? Por exemplo, em sua planilha os valores na 001.xlsx são:
1700 a 1800, 1810 a 1840, 1841 a 1860. Tudo bem que no Resumo a estaca de exemplo é a 1850 então está no último trecho, ok. Mas se fosse 1805 que está faltando? ou 1650? ou 1900? Ou vazio?


Certo. Os números de início e fim do "trecho" podem ou não ser contínuos nas colunas seguintes, pois o trecho pode variar pulando algumas estacas. Porém a estaca em estudo localizada na planilha "Resumo" sempre irá estar entre algum dos trechos.

Obs.: Pode ocorrer também que algumas das colunas do "Trecho" podem estar "vazias", nesse caso o valor a ser localizado, não será verificado neste intervalo.

EdsonBR disse:

Qual dos dois teores de umidades vai no Resumo, o primeiro (F35) ou o do Método Speedy (F37)?

Então... Somente irá ser preenchido um dos teores de umidade na planilha 001.xlsx, nunca os dois. Dessa forma, gostaria que a macro escolhesse o valor que estará preenchido com "resultado", pois a outra célula estará em branco (porém com fórmula). É uma opção que o laboratório tem, ou utiliza o primeiro método ou utiliza o segundo.
EdsonBR
EdsonBR Veterano Registrado
273 Mensagens 280 Curtidas
#11 Por EdsonBR
21/08/2018 - 19:27
Mesclando este tópico com o que vc abriu no Planilhando , pergunto:
1) Aqui vc pede apenas a Densidade e a Umidade, lá vc pede também Altura da Camada, Densidade, Umidade e Grau de Compactação, é isso?
2) A "Espessura de Camada" já não veio da Linha 33 das primeiras planilhas e inseridas na linha 11 da Resumo?
3) Os arquivos 001.xlsx, 002.xlsx, ..., 02x.xlsx desse outro caminho vão alimentar cada um deles, respectivamente, as colunas F, G, ... Z da Resumo igual foi feito no processo anterior? Ou tem que ir abrindo os 0xx.xlsx até encontrar onde a Estaca da Resumo corresponda.
viniciussn
viniciussn Novo Membro Registrado
13 Mensagens 1 Curtida
#12 Por viniciussn
21/08/2018 - 20:31
Boa noite @EdsonBR! Novamente, muito obrigado por entrar em contato!

EdsonBR disse:

1) Aqui vc pede apenas a Densidade e a Umidade, lá vc pede também Altura da Camada, Densidade, Umidade e Grau de Compactação, é isso?
2) A "Espessura de Camada" já não veio da Linha 33 das primeiras planilhas e inseridas na linha 11 da Resumo?

Então. Após você ter feito o código que me atendeu super bem! (Estou muito agradecido mesmo). Eu vi que "eu" havia errado a planilha (pasta de trabalho) que iria puxar a informação da altura da camada, com isso tive que fazer essa alteração. Quanto ao Grau de Compactação, eu preciso também, porém quando criei o tópico aqui no fórum, eu pensei em colocar como fórmula, pois é simples (uma pequena divisão dos dados já extraídos), mas caso já consiga colocar tudo junto eu ficaria muito grato.

EdsonBR disse:

3) Os arquivos 001.xlsx, 002.xlsx, ..., 02x.xlsx desse outro caminho vão alimentar cada um deles, respectivamente, as colunas F, G, ... Z da Resumo igual foi feito no processo anterior? Ou tem que ir abrindo os 0xx.xlsx até encontrar onde a Estaca da Resumo corresponda.

Eu precisaria de que fosse abrindo e verificando até encontrar o "Trecho" que corresponde a "Estaca" da planilha (pasta de trabalho) "Resumo".

Desde já, agradeço seu total apoio! Que Deus te abençoe sempre! Se eu puder até pagar por esse trabalho, é só falar, pois é muito importante para mim. Você é 10 no que faz!
viniciussn
viniciussn Novo Membro Registrado
13 Mensagens 1 Curtida
#14 Por viniciussn
23/08/2018 - 11:57
@EdsonBR, bom dia!

Andei analisando a minha planilha e vi algo que eu creio que vá facilitar para a elaboração do código. Eu acrescentei uma linha de nome "Nº Amostra Laboratório" (F16, H16, ...) nos arquivos do "DIRETÓRIO 2". O que eu desejo é que se o "Nº da Amostra" (E8, F8, ...) da planilha "RESUMO" for igual/encontrado nos arquivos do "DIRETÓRIO 2" em "Nº Amostra Laboratório" (F16, H16, ...), sejam copiados os seguintes dados dos arquivos do "DIRETÓRIO 2" para a planilha "RESUMO" conforme abaixo:

Alt. da Camada (F19, H19, ...) para Exp. da Camada (E11, F11, ...)
Densidade A. S. Seco (F39, H39, ...) para Densidade (E28, F28, ...)
Grau de Compact. (F42, H42, ...) para Grau Compac. (E30, F30, ...)
Camada (F17, H17, ...) para Camada (E34, F34, ...)
Teor de Umidade (F36, H36, ...) para (E29, F29, ...) ou Teor de Umidade (F38, H38, ...) para (E29, F29, ...)

Obs.1: Como já mencionei acima neste tópico, nos arquivos do "DIRETÓRIO 2" possuem dois "Teor de Umidade", porém somente um deles será preenchido pelo usuário. E este que for preenchido, deve ser copiado para a planilha "RESUMO".

Obs.2: Com essa alteração que eu realizei, acrescentando uma linha, não será mais necessário, o código entender qual é o "Trecho", somente localizar o "Número da Amostra". Caso não localize o nº da amostra, os dados acima não serão copiados.

EdsonBR disse:
Colega, mande pelo menos uns 2 ou 3 desses novos arquivos que serão abertos e que tenham as células correspondentes preenchidas. Facilitaria muito.

Segue anexo arquivos para ajudar na compreensão.

Espero que essa mudança que eu fiz, não dificulte mais a sua ajuda.

Desde já agradeço imensamente seu apoio.

Anexos

Responder Tópico
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal