gustognoli Postado Fevereiro 15, 2016 Denunciar Share Postado Fevereiro 15, 2016 (editado) <> Editado Março 8, 2016 por gustognoli Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 osvaldomp Postado Fevereiro 17, 2016 Denunciar Share Postado Fevereiro 17, 2016 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 gustognoli Postado Fevereiro 19, 2016 Autor Denunciar Share Postado Fevereiro 19, 2016 (editado) <> Editado Março 8, 2016 por gustognoli Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 osvaldomp Postado Fevereiro 19, 2016 Denunciar Share Postado Fevereiro 19, 2016 (editado) 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 = Worksheets("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 Fevereiro 19, 2016 por osvaldomp Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 gustognoli Postado Fevereiro 21, 2016 Autor Denunciar Share Postado Fevereiro 21, 2016 (editado) <> Editado Março 8, 2016 por gustognoli Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 osvaldomp Postado Fevereiro 21, 2016 Denunciar Share Postado Fevereiro 21, 2016 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...??? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 gustognoli Postado Fevereiro 22, 2016 Autor Denunciar Share Postado Fevereiro 22, 2016 (editado) <> Editado Março 8, 2016 por gustognoli Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 osvaldomp Postado Fevereiro 22, 2016 Denunciar Share Postado Fevereiro 22, 2016 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 gustognoli Postado Fevereiro 23, 2016 Autor Denunciar Share Postado Fevereiro 23, 2016 (editado) <> Editado Março 8, 2016 por gustognoli Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 osvaldomp Postado Fevereiro 24, 2016 Denunciar Share Postado Fevereiro 24, 2016 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 gustognoli Postado Março 7, 2016 Autor Denunciar Share Postado Março 7, 2016 (editado) <> Editado Março 8, 2016 por gustognoli Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
gustognoli
<>
Editado por gustognoliLink para o comentário
Compartilhar em outros sites
10 respostass a esta questão
Posts Recomendados
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.