Assuntos que não estiverem relacionados as categorias acima. Se não souber em qual categoria sua mensagem se encaixa, envie aqui.
#62415
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
Você não está autorizado a ver ou baixar esse anexo.
Editado pela última vez por foliveir84 em 27 Fev 2021 às 14:01, em um total de 1 vez.
Por osvaldomp
#62423
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 ?
Por foliveir84
#62425
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
Por foliveir84
#62426
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
Você não está autorizado a ver ou baixar esse anexo.
Por osvaldomp
#62427
Informe sobre as diferenças em relação ao anterior.
Por foliveir84
#62428
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
Por osvaldomp
#62430
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.
Por foliveir84
#62431
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?
Por osvaldomp
#62439
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 todos
Sub 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
Por foliveir84
#62440
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?
Por osvaldomp
#62445
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 todos
Sub 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
Por foliveir84
#62448
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?
Por osvaldomp
#62449
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 todos
Sub 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
Por foliveir84
#62457
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?
Você não está autorizado a ver ou baixar esse anexo.
Por foliveir84
#62458
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
Por osvaldomp
#62460
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 ?
Por foliveir
#62463
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
Por osvaldomp
#62465
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 todos
Sub 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


Por foliveir
#62501
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
Você não está autorizado a ver ou baixar esse anexo.

Obrigado Osvaldo. só bastou eu substituir […]

Erro em códigos TextBox

Prezados, Estou iniciando no desenvolvimento de p[…]

Planilha travando muito

Olá pessoal, boa tarde! Então, dese[…]

Meu amigo... nem sei como lhe agradecer... Resolve[…]

FORMULA BANCO DE HORAS

Boa tarde! possuo uma planilha com horas extras, […]

ERRO #VALOR

Boa tarde, Foxtri!! Era isto mesmo!! Muito obrig[…]

PLANILHA DE HORAS EXTRAS

Boa tarde! possuo uma planilha com horas extras, […]

Valor dos últimos 3 meses

Boa tarde, Poderiam me ajudar no gráfico a[…]