Notifications
Clear all

Formatação condicional baseado na seleção

17 Posts
3 Usuários
0 Reactions
3,116 Visualizações
(@mdosmagos)
Posts: 78
Estimable Member
Topic starter
 

Boa tarde!

Gostaria de fazer uma formatação condicional como o exemplo do arquivo em anexo, tenho pouco conhecimento em formatação condicional, pesquisei mas não consegui uma solução.
Como no exemplo, após selecionar a célula G6 preciso que ela mesmo altere a cor do preenchimento, para isso pensei em fazer a formatação condicional em todas células do intervalo de valores, baseando-se que quando a célula for selecionada ela deve alterar a cor do preenchimento automaticamente.
Além de alterar a corda da célula selecionada, preciso fazer formatação condicional na coluna das medidas e nas linhas da madeira, conforme arquivo em anexo, para isso pensei em fazer a formatação condicional baseada na linha ativa e na coluna ativa, mas não sei como executar essa lógica.

Ficarei muito grato se poderem me ajudar....

 
Postado : 24/04/2014 9:56 am
(@gtsalikis)
Posts: 2373
Noble Member
 

Creio que somente seja possível com programação.

Veja se atende.

 
Postado : 24/04/2014 10:43 am
(@edcronos)
Posts: 1006
Noble Member
 

gtsalikis
pensando nisso e em funções

que tal uma função que retorne a coluna ativa, e uma para retornar a linha ativa.
assim usando a formatação condicional poderia se ter mais opções baseadas nas celulas celecionadas

bem somente uma idea nem sei se é possivel

 
Postado : 24/04/2014 11:12 am
(@gtsalikis)
Posts: 2373
Noble Member
 

Edcronos,

Até onde conheço de VBA (que não é muito), para retornar a célula ativa vc vai precisar do evento selection_change. Assim, é mais objetivo pegar o range da célula ativa pelo próprio evento selection_change.

Pode até ser possível criar uma função UDF para isso, mas é algo que ainda não sei fazer.

 
Postado : 24/04/2014 11:52 am
(@edcronos)
Posts: 1006
Noble Member
 

falei sobre retornar a coluna e ou linha da celula ativa para ser usada em formatação
pq assim a com base por exemplo :
na coluna ativa poderia se formatar qualquer linha daquela coluna,
o mesmo com a linha ativa

portanto com as duas mesmas funções poderia-se fazer varias formulas, até mesmo fora da formatação, como uma soma condicional.

mas foi somente um pensamento furtivo sobre o assunto.

 
Postado : 24/04/2014 12:08 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

Ah, sim, mas a lógica é a mesma, pois os comandos seriam:

target (célula ativa)
target.row (linha ativa)
target.column (coluna ativa)

 
Postado : 24/04/2014 12:15 pm
(@edcronos)
Posts: 1006
Noble Member
 

olhando sua macro
no evendo "SelectionChange" em vez de ter uma macro colocar somente para recalcular as formulas

e nas funções talvez algo como isso:
ativCol=ActiveCell.Column
ativLin=ActiveCell.Row

para se retornar o numero da linha e da coluna ativa,
ainda estou engatinhado no vba, então não sei bem como ficaria os comando.

ainda não consigo racionalizar sobre o assunto então nem sei por onde começar para fazer algo do tipo função que retorna algum valor,
ainda mais com algo como target. que nem conhecia ainda.

 
Postado : 24/04/2014 12:21 pm
(@mdosmagos)
Posts: 78
Estimable Member
Topic starter
 

gtsalikis,
como você passou funciona em partes, eu tinha feito um exemplo básico, mas na planilha que uso mesmo, tem vários intervalos de valores, como no novo arquivo que anexei, e esses valores possuem formatações de preenchimento, então não poderia ficar branco, deveria permanecer a formatação original da célula e somente mudar quando selecionada, voltando ao original quando não selecionada. Fiz umas alterações, mas virou uma tranqueira.... Favor dá uma olhada...

Se tivesse uma fórmula para a formatação condicional seria mais fácil, mas pelo que disse é muito complicado.....
Não sei se isso ajuda viewtopic.php?f=24&t=480&p=2770&hilit=linhaativa#p2770

 
Postado : 24/04/2014 1:06 pm
(@edcronos)
Posts: 1006
Noble Member
 

ainda estou tentando me ligar como isso de função funciona
estou tentando implementar isso:

Public Fimcel As String
Public Fimrow As Long

Public Function colAtv(ByVal c As String) As String
    'Fimcel = ActiveCell.Address
    colAtv = Mid(Fimcel, InStr(Fimcel, "$") + 1, InStr(2, Fimcel, "$") - 2) ' retorna a letra
End Function

Public Function linAtv(ByVal L As Long) As Long
    'fimrow = ActiveCell.Address
    linAtv = Fimrow
End Function

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Fimrow = Target.Row
Fimcel = Target.Address
Calculate
end sub
 
Postado : 24/04/2014 1:55 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

mestre dos magos,

Fiz uma nova proposta:

O código insere um "X" na primeira linha e na primeira coluna, os quais eu usei para a formatação condicional.

 
Postado : 24/04/2014 2:44 pm
(@edcronos)
Posts: 1006
Noble Member
 

estou quase conseguindo, eu estava fazendo a função numa planilha e testando em outro

 Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Fimrow = Target.Row
    Fimcel = Target.Address
    Calculate
    End Sub

em um modulo:

    Public Fimcel As String
    Public Fimrow As Long

    Public Function colAtv() As String
        colAtv = Mid(Fimcel, InStr(Fimcel, "$") + 1, InStr(2, Fimcel, "$") - 2) ' retorna a letra
    End Function

    Public Function linAtv() As Long
         linAtv = Fimrow
    End Function

chegou a ser automático mas não sei pq parou

voltou
=colatv() retorna a letra da coluna da celula ativa
=linatv() retorna a linha da celula ativa

 
Postado : 24/04/2014 2:44 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

Edcronos,

Veja o anexo, em vez de função, usei nomeei a célula ativa.

Ainda não sei se daria pra criar uma função para isto.

 
Postado : 24/04/2014 3:41 pm
(@edcronos)
Posts: 1006
Noble Member
 

é eu achei estranho,
a que eu fiz as vezes funciona as vezes não
tem hora que fica um bom tempo no funcionamento e do nada para de funcionar
no caso da formatação de linha seria somente colocar =lin(a1)=linatv()
mas está muito instável
eu particularmente deste as primeiras vezes que testei macros com varredura em tempo real, não gostei, parece que deixam a planilha um tanto quanto pesada,
mas quero aprender a fazer uma função

 
Postado : 24/04/2014 3:57 pm
(@edcronos)
Posts: 1006
Noble Member
 
 Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Calculate
End Sub
Public Function colAtv() As String
    Application.Volatile
    colAtv = ActiveCell.Column
    End Function

    Public Function linAtv() As Long
    Application.Volatile
          linAtv = ActiveCell.Row
    End Function

assim parece que vai bem,
será que dá para juntar as duas numa só e fazer dar valor independentes?
=atvcel(col;lin) =atvcel(col;) =atvcel(;lin)

 
Postado : 24/04/2014 4:16 pm
(@edcronos)
Posts: 1006
Noble Member
 

particularmente eu não gostei da resposta do excel para esse tipo de varredura,

mas está aí a função retorna linha e coluna ativas
mas tenho que estudar a respeito de funções, estou totalmente perdido sobre o assunto

 
Postado : 24/04/2014 4:55 pm
Página 1 / 2