Notifications
Clear all

Tabela Dinâmica com Caixa de Seleção

8 Posts
2 Usuários
0 Reactions
1,053 Visualizações
(@geancbn)
Posts: 5
Active Member
Topic starter
 

Amigos,

Preciso de uma ajuda em uma planilha que tenho trabalhado aqui na empresa e estou super necessitado de mudanças nela.
Esta planilha, que tem vários filtros, porém fiz um exemplo do que quero, ao invés do Usuário clicar no filtro da tabela dinâmica, ele clica na Caixa de Seleção.
Eu consegui com uma ajuda de um grande colega, mas só conseguimos fazer o código VB somente para uma única escolha.
Quando tentamos colocar duas variáveis, da erro e não consigo finalizar o código.
Outra questão é que utilizamos o excel em inglês e quando está em inglês a palavra "ALL" é "TUDO" e isto tbem está me dando uma dor de cabeça.
Pois não sei qual vai ser o idioma do usuário.
Desde já agradeço quem puder me ajudar...

Em anexo está meu exemplo...

Gean Carlos Nascimento

 
Postado : 20/05/2014 3:26 pm
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

Geancbn,

Boa Noite!

Bom... fiz alguma modificações no seu código, pois para atingir o objetivo que você quer (selecionar mais de uma caixa de seleção e efetuar os devidos filtros), você precisa tratar todas as possibilidades que possam ocorrer (com IF's, por exemplo). Desse modo, você pode ver e estudar as rotinas DADOSWEB_Click e VOZMOVEL_Click para fazer futuras outras opções.

O que é importante, no caso citado por você em relação a questão do idioma, é que você deve por, no início da rotina, a linha de comando ON ERROR RESUME NEXT e onde tiver possibilidade de ler alguma coisa em INGLÊS ou PORTUGUÊS (caso de ALL e TUDO, caso de blank e vazio) você deve repetir a linha de comando com as duas formas (em inglês e em português). A linha ON ERROR RESUME NEXT no início da rotina vai "dizer" ao processador que se encontrar algum erro, que ele ignore e passe para a próxima linha. Desse modo, se o processador chegar na linha ALL e o idioma do usuário for português, embora ele não ache essa instrução e haja a possibilidade de erro, ele ignora o erro e passa para a próxima instrução. Assim, a próxima instrução será a correta, em português.

Veja se assim lhe atende.

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 : 20/05/2014 6:31 pm
(@geancbn)
Posts: 5
Active Member
Topic starter
 

Wagner,

Sensacional a explicação.
Vou testar amanhã na empresa, adaptar a minha planilha e creio que irá funcionar.
Eu só não entendi uma coisa: Essa macro criada:

Sub Macro2()
Macro2 Macro
ActiveSheet.PivotTables("Input_03").PivotFields("Tipo de Plano").CurrentPage = _
"(All)"
With ActiveSheet.PivotTables("Input_03").PivotFields("Tipo de Plano")
.PivotItems("(blank)").Visible = True
End With
ActiveSheet.PivotTables("Input_03").PivotFields("Tipo de Plano"). _
EnableMultiplePageItems = True
End Sub

Ela não é usada, certo?

 
Postado : 20/05/2014 7:00 pm
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

Realmente! Tem razão. Esqueci de apagar. É que estava gravando para ver como deveria ser. Pode excluir o módulo.

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 : 20/05/2014 7:10 pm
(@geancbn)
Posts: 5
Active Member
Topic starter
 

Wagner, resolvi testar agora...

Porém não estou conseguindo colocar uma terceira condição dentro da macro criada:

Tipo de Contratação: ADITIVO / NOVO / RENEGOCIAÇÃO / TUDO

Fiz a adaptação para 3: ADITIVO / NOVO / TUDO - Porém somente adaptei do que você me mandou...

Eu usei um 3º "ELSE" mas não deu erro, fiz alguma coisa errada...
Creio que seja somente esta ajuda e irei aprofundar eu mesmo...

Desde já agradeço...

Em anexo está a adaptação que fiz...

Gean Carlos

 
Postado : 20/05/2014 8:04 pm
(@geancbn)
Posts: 5
Active Member
Topic starter
 

Não sou muito bom em programar, só copio e colo e adaptação. O que estou tentando fazer abaixo é usar mais de duas condições "2x Else", creio que isso não de né?

Private Sub RENEGO_Click()
On Error Resume Next
If RENEGO = True Then
If NOVO = True Then
ActiveSheet.PivotTables("Input_03").PivotFields("Tipo de Contratação").CurrentPage = "(All)"
ActiveSheet.PivotTables("Input_03").PivotFields("Tipo de Contratação").CurrentPage = "(TUDO)"
With ActiveSheet.PivotTables("Input_03").PivotFields("Tipo de Contratação")
.PivotItems("(blank)").Visible = False
.PivotItems("(vazio)").Visible = False
End With
ActiveSheet.PivotTables("Input_03").PivotFields("Tipo de Contratação").EnableMultiplePageItems = True
Else
With ActiveSheet.PivotTables("Input_03").PivotFields("Tipo de Contratação")
TUDO2 = False
.CurrentPage = "RENEGOCIAÇÃO"
End With
End If
Else
If NOVO = True Then
With ActiveSheet.PivotTables("Input_03").PivotFields("Tipo de Contratação")
TUDO2 = False
.CurrentPage = "NOVO"
End With
Else
ActiveSheet.PivotTables("Input_03").PivotFields("Tipo de Contratação").CurrentPage = "(All)"
ActiveSheet.PivotTables("Input_03").PivotFields("Tipo de Contratação").CurrentPage = "(TUDO)"
With ActiveSheet.PivotTables("Input_03").PivotFields("Tipo de Contratação")
.PivotItems("(blank)").Visible = True
.PivotItems("(vazio)").Visible = True
End With
ActiveSheet.PivotTables("Input_03").PivotFields("Tipo de Contratação").EnableMultiplePageItems = True
TUDO2 = True
End If
Else
If ADITIVO = True Then
With ActiveSheet.PivotTables("Input_03").PivotFields("Tipo de Contratação")
TUDO2 = False
.CurrentPage = "ADITIVO"
End With
Else
ActiveSheet.PivotTables("Input_03").PivotFields("Tipo de Contratação").CurrentPage = "(All)"
ActiveSheet.PivotTables("Input_03").PivotFields("Tipo de Contratação").CurrentPage = "(TUDO)"
With ActiveSheet.PivotTables("Input_03").PivotFields("Tipo de Contratação")
.PivotItems("(blank)").Visible = True
.PivotItems("(vazio)").Visible = True
End With
ActiveSheet.PivotTables("Input_03").PivotFields("Tipo de Contratação").EnableMultiplePageItems = True
TUDO2 = True
End If
End If

End Sub

 
Postado : 20/05/2014 9:28 pm
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

Geancbn,

Bom Dia!

Nesse momento, estou meio sem tempo de dar uma olhada nessa adaptação que você fez. Assim que possível, olharei. Pode ser também que algum outro colega usuário do fórum lhe ajude antes.

Todavia, algo que é bom registrar aqui é que quem pretende utilizar macros em planilhas, necessariamente deverá começar a estudar programação e lógica de programação (algoritmos, etc), pois fica muito difícil de fazer adaptações sem entender de lógica. Por outro lado, tem um fator muito importante: O que está funcionando normalmente hoje, amanhã ou depois, por qualquer motivo (uma atualização de versão de uma .DLL da Microsoft, por exemplo), pode não funcionar mais.

Assim, aconselho a começar a ler uma apostila básica sobre VBA para entender, inicialmente como é a lógica de programação. Rapidamente, ao que me parece, pelo que vi do seu código, é só uma questão de lógica. Como é que isso funciona? mais ou menos assim: Você vai clicar em uma caixa de seleção. Isso faz disparar a procedure que está associada ao evento Click daquela caixa de seleção. Você precisa então utilizar os comandos IF - ELSE - END IF ou IF - ELSEIF - ELSE - END IF para testar o que está como verdadeiro e ir tratando de acordo com o que for verdade ou não.

IF condição verdadeira...
'Execute tudo que estiver nesse bloco de comandos
ELSE 'Se não for verdade...
'Execute tudo que estiver nesse bloco de comandos
END IF

Ou

IF condição verdadeira...
'Execute tudo que estiver nesse bloco de comandos
ELSEIF a condição acima não for verdadeira mais essa aqui for verdadeira...
'Execute tudo que estiver nesse bloco de comandos
ELSEIF a condição acima não for verdadeira mais essa aqui for verdadeira...
'Execute tudo que estiver nesse bloco de comandos
ELSEIF a condição acima não for verdadeira mais essa aqui for verdadeira...
'Execute tudo que estiver nesse bloco de comandos
ELSEIF a condição acima não for verdadeira mais essa aqui for verdadeira...
'Execute tudo que estiver nesse bloco de comandos
ELSE 'Se nenhuma das condições acima forem verdadeiras...
'Execute tudo que estiver nesse bloco de comandos
END IF

Obviamente, dentro de cada condição a ser testada como verdadeira, podem ser testadas mais de uma condição e dentro de cada ELSEIF colocado, abre-se uma infinidade de outras possibilidades de se colocar outros IF's, e ELSE's ou ELSEIF's.

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/05/2014 4:48 am
(@geancbn)
Posts: 5
Active Member
Topic starter
 

Obrigado mesmo pela explicação, vou testar e posto aqui o resultado.
Show de bola este fórum.

 
Postado : 21/05/2014 4:57 am