Ir ao conteúdo
  • Cadastre-se

Excel Rodar macro quando o conteúdo da célula é alterado via fórmula


Ir à solução Resolvido por Visitante,

Posts recomendados

Boa noite a todos.

Venho buscar uma solução para meu problema e peço a ajuda dos feras aqui.
Eu tenho uma mapa de vendas por estado e tenho uma macro que pinta os estados onde houve venda.

A macro busca as cores numa tabela em A4:B30, onde na coluna A estão os estados e na coluna B as quantidades.
Conforme ocorrem vendas eu clico no botão da macro e atualiza. Perfeito.

Agora eu quero mudar jeito de atualizar, eu gostaria que essa macro colorisse o mapa automaticamente quando nova venda fosse realizada em um estado ainda não pintado.
Procurei mas só achei um modo de fazer com que seja executada a macro se as células forem atualizadas manualmente...
O código que achei foi:

 

Private Sub Worksheet_Change(ByVal Target As Range)

Application.EnableEvents = True

If Not Intersect(Target, Range("b4:b30")) Is Nothing Then

Call ColorirMapa

End If

End Sub

 

Existe uma maneira de ser automático?
Agradeço muito a ajuda.

Link para o comentário
Compartilhar em outros sites

8 horas atrás, Yskhadar disse:

Agora eu quero mudar jeito de atualizar, eu gostaria que essa macro colorisse o mapa automaticamente quando nova venda fosse realizada em um estado ainda não pintado.

A Formatação Condicional pode fazer esse trabalho. 🤪

 

Existe uma maneira de ser automático?
Se há fórmulas em B4:B30 então experimente o código abaixo.

 

Private Sub Worksheet_Calculate()
 ColorirMapa
End Sub

 

Link para o comentário
Compartilhar em outros sites

 

Para aplicar a Formatação Condicional:

1. selecione o intervalo desejado, por exemplo, B4:B30

2. menu Página Inicial / Formatação Condicional / Nora Regra / Usar uma fórmula ...

3. na caixa de fórmula cole ~~~> =$B3>0 ~~~> formate como desejar, ou

se as fórmulas em B4:B30 podem retornar também "vazio", então coloque esta ~~~> =E($B3<>"";$B3>0), ou utilize uma fórmula com o critério igual ao critério adotado na macro ColorirMapa

 

Se você não conseguir então disponibilize aqui no fórum uma amostra do seu arquivo Excel e informe com exatidão qual o critério para colorir, ou disponibilize o código ColorirMapa.

Link para o comentário
Compartilhar em outros sites

Segue um arquivo para melhor entendimento.

Do jeito que está hoje funciona com a macro e a solução também funciona desde que eu não mova o mapa de aba.

Entretanto é o que eu preciso. Que o mapa vá para outra aba e tenha a atualização de forma automática mantida.

Grato

Consulta_clube.7z

Link para o comentário
Compartilhar em outros sites

Considerei que você irá mover o mapa para a planilha Painel, conforme o seu objetivo.

 

1. instale uma cópia do código abaixo no módulo da planilha Mapa

Private Sub Worksheet_Calculate()
 ColorirMapaV2
End Sub

 

2. instale um cópia do código abaixo em um módulo comum

Sub ColorirMapaV2()
 Dim Estado As Range, Celula As String
  For Each Estado In Sheets("Mapa").Range("A4:A30")
   Celula = Sheets("Mapa").Cells(Estado.Row, 3)
   Sheets("Painel").Shapes(Estado.Value).Fill.ForeColor.RGB = Sheets("Mapa").Range(Celula).Interior.Color
  Next Estado
End Sub

 

funcionamento - qualquer alteração manual efetuada na coluna C da planilha Vendas irá provocar o recálculo da planilha Mapa, devido às fórmulas da sua coluna B, e o recálculo irá provocar o disparo do primeiro código acima que irá chamar o código ColorirMapaV2 que irá pintar o mapa localizado na planilha Painel.

 

Segue uma sugestão alternativa, já considerando o mapa movido:

1. aplicar Formatação Condicional no intervalo A4:B30 da planilha Mapa (ao aplicar a FC você poderá escolher cores diferentes para cada faixa de vendas. Por exemplo, branco para vendas zero, azul de 1 a 15, amarelo de 16 a 30 e verde de 31 a 45. Ainda, poderá subdividir, por exemplo, 31 a 35 verde claro, 36 a 40 verde médio e 41 a 45 verde escuro)

2. colocar um código WS_Change para captar alterações na coluna C da planilha Vendas, que irá verificar em qual UF houve alteração, que irá copiar a sua respectiva cor na FC comentada acima, e irá alterar a cor somente daquela UF no mapa.

 

Esta alternativa basicamente oferece a possibilidade de pintar o mapa com múltiplas cores com base nas vendas por UF e também de tratar no mapa somente da UF alterada, e não percorrer todas as UFs a cada alteração como é hoje.

Ainda, a coluna auxiliar C da planilha Mapa não mais seria utilizada e se você quiser passar o intervalo A4:B30 para outra planilha, então Mapa poderá ser excluída.

Retorne se houver interesse.

 

Link para o comentário
Compartilhar em outros sites

@osvaldomp como sempre, funcionou perfeitamente.

A princípio este mapa pintado mostra apenas os locais onde a marca já alcançou, sem levar em conta vendas.

Mas acho que isso pode ser mudado, ou acrescentado.

A solução ou alternativa que você falou é interessante, gostaria de saber mais sim.

Já adiantando, são dois produtos, com alguns modelos, mas apenas 2 produtos.

Link para o comentário
Compartilhar em outros sites

1 hora atrás, Yskhadar disse:

 

A princípio este mapa pintado mostra apenas os locais onde a marca já alcançou, sem levar em conta vendas.

 

 

A sugestão que passei baseia-se no uso de múltiplas cores no mapa, mas me parece que não é o seu caso, pois você utiliza somente duas cores, então a sugestão não faz sentido.

Link para o comentário
Compartilhar em outros sites

Sim, como falei a princípio só onde a marca chegou.

Mas estou pensando e acho que seria interessante fazer o indicado baseado nas vendas.

Se quiser perder um pouco do seu tempo acho que seria interessante...
Talvez eu precise te mandar a planilha de outro jeito...

De qualquer forma, a solução que eu buscava você me deu e sou grato.

É que daí você plantou uma semente...

Link para o comentário
Compartilhar em outros sites

 

12 minutos atrás, Yskhadar disse:

Talvez eu precise te mandar a planilha de outro jeito...

Ok, aguardo.

 

2 horas atrás, Yskhadar disse:

Já adiantando, são dois produtos, com alguns modelos, mas apenas 2 produtos.

E também explique esta parte, pois eu não entendi.

 

Link para o comentário
Compartilhar em outros sites

1. faltou você informar qual o resultado desejado

2. faltou você informar em quais dados o resultado será baseado

3. na planilha Painel ainda não há um mapa

4. as fórmulas da planilha Mapa perderam as referências (imagem abaixo)

 

image.png.278ed6026b21ece6af7a6a5debe1bec3.png

Link para o comentário
Compartilhar em outros sites

Desculpa a confusão.

A planilha era a mesma da anterior, só acresci informações e não refiz as referências.

O Mapa funcionou do jeito que você fez, só não alterei neste arquivo, porque acredito que será modificado.

Seguindo sua sugestão, seria formatar o Mapa levando em consideração as vendas (coluna D) por estado (coluna H).

E se possível levando em consideração segmento do produto (coluna B).

Grato

Consulta_clube1.7z

Link para o comentário
Compartilhar em outros sites

Instale uma cópia do código abaixo no módulo da planilha Vendas. Válido para o arquivo do post #13.

Private Sub Worksheet_Change(ByVal Target As Range)
 Dim LR As Long, cor As Long
  If Target.Count > 1 Then Exit Sub
  If Target.Column <> 4 And Target.Column <> 8 Or Cells(Target.Row, 8) = "" Then Exit Sub
  LR = Cells(Rows.Count, 8).End(3).Row
  Select Case Evaluate("=SUMIF(H4:H" & LR & "," & Cells(Target.Row, 8).Address & "," & "D4:D" & LR & ")")
   Case Is > 40: cor = 11854022
   Case Is > 20: cor = 15189684
   Case Is > 0: cor = 65535
   Case Else: cor = 16777215
  End Select
  On Error Resume Next
  Sheets("Mapa").Shapes(Cells(Target.Row, 8)).Fill.ForeColor.RGB = cor
End Sub

funcionamento - na planilha Vendas, ao alterar manualmente o conteúdo de alguma célula na coluna D ou na coluna H, o código irá pintar no mapa a UF correspondente à alteração conforme as cores da imagem abaixo.

image.png.23103c32f1f04ed4e5d94605c6748dc4.png

Link para o comentário
Compartilhar em outros sites

  • Solução
57 minutos atrás, Yskhadar disse:

Aí posso desonsiderar macro ColorirMapa, certo?

Sim. O código que passei faz o trabalho completo.

 

 ... como faço para mudar as cores que você determinou? Como sei o código da cor?

Pinte uma célula com a cor desejada, mantenha a seleção e rode o código abaixo. O número da cor será inserido na célula da direita, aí poderá copiar direto da célula e colar no código.

 

 

Sub NúmeroDaCor()
 ActiveCell.Offset(, 1).Value = ActiveCell.Interior.Color
End Sub

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...