Notifications
Clear all

SOMAR A PARTIR DA QUEBRA DE PÁGINA

8 Posts
2 Usuários
0 Reactions
1,607 Visualizações
(@viniciussn)
Posts: 11
Active Member
Topic starter
 

Boa noite amigos!

Estou com uma planilha que contém um código VBA onde é possível realizar a soma de uma determinada coluna a partir da quebra de página. Por exemplo: Uma planilha que contém 52 páginas eu gostaria que no final de cada página (acima da quebra da linha) desse o resultado do "SUBTOTAL" referente a página em questão. E que no final da planilha (última linha) me desse o resultado do "TOTAL GERAL" de todas as páginas. Eu conseguir fazer esse código funcionar praticamente até a penúltima página. Porém quando ele é executado, a ultima página não trás o resultado do "SUBTOTAL". E o "TOTAL" também não fica na última linha conforme eu necessito.

Obs.1: Eu gostaria também que após executar a macro uma vez, ao adicionar/excluir linhas ou alterar valores (da coluna onde o cálculo é realizado) a macro automaticamente refaria todo cálculo. Pois do jeito que o código está escrito, se eu executar a macro mais de uma vez, ela duplica todos 'SUBTOTAL" e 'TOTAL" fazendo que o cálculo seja errado. Segue abaixo o código, e a planilha será anexada para que possam me compreender. Desde já agradeço a todos!

Sub Inserir_subtotais_em_quebra_paginas()
Dim i As Byte
Dim vUltima_Linha As Integer, vLinha As Integer, vPagina As Integer
Dim vTotal As Double

vLinha = 14
vUltima_Linha = Range("N1048576").End(xlUp).Row

ActiveSheet.HPageBreaks.Add Before:=Cells(vUltima_Linha + 1, 14)
vTotal = Application.WorksheetFunction.Sum(Range("N14:N" & vUltima_Linha))

Application.ScreenUpdating = False
For i = 1 To ActiveSheet.HPageBreaks.Count
vPagina = ActiveSheet.HPageBreaks(i).Location.Row - 1 - (i = ActiveSheet.HPageBreaks.Count)
Rows(vPagina).Insert

With Cells(vPagina, 14)
   .Value = Application.WorksheetFunction.Sum(Range("N" & vLinha & ":N" & vPagina - 1))
   Range("M" & vPagina) = "SUBTOTAL"
   .Interior.ColorIndex = 3
End With

vLinha = vPagina + 1
Next i

With Cells(vPagina + 1, 14)
   .Value = vTotal
   Range("M" & vPagina + 1) = "TOTAL"
   .Interior.ColorIndex = 5
End With

Application.ScreenUpdating = True
End Sub
 
Postado : 20/06/2017 4:41 pm
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

viniciussn,

Boa tarde!

Veja se é assim.

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 21/06/2017 9:15 am
(@viniciussn)
Posts: 11
Active Member
Topic starter
 

wagner, bom dia!

Muito obrigado! Você é 10 cara! Era tudo que eu precisava!

Antes de dar como resolvido o tópico, gostaria de te perguntar somente uma coisa:

Eu vi que após a execução da macro, o "SUBTOTAL" fica como "fórmula" (muito show isso) fazendo com que eu possa inserir/excluir linhas ou alterar valores e o mesmo processar o cálculo correto. Eu queria saber se tem a possibilidade de fazer o mesmo com o "TOTAL", pois quando eu insiro uma linha ou altero qualquer valor, o "TOTAL" não calcula essa alteração.

Mesmo assim já me ajudou muito! Agradeço sua resposta!

 
Postado : 23/06/2017 5:46 am
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

viniciussn,

Boa tarde!

Obrigado pela gentileza.

Cara, desculpa aí a demora em responder é que andei meio ocupado no trabalho esses dias.

Bom... na primeira versão que lhe enviei até tentei fazer com que o TOTAL GERAL ficasse com uma fórmula, todavia, isso estava requerendo quebrar um pouco mais a cachola e eu estava muito sem tempo. Programação às vezes, exige tempo, silêncio e concentração. Tudo que eu não tinha naquele momento.

Hoje, com mais calma, em casa, consegui fazer isso. Assim, segue nova versão com inserção de fórmula no TOTAL GERAL.

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 24/06/2017 2:08 pm
(@viniciussn)
Posts: 11
Active Member
Topic starter
 

Wagner, boa tarde!

O código ficou show!

Só tem um porém, e se puder ainda me ajudar... Fiz um teste aqui inserindo mais 20 linhas abaixo (conforme destacado em vermelho) antes de executar a macro. Após a inclusão destes dados eu executei a macro, porém o último "SUBTOTAL" e "TOTAL" não está ficando na última página conforme planilha anexa. Se conseguir me ajudar neste último ponto de agradeço ainda mais.

Só mais uma coisa, se puder descrever as etapas do código explicando cada, ficaria muito satisfeito, pois eu gostaria de aprender um pouco mais de VBA.

 
Postado : 25/06/2017 11:02 am
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

viniciussn,

Boa tarde!

Estive dando uma rápida olhada aqui e observei um detalhe:
Com a inserção dessas 20 linhas extra que você fez (valores em vermelho) e rodando o código passo a passo com F8 (depurando) a planilha fica com 54 páginas. Todavia, quando chega na última iteração (no código feito por você), simplesmente o VBA não faz a última iteração. Ou seja: não atende a essa linha de comando:

    For i = 1 To ActiveSheet.HPageBreaks.Count + 1

Verifiquei o valor de ActiveSheet.HPageBreaks.Count e ele mostra corretamente (54). Todavia, como é mais 1, deveria iterar o laço mais uma vez para poder atender a condição que coloquei de quando i for igual a ActiveSheet.HPageBreaks.Count ele poder acrescentar mais duas linhas, o subtotal e o total.

Nunca trabalhei com quebras de páginas e, por isso, nem sei como faz isso. Pelo que entendi, o Excel não está considerando uma quebra de página entre a página 53 e a 54. Se você observar a linha divisória entre a página 52 e a 53 (no arquivo que me enviou por último) vai ver que é uma linha pontilhada. Se observar a linha divisória entre a página 53 e 54 vai ver que é uma linha contínua. Isso eu não sei dizer porque. O fato é que indica que o Excel não está computando essa divisão como uma quebra de página.

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 26/06/2017 1:22 pm
(@viniciussn)
Posts: 11
Active Member
Topic starter
 

Wagner, bom dia!

Obrigado pelo retorno! Mesmo não conseguindo resolver a última demanda, te agradeço muito, pois já me ajudou bastante. Encerrarei este tópico, mas abrirei outro mais específico com este erro, pois creio que assim, alguém possa solucioná-lo.

 
Postado : 28/06/2017 6:23 am
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

Ok. Tudo bem.

De forma mais específica pode ser que nossos colegas "feras" em VBA aqui do fórum possam ajudar.

Sugiro, entretanto, no tópico específico, você mencionar como faz para trabalhar com inserção de linhas no módulo de layout de quebra de páginas (na interface do próprio Excel. Não no VBA). Creio que não são muitos que trabalhem com quebra de páginas.

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 28/06/2017 8:04 am