Ir para conteúdo
Fórum Script Brasil
  • 0

<>


gustognoli

Pergunta

10 respostass a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros 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

 

Editado por osvaldomp
Link para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...