Execução automática...
 
Notifications
Clear all

Execução automática de macro

10 Posts
3 Usuários
0 Reactions
2,086 Visualizações
(@linchau)
Posts: 7
Active Member
Topic starter
 

Bom dia

Tenho uma planilha que altera o valor das células de uma tabela conforme parâmetros especificados através de lista suspensa.

Esta tabela alimenta um gráfico, que precisa que os valores estejam ordenados em ordem decrescente (Gráfico de Pareto).
Fiz uma macro que realiza a ordenação, porem gostaria que esta macro fosse executada automaticamente toda vez que ocorre-se alguma alteração no filtro.

Obs.: Os filtros alterados modificam uma célula chamada de índice, que serve de parâmetro para as fórmulas de preenchimento da tabela em questão.

 
Postado : 16/05/2013 6:40 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Linchau, em que célula este *filtro está aplicado?

A macro precisará rodar no evento Change da planilha, o ideal seria você disponibilizar um modelo do seu arquivo, com o código.
Se necessário, bagunce os dados, não mande nada confidencial.

FF

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 16/05/2013 8:33 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Sem o modelo ..fica duvidoso, mas...segue um exemplo...
Imagine que a validação esteja em A1

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A1")) Is Nothing Or Target.Cells.Count > 1 Then
Exit Sub
Else
'call AquiColoqueO_NomeDeSuaMacro
End If
End Sub

Veja mais:
http://msdn.microsoft.com/en-us/library ... 39775.aspx

Obs: Esse código deve ser inserido dentro corpo de código da planilha que terá e sofrerá os efeitos.

Att

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 16/05/2013 9:34 am
(@linchau)
Posts: 7
Active Member
Topic starter
 

Obrigado Alexandre mas não funcionou.
Estou encaminhando em anexo a planilha com a macro e os filtros.

Os filtros são realizados nas celulas C5 a C8 e alteram a celula B4 nomeada como Indice.

è na celula B4 que gostaria de aplicar a macrou, ou seja, toda vez que o usuario alterar o filtro a celula B4 muda e esta mudança deve executar a macro.

Obrigado

 
Postado : 16/05/2013 11:19 am
(@linchau)
Posts: 7
Active Member
Topic starter
 

Esqueci de um detalhe, a planilha em questão é a Paretto.

Obrigado.

 
Postado : 16/05/2013 11:21 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

linchau, como não tenho excel 2007 aqui no serviço consigo abrir o mesmo atraves de um path mas me da erro, mas pelo que entendi a rotina no evnto change não funcionará neste caso pois ela atua sobre a celula que você esta alterando e não capta as que foram alteradas atraves de formula.

Minha sugestão seria, que como tem de preencher os criterios para configurar o filtro fosse definido o ultimo campo para acionamento da rotina, logicamente se eles forem obrigatorios;

Outro ponto seria de onde vem o valor em B4, que primeiro voce disse que era nomeado como "indice" e neste modelo esta celula é nomeada com "SITU", pergunto, pois como disse que é utilizado para parametros da formula talvez de para criar um criterio no evento change conforme o valor desta celula.

{}

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 16/05/2013 11:46 am
(@linchau)
Posts: 7
Active Member
Topic starter
 

Boa tarde Mauro

O preenchimento dos filtros não é obrigatorio, porem a macro so deve funcionar quando ocorrer alguma alteração em uma das celulas entre c5 e c8 talvez a sua sugestão de certo se criarmos a condição para cada celula.
Se der, como faço?

Eu me enganei em relação ao nome da celula, é que dentro do documento existe outro campo com a mesma função que chamei de indice, mas este não tem nada a ver com a duvido, o nome do campo é SITU.

Obrigado

 
Postado : 16/05/2013 12:37 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

linchau, a rotina proposta abaixo troque a que se encontra na aba "Paretto" por esta.

Private Sub Worksheet_Change(ByVal Target As Range)
           
    Application.EnableEvents = False
            
    If Not Intersect(Target, Range("C3:C8")) Is Nothing Then
                  
        MsgBox "Ajuste o nome de sua Macro na linha abaixo !"
        'Call SuaMacroParaContinuar
                    
    End If
             
    Application.EnableEvents = True
                
End Sub

Onde temos a chamada Call ajuste com o nome de sua rotina, a qual só será executada se alterarmos qualquer valor no range expecificado entre "C3 e C8", faça os testes e veja se estamos no caminho certo.

Eu havia comentado do valor em B4, porque dependendo dos retornos, se são tipo 1 e 2 ou qq outro podemos aliar a eles tambem, ou seja só executar se determinado valor em B4 for igual ao que definirmos, tipo a que consta no link abaixo no penultimo post.

Piscar Tela
viewtopic.php?f=10&t=8014

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 16/05/2013 12:48 pm
(@linchau)
Posts: 7
Active Member
Topic starter
 

O preenchimento da ultima celula do filtro não é obrigatoria, porem a macro so deve ser executada quando ocorrer alterações em um dos filtros, acredito que se a rotina for aplicada para todas as celulas do filtro de certo. Se tiver como fazer, como fica.

Realmente e u me enganei em relação ao nome do campo, indice é um campo semelhante dentro do mesmo documeto mas não tem nada a ver com a duvida. O campo em questão é o SITU.

Obrigado.

 
Postado : 16/05/2013 12:53 pm
(@lecustodio)
Posts: 14
Active Member
 

Boa tarde,

Não consegui uma forma exata de verificar se a celula foi atualizada, porem dessa forma funcionou !! :D


Sub Tipo_()
 
 On Error GoTo Nao_formula
 
 ' Verifica se celula Q6 faz parte de uma tabela dinamica.
 If Application.Range("Q6").PivotCell.PivotCellType = xlPivotCellValue Then
 
 End If
 Exit Sub
 
Nao_formula:
 MsgBox "A celula não faz parte de uma tebela dinamica" '***** Nesta linha você colocaria seu codigo a executar *********
 
End Sub

Espero ter ajudado de alguma forma rsrs

 
Postado : 16/05/2013 12:54 pm