Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
#70887
Boa tarde mestres!

Vou anexar aqui uma planilha que reproduz a situação exata que preciso resolver em uma outra ferramenta que está em desenvolvimento.

A tabela azul do Procv e a faixa amarela ficarão ocultas. O que vai aparecer para o usuário é basicamente as tabelas com os dados e as caixas de seleção para ele escolher o quê deve ficar visível e o quê deve ficar oculto.

Em resumo, na faixa amarela, sempre que não houver alguns número, a linha inteira deve ficar oculta.

Alguém escreve um código no VBA para mim?

Fico muito agradecido mestres!

Grande abraço!
Você não está autorizado a ver ou baixar esse anexo.
#70894
Olá, @Waltricke .

Cole uma cópia do código abaixo no módulo da Plan1. Para acessar o módulo clique com o direito na guia da planilha e escolha Exibir Código.
Código: Selecionar todos
Private Sub Worksheet_Calculate()
 Dim k As Long
  Application.EnableEvents = False
  For k = 6 To 29
   Rows(k).Hidden = Cells(k, 1) = ""
  Next k
  Application.EnableEvents = True
End Sub
#
funcionamento - as linhas serão ocultadas/reexibidas, conforme o critério, ao marcar/desmarcar alguma Caixa de Seleção.
#70902
@osvaldomp

Muito obrigado! Já é a segunda vez que tu me socorre aqui.. provavelmente terei outras vezes pra tu me salvar.

Mas deixa eu te falar, ainda tem um probleminha na macro:

Dá uma olhada na imagem que estou anexando. A parte de marcar e desmarcar as caixas de seleção ocultando as tabelas está funcionando perfeitamente bem, mas quando tento recolher as linhas usando o botão lateral, elas não permanecem recolhidas.

Desculpe, devo ter esquecido de mencionar isso.. Consegue fazer um ajuste e me devolver o código?
Caso precise, estou anexando a planilha novamente.
Você não está autorizado a ver ou baixar esse anexo.
#70906
Waltricke escreveu: 20 Mai 2022 às 14:11 ... mas quando tento recolher as linhas usando o botão lateral, elas não permanecem recolhidas.
Qual o critério que você utiliza para recolher/expandir as linhas ? Ou em que momento você faz essa operação ?
#70913
osvaldomp escreveu: 20 Mai 2022 às 19:52
Waltricke escreveu: 20 Mai 2022 às 14:11 ... mas quando tento recolher as linhas usando o botão lateral, elas não permanecem recolhidas.
Qual o critério que você utiliza para recolher/expandir as linhas ? Ou em que momento você faz essa operação ?
Então.. O critério é o seguinte:

As caixas de marcação no topo, quando marcadas ou desmarcadas, escondem ou exibem por completo a tabela inteira.
Note que as tabelas possuem uma linha principal (em verde) com as informações totalizadoras das células em branco.
Então, se eu ir lá no topo da planilha e deixar marcada a caixa de seleção "Simples", todas (e somente) as tabelas onde estiver escrito Simples na célula escolhida devem ficar visíveis, mas eu preciso poder recolher (no caso, ocultar) as linhas brancas dessas tabelas visíveis e deixar somente as linhas verdes dos resumos visíveis.

Espero ter conseguido explicar amigo..
#70918
Waltricke escreveu: 21 Mai 2022 às 12:28 Então.. O critério é o seguinte:
O que você descreveu não é o critério, pois você descreveu "como faz" e critério corresponde a "porque faz".
Eu sugeri o código anterior com base neste seu comentário ~~~> "Em resumo, na faixa amarela, sempre que não houver alguns número, a linha inteira deve ficar oculta."

Segue abaixo outro código para substituir o anterior, agora feito com base neste outro comentário seu ~~~> "O que vai aparecer para o usuário é basicamente as tabelas com os dados e as caixas de seleção para ele escolher o quê deve ficar visível e o quê deve ficar oculto."
Porém, em lugar de marcar/desmarcar as Caixas de Seleção, deverá ser aplicado duplo clique em uma das células D6, D12, D18 ou D24 com o fim de recolher/expandir o correspondente grupo de linhas.

Essa solução não requer as Caixas de Seleção, nem a tabela azul e nem as fórmulas da coluna A.
Veja se atende.
Código: Selecionar todos
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
 If Intersect(Target, Range("D6,D12,D18,D24")) Is Nothing Then Exit Sub
 Rows(Target.Row).ShowDetail = Not ActiveSheet.Rows(Target.Row).ShowDetail
 Cancel = True
End Sub
#70920
Eu sugeri o código anterior com base neste seu comentário ~~~> "Em resumo, na faixa amarela, sempre que não houver alguns número, a linha inteira deve ficar oculta."

Segue abaixo outro código para substituir o anterior, agora feito com base neste outro comentário seu ~~~> "O que vai aparecer para o usuário é basicamente as tabelas com os dados e as caixas de seleção para ele escolher o quê deve ficar visível e o quê deve ficar oculto."
Porém, em lugar de marcar/desmarcar as Caixas de Seleção, deverá ser aplicado duplo clique em uma das células D6, D12, D18 ou D24 com o fim de recolher/expandir o correspondente grupo de linhas.

Essa solução não requer as Caixas de Seleção, nem a tabela azul e nem as fórmulas da coluna A.
Veja se atende.
Código: Selecionar todos
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
 If Intersect(Target, Range("D6,D12,D18,D24")) Is Nothing Then Exit Sub
 Rows(Target.Row).ShowDetail = Not ActiveSheet.Rows(Target.Row).ShowDetail
 Cancel = True
End Sub
[/quote]

Opa bom dia meu amigo! Adorei o código que tu escreveu, tanto que vou fazer uma adaptação eu outra parte da planilha para utilizá-lo! Mas infelizmente esse novo scrip não atende ao que preciso.

Veja meu amigo: eu realmente preciso que as tabelas sejam exibidas ou ocultas utilizando-se as caixas de seleção. A planilha que eu anexei anteriormente reproduz exatamente a situação que ocorre na planilha onde isto será aplicado. Serão mais de 500 tabelas em uma mesma planilha e várias dessas tabelas terão informações iguais (neste caso, o tipo de projeto).
O usuário precisará filtrar as tabelas sem precisar clicar uma por uma.
O recurso de colocar um filtro do próprio excel está fora de questão devido ao posicionamento onde as informações ficarão. Terá de ser realmente pelas caixas de seleção.

O código que vc escreveu inicialmente resolveu o problema. O único "efeito colateral" que teve é que ele não permitia o recolhimento das linhas para as tabelas filtradas. Eu preciso poder fazer os filtros e, mesma nas tabelas filtradas, poder recolher ou expandir as linhas à vontade.

Não quero abusar da tua boa vontade, já está ajudando bastante. Mas se puder abraçar o desafio aí e me ajudar...
#70922
Waltricke escreveu: 22 Mai 2022 às 10:59 Serão mais de 500 tabelas em uma mesma planilha ...
Essa informação é nova ! :o
O que exatamente você chama de "tabela" ? Por acaso seria cada grupo de linhas agrupadas ?

O usuário precisará filtrar as tabelas sem precisar clicar uma por uma.
O que você quer dizer com "filtrar as tabelas" ? Por acaso seria recolher/expandir as linhas de cada grupo ?

Terá de ser realmente pelas caixas de seleção.
Informe com exatidão, após marcar/desmarcar cada uma das 4 Caixas de Seleção, quais as ações que o código deve executar em cada um dos grupos de linhas agrupadas.

O código que vc escreveu inicialmente resolveu o problema. O único "efeito colateral" que teve é que ele não permitia o recolhimento das linhas para as tabelas filtradas.
Sim, pois ao recolher cada grupo existe o conflito com o critério que você estabeleceu, que é a existência de valores nas fórmulas da coluna A.
Responda as dúvidas acima que vou tentar uma solução via Caixas de Seleção e se não for viável então vou tentar retomar a primeira sugestão com a utilização de colunas auxiliares para contornar o conflito.
#
dica - para responder clique em +Resposta, só clique em Responder com citação se necessário.
#70923
Bom, vamos lá então:

Desculpe não mencionar que a planilha é tão extensa.. sou um pouco amador e não achei que isso faria muita diferença.

Estou anexando novamente a planilha, dessa vez ela está exatamente como vai aparecer para o usuário. Todas as 500 tabelas estão ali. Percebi que ficou bem pesada, bem pesada mesmo.. qualquer filtro que se aplique, a planilha fica um tempão processando isso e não poderá ser assim.

Respondendo as tuas perguntas:

O que eu chamo de tabela é a linha verde (que conterá as informações totalizadoras) e as linhas brancas de detalhe abaixo dela. Então, se a caixa de seleção estiver desmarcada, a tabela inteira tem que desaparecer (tanto a linha verde quanto as linhas brancas. Isso já havíamos conseguido no primeiro script.

Filtrar tabelas é marcar ou desmarcar as caixas de seleção. Se eu deixar marcado a caixa de seleção "Simples", então somente as tabelas onde estiver a informação "Simples" ficarão visíveis, porém, preciso poder ocultar ou exibir as linhas de detalhe destas tabelas livremente. Infelizmente o script original não está permitindo isso.

Então em resumo, o desafio aqui é fazer o script permitir ocultar/exibir as linhas de detalhe das tabelas filtradas e resolvermos o problema de "peso" que ficou devido a ser uma planilha tão extensa.

Segue o anexo. Dá uma olhada amigo.

E mais uma vez, obrigado pela tua disposição!
Você não está autorizado a ver ou baixar esse anexo.
#70927
Waltricke escreveu: 22 Mai 2022 às 12:21 Se eu deixar marcado a caixa de seleção "Simples", então somente as tabelas onde estiver a informação "Simples" ficarão visíveis,...
Confirme se somente uma das Caixas de Seleção será marcada de cada vez.
Assim, se a Caixa "Simples" estiver marcada, então somente os grupos com o rótulo Simples estarão visíveis. Em seguida, se for marcada a Caixa "Composto", então a primeira será desmarcada automaticamente, os grupos com rótulo Simples serão ocultados e ficarão visíveis somente os grupos com rótulo igual a Composto ?
#70971
1. instale uma cópia do código abaixo em um módulo comum, assim: copie o código daqui | abra o arquivo | aperte Alt+F11 | menu Inserir | Módulo | cole

2. vincule todas as Caixas de Seleção ao código instalado: mantenha Ctrl pressionada | clique sobre cada Caixa | clique com o direito sobre qualquer parte da seleção e escolha Atribuir macro ... | selecione ExibeGrupos | OK

3. remova do módulo da planilha os códigos que passei antes; esta solução (via o código abaixo) não utiliza as fórmulas da coluna A e nem os dados do intervalo A1:C4

funcionamento - marque uma ou mais Caixas de Seleção para exibir os Grupos correspondentes; os recolhimentos de Grupos serão mantidos até que seja marcada/desmarcada alguma Caixa.
#
Código: Selecionar todos
Sub ExibeGrupos()
 Dim chk As CheckBox, m(), i As Long, LR As Long, Ary() As Variant, rw As Range, n As Long, k As Long
  For Each chk In ActiveSheet.CheckBoxes
   If chk = xlOn Then
    i = i + 1
    ReDim Preserve m(1 To i)
    m(i) = Cells(chk.TopLeftCell.Row, 9)
   End If
  Next chk
  If i = 0 Then MsgBox "SELECIONE AO MENOS UM CRITÉRIO": Exit Sub
  Application.Calculation = xlCalculationManual
  ActiveSheet.AutoFilterMode = False
  LR = Cells(Rows.Count, 5).End(3).Row
  Range("A5:J" & LR).AutoFilter 5, m, Operator:=xlFilterValues
  On Error Resume Next
  For Each rw In Range("E6:E" & LR).SpecialCells(12)
   If Err > 0 Then GoTo fim
   n = n + 1
   ReDim Preserve Ary(1 To n)
   Ary(n) = rw.Row
  Next rw
  ActiveSheet.AutoFilterMode = False
  Rows("6:" & LR).Hidden = True
  For k = LBound(Ary) To UBound(Ary)
   Rows(Ary(k)).Offset(-1).Resize(6).Hidden = False
  Next k
fim:
  Application.Calculation = xlCalculationAutomatic
End Sub

#71062
@osvaldomp

Meu amigo, muito obrigado pela ajuda!

Eu segui as instruções na planilha de teste que estávamos fazendo e funcionou super bem. Logo vou implantar isso na planilha final que está em desenvolvimento e então veremos se vai funcionar direitinho do jeito que preciso. Tudo indica que sim.

Por enquanto, muito obrigado! Tu é fera!
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord