Página 1 de 2
[RESOLVIDO] - Criar Folha com resumo de Lojas
Enviado: 23 Fev 2021 às 08:10
por foliveir84
Olá a todos,
precisava de uma grande ajuda.
No local onde trabalho existem 2 lojas, e o sistema permite exportar em cada uma um csv com o relatório de vendas de cada produto em cada loja. No entanto precisava de juntar esses 2 ficheiros e criar uma folha com o resumo de vendas. stocks, etc de ambas as lojas só numa folha. Por vezes podem existir produtos na loja 1 que não existe na loja 2 e o contrário também é possível.
Anexo envio um exemplo do que pretendo.
A folha 1 será aquilo que pretendo obter, tem lá a descrição daquilo que seria expectável ter, a folha 2 é um pouco do que consigo exportar da loja 1 e a folha 3 o mesmo mas referente à loja2 . é possível fazer isto?
muito obrigado desde já pela vossa ajuda
Re: Criar Folha com resumo de Lojas
Enviado: 23 Fev 2021 às 10:05
por osvaldomp
Qual o resultado desejado nos casos de códigos duplicados ?
Exemplos:
Loja1 - A3 e A4 ~~~> é para replicar ambos na planilha Resumo, ou replicar só uma vez e somar os estoques/vendas ? Ou ... ?
Esse código se repete em Loja2 - A24 porém com uma única localização. O que fazer nesses casos ?
O código 5109715 está duplicado em Loja1 - A56:A57 e está duplicado em Loja2 - A4:A5. O que fazer nesses casos ?
Re: Criar Folha com resumo de Lojas
Enviado: 23 Fev 2021 às 10:26
por foliveir84
Olá, são para ignorar todos os que não tiverem na localização "Farmácia Santa Ana" - Loja 1 e "FARMACIA SANTA ANA JARDIM". As outras localizações são virtuais e não têm vendas assim como os produtos que diz existirem em stock, não existem. deu para perceber?
Tinha me esquecido de referir isso
Re: Criar Folha com resumo de Lojas
Enviado: 23 Fev 2021 às 10:51
por foliveir84
Lembrei me agora, que também consigo exportar no formato do anexo abaixo, verifique se é mais fácil, ou se não aienta de nada
Re: Criar Folha com resumo de Lojas
Enviado: 23 Fev 2021 às 10:57
por osvaldomp
Informe sobre as diferenças em relação ao anterior.
Re: Criar Folha com resumo de Lojas
Enviado: 23 Fev 2021 às 11:07
por foliveir84
Esta já não tem os códigos repetidos das diferentes localizações e tem menos campos, pois o filtro é efetuado antes no sistema informatico.
è apenas um detalhe de produtos vendidos que extraio de cada uma das lojas
Re: Criar Folha com resumo de Lojas
Enviado: 23 Fev 2021 às 11:22
por osvaldomp
Então vou elaborar uma solução via macro para o segundo arquivo.
Quais as colunas a serem somadas, C e E até W ?
A coluna LOCALIZAÇÃO ficará vazia na planilha Resumo.
Re: Criar Folha com resumo de Lojas
Enviado: 23 Fev 2021 às 11:32
por foliveir84
Boas, basta somar Coluna C e depois de H a V.
Sendo em macro, que não sei o que é, se depois forem mais linhas de produtos é fácil de o fazer, é só colar os resumos de cada loja e a planilha de resumo actualiza tudo?
Re: Criar Folha com resumo de Lojas
Enviado: 23 Fev 2021 às 14:48
por osvaldomp
foliveir84 escreveu: ↑23 Fev 2021 às 11:32
Sendo em macro, que não sei o que é,...
Coloquei "macros no excel" na busca do Sábio Google; veja nos links abaixo:
https://support.microsoft.com/pt-br/off ... 5fb3d581a8
https://www.hashtagtreinamentos.com/com ... o-no-excel
... se depois forem mais linhas de produtos é fácil de o fazer, é só colar os resumos de cada loja e a planilha de resumo actualiza tudo?
Exato, preencha as planilhas Loja1 e Loja2 com qualquer quantidade de registros em cada uma e rode o código para atualizar a planilha Resumo.
Instale uma cópia do código abaixo em um módulo comum, assim:
1. copie o código daqui
2. a partir de qualquer das planilhas tecle 'Alt+F11' para acessar o editor de VBA
3. no menu do editor / Inserir / Módulo
4. cole o código na janela em branco que vai se abrir
5. feito! 'Alt+Q' para retornar para a planilha e testar
para rodar o código:
6. tecle 'Alt+F8' / selecione a macro MontaResumo / Executar, ou insira um botão na planilha e vincule-o à macro ou vincule-a a um atalho de teclado (Alt+F8 / Opções).
Essas três opções para rodar o código podem ser implantadas isoladamente ou em conjunto.
Código: Selecionar todosSub MontaResumo()
Dim c As Long, LR As Long
Application.ScreenUpdating = False
If Sheets("Resumo").[A2] <> "" Then Sheets("Resumo").Range("A2:W" & Sheets("Resumo").Cells(Rows.Count, 1).End(3).Row) = ""
Sheets("Loja1").Range("A2:W" & Sheets("Loja1").Cells(Rows.Count, 1).End(3).Row).Copy Sheets("Resumo").[A2]
Sheets("Loja2").Range("A2:W" & Sheets("Loja2").Cells(Rows.Count, 1).End(3).Row).Copy
Sheets("Resumo").Cells(Rows.Count, 1).End(3)(2).PasteSpecial xlValues
With Sheets("Resumo")
LR = .Cells(Rows.Count, 1).End(xlUp).Row
.Range("A2:W" & LR).Sort Key1:=.[A2], Order1:=xlAscending
For c = 3 To LR
If .Cells(c, 1) = .Cells(c - 1, 1) Then
.Cells(c, 3).Copy
.Cells(c - 1, 3).PasteSpecial Paste:=xlValues, Operation:=xlAdd
.Cells(c, 8).Resize(, 15).Copy
.Cells(c - 1, 8).PasteSpecial Paste:=xlValues, Operation:=xlAdd
c = c + 1
End If
Next c
.Range("A2:W" & LR).RemoveDuplicates Columns:=1, Header:=xlNo
.Range("A2:W" & LR).Sort Key1:=.[B2], Order1:=xlAscending
End With
End Sub
#
obs.
1. antes de rodar o código altere o nome da planilha, de Loja 1 para Loja1 (sem espaço, como na Loja2), ou se você já recebe assim e não quiser alterar então altere no código.
2. ao rodar o código, antes de replicar os dados, o código limpará a planilha
Resumo, restando somente os cabeçalhos de coluna
3. aqui a execução dura aprox. 4 seg e resulta 369 registros na planilha
Resumo
Re: Criar Folha com resumo de Lojas
Enviado: 23 Fev 2021 às 15:59
por foliveir84
Brutal!!! muito obrigado mesmo, só tenho pena de tentar perceber e não conseguir replicar sozinho...
se não for pedir demais, a primeira vez já achei que era complicado, se eu quiser adicionar mais uma loja?
Re: Criar Folha com resumo de Lojas
Enviado: 23 Fev 2021 às 17:16
por osvaldomp
Instale uma cópia do código abaixo no lugar do anterior.
Funciona para os nomes de planilhas
Loja1,
Loja2 e
Loja3. Se quiser alterar nomes ou incluir planilhas ou excluir planilhas, basta alterar no código na linha replicada abaixo.
For Each ws In Worksheets(Array("Loja1", "Loja2", "Loja3"))
#
Código: Selecionar todosSub MontaResumoV2()
Dim c As Long, LR As Long, ws As Worksheet
Application.ScreenUpdating = False
If Sheets("Resumo").[A2] <> "" Then Sheets("Resumo").Range("A2:W" & Sheets("Resumo").Cells(Rows.Count, 1).End(3).Row) = ""
For Each ws In Worksheets(Array("Loja1", "Loja2", "Loja3"))
ws.Range("A2:W" & ws.Cells(Rows.Count, 1).End(3).Row).Copy Sheets("Resumo").Cells(Rows.Count, 1).End(3)(2)
Next ws
With Sheets("Resumo")
LR = .Cells(Rows.Count, 1).End(xlUp).Row
.Range("A2:W" & LR).Sort Key1:=.[A2], Order1:=xlAscending
For c = 3 To LR
If .Cells(c, 1) = .Cells(c - 1, 1) Then
.Cells(c, 3).Copy
.Cells(c - 1, 3).PasteSpecial Paste:=xlValues, Operation:=xlAdd
.Cells(c, 8).Resize(, 15).Copy
.Cells(c - 1, 8).PasteSpecial Paste:=xlValues, Operation:=xlAdd
c = c + 1
End If
Next c
.Range("A2:W" & LR).RemoveDuplicates Columns:=1, Header:=xlNo
.Range("A2:W" & LR).Sort Key1:=.[B2], Order1:=xlAscending
End With
End Sub
Re: Criar Folha com resumo de Lojas
Enviado: 23 Fev 2021 às 17:44
por foliveir84
Muito Obrigado mais uma vez Osvaldo, isto é um espanto.
Já estive a ler e a ver videos de macros e fiquei com vontade de aprender. existe forma de eu pegar no codigo que e deu e tentar fazer o inverso, ou seja, pelo que percebi, nos vamos gravando procedimentos na macro, que ela transcreve no código acima, sendo assim, é possivel eu pegar no codigo acima e saber o que voce fez na planilha, para aprender?
Re: Criar Folha com resumo de Lojas
Enviado: 23 Fev 2021 às 20:41
por osvaldomp
Segue uma cópia comentada do último código que passei. Após colar no módulo a fonte dos comentários assumirá a cor verde, o que irá facilitar a leitura.
Código: Selecionar todosSub MontaResumoV2()
Dim c As Long, LR As Long, ws As Worksheet 'declaração das variáveis
'desativa a atualização das ações na tela: evita o "flicking" e evita o aumento no tempo de execução
Application.ScreenUpdating = False
'se A2 da planilha Resumo estiver diferente de vazia, então limpa da linha 2 para baixo
If Sheets("Resumo").[A2] <> "" Then Sheets("Resumo").Range("A2:W" & Sheets("Resumo").Cells(Rows.Count, 1).End(3).Row) = ""
'faz o Loop pelas planilhas cujos nomes estiverem na matriz Array
For Each ws In Worksheets(Array("Loja1", "Loja2", "Loja3"))
'copia os dados de cada planilha cujo nome esteja na matriz e cola na primeira linha vazia da planilha Resumo
ws.Range("A2:W" & ws.Cells(Rows.Count, 1).End(3).Row).Copy Sheets("Resumo").Cells(Rows.Count, 1).End(3)(2)
Next ws
'ações na planilha Resumo
With Sheets("Resumo")
'LR á a variável que receberá o número da última linha com conteúdo na coluna A
LR = .Cells(Rows.Count, 1).End(xlUp).Row
'ordena os dados com base na coluna A, em ordem ascendente; esta ordenação é para forçar que os códigos _
duplicados fiquem em células adjacentes o que irá facilitar a operação seguinte
.Range("A2:W" & LR).Sort Key1:=.[A2], Order1:=xlAscending
'Loop pelas células da coluna A, para efetuar a soma dos dados dos códigos duplicados
For c = 3 To LR 'inicia o Loop na linha 3 e vai até a última linha com conteúdo (LR~~~>LastRow)
'início do Loop em A3, e se A3 for igual a A2 ...
If .Cells(c, 1) = .Cells(c - 1, 1) Then
'... então copia da linha 3 e cola na linha 2 com adição dos valores
.Cells(c, 3).Copy 'primeiro copia C3 e cola em C2, com adição ...
.Cells(c - 1, 3).PasteSpecial Paste:=xlValues, Operation:=xlAdd
'... em seguida repete a operação de H até V de uma só vez
.Cells(c, 8).Resize(, 15).Copy
.Cells(c - 1, 8).PasteSpecial Paste:=xlValues, Operation:=xlAdd
c = c + 1
End If
Next c
'feitas as adições, os registros com códigos duplicados são descartados _
(por padrão, entre os repetidos, o registro de baixo é descartado, por isso _
antes os valores foram adicionados ao registros de cima, que serão mantidos)
.Range("A2:W" & LR).RemoveDuplicates Columns:=1, Header:=xlNo
'por fim, os dados são reordenados, agora com base na coluna B
.Range("A2:W" & LR).Sort Key1:=.[B2], Order1:=xlAscending
End With
End Sub
#
dicas:
1. para saber mais sobre cada comando VBA utilizado em um código qualquer, no editor de VBA clique sobre o comando e aperte F1 para acessar a ajuda.
2. você pode acompanhar cada etapa da execução de um código, executando-o no modo depurar, via F8. Por exemplo, ative a planilha
Resumo, acesse o editor de VBA (Alt+F11), clique no ícone Maximizar no canto direito alto, ajuste o tamanho e posição da janela do VBA de modo que você consiga visualizar também a planilha em segundo plano, clique sobre qualquer parte do código e vá clicando em F8 e observe as alterações que o código irá fazendo na planilha a cada toque. Ainda, você pode saber o valor de cada variável ao pairar com o cursor do mouse sobre ela.
3. a diferença fundamental entre um código elaborado e um código gravado é que a construção do primeiro pode ser planejada, ao passo que o segundo se limita a gravar as operações efetuadas pelo usuário. Em um código gravado as referências a endereços de células são sempre absolutas, então na maioria dos casos são necessários ajustes para torná-lo dinâmico e também para eliminar os comandos
Select e
Activate.
4. segue um link sobre macros, veja se aproveita.
http://www.bertolo.pro.br/FinEst/Semana ... oExcel.pdf
Re: Criar Folha com resumo de Lojas
Enviado: 24 Fev 2021 às 05:36
por foliveir
Obrigado, estive ver e sim, consigo entender o que fez, no entanto, não conseguiria replicar, é um nivel muito avançado.
Obrigado por tudo
Re: Criar Folha com resumo de Lojas
Enviado: 24 Fev 2021 às 07:48
por foliveir84
Bom dia osvaldo, fiz o que disse, copiei o codigo das 3 lojas, mas as contas não estão a bater certo, nesta folha, a coluna Stock, por exemplo do Alobaby exsite, em stock 1+3+4 e a folha resumo apenas soma 4 unidades..
o produto com o codigo "6159988" tem em stock 13+6+34 que totaliza 53, e na folha resumo estão 13.
Assim como o somatório de vendas também não está 100%.
O produto "5338751" vendeu no total 24+24+33=81 e o resumo contabiliza 57.
Pode verificar por favor?
Re: Criar Folha com resumo de Lojas
Enviado: 24 Fev 2021 às 08:00
por foliveir84
Posso ter sido eu que não me expliquei bem de inicio as colunas C e E, são para somar, mas não uma com a outra, são todas as Colunas C de cada Folha e todas as Colunas E de Cada folha, da mesma forma que as vendas de cada mês.
EM relação às vendas, acho que a macro não está a somar as vendas da loja3
Re: Criar Folha com resumo de Lojas
Enviado: 24 Fev 2021 às 09:40
por osvaldomp
Tens razão, falha minha, faremos os ajustes.
Aproveitando, nesse último arquivo a última coluna com dados é a T, diferente do anterior que é até W. Qual é o correto?
Se o correto for o último, quais colunas você quer somar agora, C, E e de H até S ?
Re: Criar Folha com resumo de Lojas
Enviado: 24 Fev 2021 às 10:25
por foliveir
Olá, posso extrair os detalhes das vendas com vários meses, neste caso tirei com 12 meses.
Se isso tiver que ficar definido, entao sim, por favor somar colunas C;E e de H a T. e por padrão irei sempre tirar 12 meses.
Mas imagine que extraio um ficheiro apenas com 3 meses de vendas, já não vai funcionar?
Se não der, não há problema, prefiro ter sempre os valores de 12 meses, mas gostaria de saber o que posso ou não fazer.
Obrigado Osvaldo The Best
Re: Criar Folha com resumo de Lojas
Enviado: 24 Fev 2021 às 11:58
por osvaldomp
No código abaixo considerei que o relatório extraído terá no mínimo um mês, que estará na coluna H e na coluna I estará o T Uni, e terá no máximo 20 meses, que estarão de H até AA e T Uni estará na coluna AB.
O código fará a leitura da quantidade de meses na planilha
Loja1, com base nas colunas preenchidas na linha 1 (variável LC) e copiará os dados dessa e das demais planilhas conforme a leitura efetuada. Faça os testes com qualquer quantidade de meses entre 1 e 20 na planilha
Loja1 (considerei que as demais terão igual quantidade de meses), e veja se o resultado está correto.
Retorne se você quiser acrescentar comandos para limpar ou para excluir colunas na planilha
Resumo ao final da execução.
Código: Selecionar todosSub MontaResumoV3()
Dim c As Long, LR As Long, LC As Long, ws As Worksheet, k As Long, x As Long
Application.ScreenUpdating = False
Sheets("Resumo").Cells = ""
LC = Sheets("Loja1").Cells(1, Columns.Count).End(1).Column
Sheets("Loja1").[A1].Resize(, LC).Copy
Sheets("Resumo").[A1].PasteSpecial xlValues
For Each ws In Worksheets(Array("Loja1", "Loja2", "Loja3"))
ws.Range("A2", ws.Cells(ws.Cells(Rows.Count, 1).End(3).Row, LC)).Copy Sheets("Resumo").Cells(Rows.Count, 1).End(3)(2)
Next ws
With Sheets("Resumo")
LR = .Cells(Rows.Count, 1).End(xlUp).Row
.Range("A2:AB" & LR).Sort Key1:=.[A2], Order1:=xlAscending
For c = 2 To LR
k = Application.CountIf(.[A:A], .Cells(c, 1))
.Cells(c, 3) = Application.Sum(.Cells(c, 3).Resize(k))
.Cells(c, 5) = Application.Sum(.Cells(c, 5).Resize(k))
For x = 8 To LC
.Cells(c, x) = Application.Sum(.Cells(c, x).Resize(k))
Next x
c = c + k - 1
Next c
.Range("A2:AB" & LR).RemoveDuplicates Columns:=1, Header:=xlNo
.Range("A2:AB" & LR).Sort Key1:=.[B2], Order1:=xlAscending
End With
End Sub
Re: Criar Folha com resumo de Lojas
Enviado: 26 Fev 2021 às 13:37
por foliveir
Ola Outra Vez, a folha está a ficar perfeita, é possível alterar o seguinte na folha resumo.
Ficar com o especto do que manualmente fiz na folha resumo 2 ( ou seja para ficar mais visualmente atrativa separar as linhas com cores e linhas, podem ser estas ou outras.
A coluna C e D, não tem interesse, pode ser removida.
Depois, como não tenho interesse em produtos que satisfaçam esta condição Stock (coluna E) igual a zero e soma total de vendas ( Coluna T Unid) igual a zero estejam visíveis, manualmente para as selecionar o que fiz foi, somar stock com total de vendas, se valor igual a zero, então podem ser removidas essas linhas.
Depois disso, acrescentar uma coluna depois de T Unid, chamada, proposta de encomenda, que será igual a valor de T Unid-Stock.
Também formatei para que nas colunas de H a S, sempre que o valor é zero, a célula fica vazia, para não haver tanto " lixo " na folha.
Será isto possível?
Para aumentar o desafio e pelos videos que tenho visto no hashtagtreinamentos, no ficheiro de RAR, vao 3 ficheiros que são os extratidos do sistemos informatico, são CSV com o nome Loja 1,2 e 3.
Era possível que desde que a "folha resumo" com a Macro estivesse na mesma pasta, não houvesse a necessidade de copiar cada uma delas para as abas Loja 1,2,3, e a Marcro fizesse a leitura directa dessas abas e apenas ficasse o resumo? Se der, "show de Bola", se não, já fico muito contente com as alterações acima pedidas
Abraço