Jump to content
Fórum Script Brasil
  • 0

<>


gustognoli
 Share

Question

10 answers to this question

Recommended Posts

  • 0

Veja se o "programinha" abaixo ajuda.

Se não retornar o resultado esperado disponibilize o arquivo pois nos prints acima não é possível testar o código.

Sub ListaItensComEspera()
 Dim wsB As Worksheet, wsO As Worksheet, rngE As Range, k As Long
 Set wsB = Worksheet("Base"): Set wsO = Worksheet("Objetivo")
 wsO.Range("B2:E" & Cells(Rows.Count, 2).End(xlUp).Row) = ""
  For Each rngE In wsB.Range("C2:C" & Range("C2").End(xlDown).Row - 1)
   If rngE.Value <> 0 Then
    wsO.Cells(k + 2, 2) = wsB.Cells(rngE.Row, 1)
    wsO.Cells(k + 2, 3).Resize(, 3).Value = wsB.Cells(rngE.Row, 3).Resize(, 3).Value
    k = k + 1
   End If
  Next rngE
 With wsO
  .Cells(k + 1, 2) = "TOTAL"
  .Cells(k + 1, 3) = Application.Sum(.Range("C2:C" & .Range("C2").End(xlDown).Row))
 End With
End Sub

 

 

 

Link to comment
Share on other sites

  • 0

Fala, Gustavo.

Fiz os ajustes (em vermelho) com base no arquivo que você postou.

Veja se atende.

Sub ListaItensComEspera()
 Dim wsB As Worksheet, wsO As Worksheet, rngE As Range, k As Long
 Set wsB = Worksheet
s("Base"): Set wsO = Worksheets("Objetivo")
 
If wsO.[B2] <> "" Then wsO.Range("B2:E" & Cells(Rows.Count, 2).End(xlUp).Row) = ""
  For Each rngE In wsB.Range("C2:C" & wsB.Range("C2").End(xlDown).Row - 1)
   If rngE.Value <> 0 Then
    wsO.Cells(k + 2, 2) = wsB.Cells(rngE.Row, 1)
    wsO.Cells(k + 2, 3).Resize(, 3).Value = wsB.Cells(rngE.Row, 3).Resize(, 3).Value
    k = k + 1
   End If
  Next rngE
 With wsO
  .Cells(k +
2, 2) = "TOTAL"
  .Cells(k +
2, 3) = Application.Sum(.Range("C2:C" & .Range("C2").End(xlDown).Row))
 End With
End Sub

 

Edited by osvaldomp
Link to comment
Share on other sites

  • 0
2 horas atrás, gustognoli disse:

Agora para finalizar, só precisava fazer com que ele modulasse a quantidade de linhas, de forma que se for acrescentado um novo produto, ele acrescentasse uma linha antes do total e se tivesse menos produtos, as linhas que ficassem em branco antes de total, fosse excluídas.

Me parece que este é um novo assunto, é isso? De qual planilha estamos falando, "Objetivo" ou "Base" ?

O código que postei funciona para qualquer quantidade de produtos na planilha "Base" e ele somente replica informações dessa planilha na planilha "Objetivo" conforme o critério. Me parece que agora você quer um outro código para atuar na planilha "Base", é isso?

Pois abaixo da linha total tenho mais informações na planilha original, além de gráficos. Só falta essa modulação e está finalizada (pois sem ela, o macro acaba atropelando tudo que está escrito abaixo da linha total, apagando tudo).

Há mais informações e gráficos em qual planilha? No exemplo que você disponibilizou não vejo nada disso...???

 

 

Link to comment
Share on other sites

  • 0
34 minutos atrás, gustognoli disse:

Não sei se consegui deixar claro para você.

Ainda não!

Na descrição do seu último post você comenta sobre a planilha "Objetivo" : Nesta planilha já tem a linha Total e outras linhas abaixo da Total (na planilha original minha), com formulas e porcentagens além de gráficos. ... eu gostaria de que acrescentasse uma linha nova para cada produto (coluna B) acrescentado, replicando o valor das demais colunas na linha nova inserida (coluna C, D e E), de modo que cada produto novo, inserisse uma linha (igual a de cima, porém com o nome do outro produto) antes do Total e quando tivesse produtos a menos, ele excluísse as linhas que antes foram adicionadas...

Essa descrição está mais compatível com a planilha "Base" do que com a planilha "Objetivo". Fiquei confuso pois até aqui me pareceu que a planilha "Objetivo" seria utilizada somente para receber os dados resultantes do código que passei e não receberia digitação, inclusão/exclusão de linhas. (?)

Sugiro que você disponibilize nova amostra do arquivo, com estrutura exatamente igual à original, comente nas próprias planilhas o que deseja fazer e coloque também os resultados desejados.

 

Link to comment
Share on other sites

  • 0

Gustavo, veja se melhorou o meu entendimento.

Experimente este código.

 

Sub ListaItensComEsperaV2()
 Dim wsB As Worksheet, wsO As Worksheet, rngE As Range
 Dim k As Long, rO As Long, rB As Long, m As Long
  Set wsB = Worksheets("Base"): Set wsO = Worksheets("Objetivo")
   rO = wsO.Range("B1:B" & wsO.Range("B1").End(xlDown).Row).Rows.Count - 2
   rB = Application.CountIf(wsB.Range("C2:C" & wsB.Range("C2").End(xlDown).Row), ">0") - 1
   If wsO.[B2] <> "" Then wsO.Range("B2:E" & Cells(Rows.Count, 2).End(xlUp).Row) = ""
    If rB - rO > 0 Then wsO.Rows(2).Resize(rB - rO).Insert
    If rO - rB > 0 Then wsO.Rows(3).Resize(rO - rB).Delete
  For Each rngE In wsB.Range("C2:C" & wsB.Range("C2").End(xlDown).Row - 1)
   If rngE.Value > 0 Then
    wsO.Cells(k + 2, 2) = wsB.Cells(rngE.Row, 1)
    wsO.Cells(k + 2, 3).Resize(, 3).Value = wsB.Cells(rngE.Row, 3).Resize(, 3).Value
    k = k + 1
   End If
  Next rngE
 With wsO
  .Cells(k + 2, 2) = "TOTAL"
  .Cells(k + 2, 3) = Application.Sum(.Range("C2:C" & .Range("C2").End(xlDown).Row))
 End With
End Sub

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      149.6k
    • Total Posts
      646.1k
×
×
  • Create New...