Página 1 de 1

[ RESOLVIDO] Aperfeiçoar Folha com Macro em VBA

Enviado: 26 Fev 2021 às 20:01
por foliveir84
No forum, alguem ajudou me a montar via Macro esta folha que tenho em anexo, para um pedido inicial, eu não sabia sequer que era possível fazer o que ele fez, deixou me curioso e comecei a ver uns tutoriais de vba, e vi que tem muito potencial, mas infelizmente ainda não tenho pernas para conseguir fazer, daí pedir a vossa ajuda.
O que queria era na folha em anexo acrescentar código ao que está para fazer o seguinte;
A folha de Resumo é a que possui a Macro, eu como não consigo fazer dessa maneira, fiz de maneira arcaica a folha Resumo2, e queria que a folha Resumo original ficasse com;

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.
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, é possivel automatizar esta formatação apenas para as células que irão aparecer pela execução do código?


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

Obrigado desde já

Re: Aperfeiçoar Folha com Macro em VBA

Enviado: 28 Fev 2021 às 17:20
por osvaldomp
foliveir84 escreveu: 26 Fev 2021 às 20:01 Ficar com o especto do que manualmente fiz na folha resumo 2...
1. ok, bordas nas linhas ocupadas

... Stock (coluna E) igual a zero e soma total de vendas ( Coluna T Unid) igual a zero ... podem ser removidas essas linhas.
2. se Stock = 0 E T Unid = 0 ~~~> então exclui a linha, é isso?

Depois disso, acrescentar uma coluna depois de T Unid, chamada, proposta de encomenda, que será igual a valor de T Unid-Stock.
3. ok, no seu exemplo ~~~> T2-E2

... colunas de H a S, sempre que o valor é zero, a célula fica vazia,...
4 . ok, é possível ~~~> colunas dos meses, é isso ?

... vao 3 ficheiros que são os extratidos do sistemos informatico, são CSV com o nome Loja 1,2 e 3.
5. ok, é possível (os 3 arquivos .csv deverão estar abertos ao rodar o código)

Re: Aperfeiçoar Folha com Macro em VBA

Enviado: 01 Mar 2021 às 05:35
por foliveir84
osvaldomp escreveu: 28 Fev 2021 às 17:20
foliveir84 escreveu: 26 Fev 2021 às 20:01 Ficar com o especto do que manualmente fiz na folha resumo 2...
1. ok, bordas nas linhas ocupadas

Sim, borlas nas linhas e se der com cor alternada, isto é uma linha branca outra cinza, etc , etc para facilitar a leitura

... Stock (coluna E) igual a zero e soma total de vendas ( Coluna T Unid) igual a zero ... podem ser removidas essas linhas.
2. se Stock = 0 E T Unid = 0 ~~~> então exclui a linha, é isso?

Exactamente, é isso mesmo

Depois disso, acrescentar uma coluna depois de T Unid, chamada, proposta de encomenda, que será igual a valor de T Unid-Stock.
3. ok, no seu exemplo ~~~> T2-E2

Sim , é isso, só não dei nome às colunas, pois pode haver folhas apenas com 4 meses, outra com 5 etc, e assim a coluna de T Unid estará em diferentes colunas

... colunas de H a S, sempre que o valor é zero, a célula fica vazia,...
4 . ok, é possível ~~~> colunas dos meses, é isso ?

Exacto, as colunas referente aos meses em que o valor seja zero, ficarem vazias

... vao 3 ficheiros que são os extratidos do sistemos informatico, são CSV com o nome Loja 1,2 e 3.
5. ok, é possível (os 3 arquivos .csv deverão estar abertos ao rodar o código)

Ok, parece me perfeito

Re: Aperfeiçoar Folha com Macro em VBA

Enviado: 01 Mar 2021 às 11:15
por osvaldomp
Instale uma cópia deste código no lugar do anterior.
Código: Selecionar todos
'copia dados de 3 arquivos .csv isolados; chama macro Complementos
Sub MontaResumoV5()
 Dim c As Long, LR As Long, LC As Long, wb As Workbook, ws As Worksheet, k As Long, x As Long, i As Long
  Application.ScreenUpdating = False
  Sheets("Resumo").Cells = ""
  For i = 1 To 3
   For Each wb In Application.Workbooks
    If wb.Name = "Loja" & i & ".csv" Then
     Set ws = wb.Sheets("Loja" & i)
     If i = 1 Then
      LC = ws.Cells(1, Columns.Count).End(1).Column
      ws.[A1].Resize(, LC).Copy
      Sheets("Resumo").[A1].PasteSpecial xlValues
     End If
     ws.Range("A2", ws.Cells(ws.Cells(Rows.Count, 1).End(3).Row, LC)).Copy Sheets("Resumo").Cells(Rows.Count, 1).End(3)(2)
    End If
   Next wb
  Next i
   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, 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
    .Columns("C:D").Delete
    Complementos
   End With
End Sub
#

Instale uma cópia deste novo código em um novo módulo (menu Inserir | Módulo)
Código: Selecionar todos
'insere ~~~> título em nova coluna, fórmulas na nova coluna, bordas
'exclui ~~~> zeros nas colunas dos meses, linhas em que Stock=0 e T Uni=0
Sub Complementos()
 Dim LR As Long, LC As Long, tu As Long, m As Long
  With Sheets("Resumo")
   .Cells.Borders.LineStyle = xlNone
   LR = .Cells(Rows.Count, 1).End(3).Row
   LC = .Cells(1, Columns.Count).End(1).Column + 1
   .Range("A2", .Cells(LR, LC)).Interior.Color = xlNone
   .Cells(1, LC) = "proposta de encomenda"
   .Cells(2, LC).Resize(LR - 1) = "=" & Cells(2, LC).Offset(, -1).Address(0, 0) & "-C2"
   .Range("F2", .Cells(LR, LC - 2)).Replace 0, "", xlWhole
   tu = .Rows(1).Find("T Uni").Column
   .[A1].AutoFilter 3, 0
   .[A1].AutoFilter tu, 0
   If .AutoFilter.Range.Columns(1).SpecialCells(12).Count > 1 Then
    .Range("A2", Cells(LR, LC)).EntireRow.Delete
   End If
   .Cells.AutoFilter
   With .Range("A2:" & .Cells(.Cells(Rows.Count, 1).End(3).Row + 1, LC).Address)
    .Borders(xlInsideHorizontal).LineStyle = xlDouble
    .Borders(xlInsideHorizontal).ThemeColor = 5
   End With
   For m = 3 To .Cells(Rows.Count, 1).End(3).Row Step 2
    .Cells(m, 1).Resize(, LC).Interior.ThemeColor = xlThemeColorDark1
    .Cells(m, 1).Resize(, LC).Interior.TintAndShade = -4.99893185216834E-02
   Next m
  End With
End Sub
#
funcionamento - abra também os 3 arquivos .csv e rode o primeiro código acima, ao final o segundo código será acionado pelo primeiro.

Re: Aperfeiçoar Folha com Macro em VBA

Enviado: 02 Mar 2021 às 13:38
por foliveir84
Obrigado Osvaldo, acho que é isso mesmo, aparentemente está a funcionar tudo optimo, ainda não tive tempo de analisar de forma fina. mas impecavel