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

Utilize essa sessão para criar tópicos relacionados a tabelas dinâmicas, formatações condicionais, subtotais, filtros, etc
Por SandroLima
#39381
Boa tarde, pessoal

Preciso de ajuda em duas questões:

Primeira:
Qual a forma de fazer para que as células que estejam coloridas por obedecerem determinada condição fiquem no topo da tabela?

Tenho uma tabela e as células das colunas "Registro" e "Data" possuem formatação condicional.

Como faço para que as linhas da tabela que tenham células coloridas nessas duas colunas ("Registro" e "Data") fiquem no topo da tabela automaticamente ao serem preenchidas?

Segunda:
As regras da formatação condicional se aplicam a todas as Células das colunas "Registro" e "Data"... porém cada vez que rodo a macro para inserir uma nova linha ele cria uma nova linha de formatação condicional lá no gerenciamento de regras da formatação condicional... regra esta só para a nova linha que foi adicionada...
Daqui a pouco terei milhares de regras... uma para cada linha.
Como corrigir isso?

Segue planilha anexa para elucidação.

Obrigado a quem puder colaborar.
Você não está autorizado a ver ou baixar esse anexo.
#39407
Boa tarde, pessoal.

Uma parte do problema resolvi com o seguinte código:
Código: Selecionar todos
With TabelaAtividades.Sort
        .SortFields.Clear
        .SortFields.Add Key:=Range("TB_AtividadesDiarias[[#All],[Registro]]"), SortOn:= _
        xlSortOnCellColor, Order:=xlDescending, DataOption:=xlSortNormal
        .SortOnValue.Color = RGB(255, 235, 156)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
Ele atende para a coluna "Registro". Porém não sei ainda como resolver para a coluna "Data" já que possui mais de uma formatação condicional.

Também ainda não consegui resolver o fator de adicionar uma nova regra de formatação condicional no gerenciador de regras cada vez que o código roda.

Segue a planilha ("PLAN2") com o resultado pretendido.

Continuo aguardando ajuda.
Você não está autorizado a ver ou baixar esse anexo.
#39412
SandroLima escreveu:... porém cada vez que rodo a macro para inserir uma nova linha ele cria uma nova linha de formatação condicional ...
Daqui a pouco terei milhares de regras...
Verdade! E vai comprometer a performance da planilha!
Sugestão: no início do código que insere a linha insira um comando para limpar a FC de toda a Tabela, na sequência deixe o comando que insere a linha e por último coloque um comando para reaplicar a FC na Tabela.
#39417
Fiz esse código há um tempo. Ele aplica cores. Veja se consegue aproveitar as estruturas. O gravador poderá te ajudar também.
Código: Selecionar todos
Sub AplicaFCNomesSituação()
 Dim nomes As Range, situação As Range
 Set nomes = Range("B2:B" & Cells(Rows.Count, 2).End(3).Row)
 Set situação = Range("L2:L" & Cells(Rows.Count, 12).End(3).Row)
 
 'limpa as regras de FC da planilha
 Cells.FormatConditions.Delete
 
 'aplica FC na coluna B com base no nome que estiver na célula - JOÃO ou MARIA
 With nomes.FormatConditions
  .Add Type:=xlTextString, String:="JOÃO" , TextOperator:=xlContains
    With .Item(.Count).Interior
     .ThemeColor = xlThemeColorAccent3
     .TintAndShade = 0.399945066682943
    End With
    
  .Add Type:=xlTextString, String:="MARIA",  TextOperator:=xlContains
    With .Item(.Count).Interior
     .Color = 49407
    End With
 End With
 
'aplica FC na coluna L via fórmula
 With situação.FormatConditions
    .Add Type:=xlExpression, Formula1:= _
        "=E($I2<>"""";$I2=1)"
    With .Item(.Count).Interior
        .Color = 255
    End With
    
    .Add Type:=xlExpression, Formula1:= _
        "=E($I2<>"""";$I2>1)"
    With .Item(.Count).Interior
        .Color = 5296274
    End With
 End With
End Sub
#39419
Estou na tentativa aqui, Osvaldomp.

Consegui transcrever a primeira sugestão conforme seu código... deu certo... e ficou assim:
Código: Selecionar todos
TabelaAtividades.DataBodyRange.FormatConditions.Delete
A segunda parte... a de aplicar cores com VBA... tentei algo assim:
Código: Selecionar todos
With TabelaAtividades.ListColumns("Registro").DataBodyRange.FormatConditions
        .Add Type:=xlExpression, Formula1:= _
        "=E(F$11="Paciente";(EXT.TEXTO($I10;1;LOCALIZAR("ano";$I10)-1)*1>=8);OU($G10="";$G10="-"))"
        With .Item(.Count).Interior
            .Color = RGB(255, 235, 156)
        End With
    End With
Mas parece estar apresentando erro na sintaxe da fórmula (Está com a cor vermelha na guia Desenvolvedor).
E coloquei apenas para colorir o interior da célula... eu não soube como acrescentar a parte da cor da fonte.

Segue planilha com o código aplicado.
Você não está autorizado a ver ou baixar esse anexo.
#39421
SandroLima escreveu: Mas parece estar apresentando erro na sintaxe da fórmula (Está com a cor vermelha na guia Desenvolvedor).
As aspas que fazem parte da fórmula devem ser dobradas. Veja no exemplo que coloquei no post anterior.
Para testar e acertar a sintaxe faça uma sub somente para inserir a fórmula em uma célula qualquer e depois de acertar então coloque-a no código que insere a FC. Algo conforme abaixo:
Código: Selecionar todos
Sub InsereFórmula()
ActiveCell.Value = "suafórmula"
End Sub
E coloquei apenas para colorir o interior da célula... eu não soube como acrescentar a parte da cor da fonte.
Experimente assim:
Código: Selecionar todos
With .Item(.Count)
  .Interior.Color = RGB(255, 235, 156)
  .Font.Color=RGB (0,0,0)
End With
#39423
O código inteiro rodou normalmente sem erros... excluiu a formatação existente... executou as demais rotinas do código... só não inseriu a formatação novamente.
Código: Selecionar todos
With TabelaAtividades.ListColumns("Registro").DataBodyRange.FormatConditions
        .Add Type:=xlExpression, Formula1:= _
        "=E(F$11=""Paciente"";(EXT.TEXTO($I11;1;LOCALIZAR(""ano"";$I11)-1)*1>=8);OU($G11="""";$G11=""-""))"
        With .Item(.Count)
            .Interior.Color = RGB(255, 235, 156)
            .Font.Color = RGB(46, 139, 87)
        End With
    End With
Mas rodou sem erro aparentemente. O que pode ser?
#39426
SandroLima escreveu:O código inteiro rodou normalmente sem erros...
O código não trava por erro porque você colocou um comando para não travar ~~~> On Error Resume Next.
Se você remover esse comando o código irá travar na parte que tenta ordenar pela cor.
Aliás porque você colocou esse comando? Não vejo necessidade, pior, não recomendável nesse código.

excluiu a formatação existente... só não inseriu a formatação novamente.
Exclui e reinsere a FC. Após rodar o código selecione uma célula ative a FC e você verá que a Regra foi aplicada. Não está pintando as células pois me parece que a sua fórmula precisa de correção: esta parte ~~~> "=E(F$11=""Paciente""; ... ~~~> não deveria ser ~~~>"=E($F11=""Paciente""; ... ?
Não examinei as demais partes. Sugiro que você aplique a FC manualmente e só depois que estiver funcionando manualmente faça os ajustes no código.
obs.
1. Set TabelaAtividades = Nothing ~~~> ao encerrar a execução o valor da variável se escoa, então esse comando é desnecessário
2. Ulinha ~~~> o código atribui um valor a essa variável e em seguida insere uma linha na Tabela, em consequência da nova linha o valor da variável não fica desatualizado ?
#39442
Boa tarde, Osvaldomp. Boa tarde, pessoal do fórum.

Tudo indo bem aqui na adequação do código da planilha

Com a dica que me deu ele parou de incluir novas regras no gerenciador de regras da FC.

O código da FC dessa coluna na minha planilha completa ficou da seguinte maneira:
Código: Selecionar todos
With TabelaAtividades.ListColumns("Registro").DataBodyRange.FormatConditions
        .Add Type:=xlExpression, Formula1:= _
        "=E($I11=""Paciente"";(EXT.TEXTO($N11;1;LOCALIZAR(""ano"";$N11)-1)*1>=8);OU($L11="""";$L11=""-""))"
        .Add Type:=xlExpression, Formula1:= _
        "=OU($W11=""Aguardando pagamento"";$W11="""";$X11="""")"
        With .Item(.Count)
        .Interior.Color = RGB(255, 235, 156)
        .Font.Color = RGB(156, 101, 0)
        End With
    End With
E fez a rotina desejada... limpou a FC e depois aplicou a FC na coluna desejada.

Quando acrescentei mais uma linha de código da FC novamente deixou de aplicar a FC desejada na coluna.
Código: Selecionar todos
.Add Type:=xlExpression, Formula1:= _
        "=E($AA11<>"""";$AA11<>""-"";OU($AB11="""";$AB11=""-""))"
        With .Item(.Count)
O código ficou dessa maneira:
Código: Selecionar todos
With TabelaAtividades.ListColumns("Registro").DataBodyRange.FormatConditions
        .Add Type:=xlExpression, Formula1:= _
        "=E($I11=""Paciente"";(EXT.TEXTO($N11;1;LOCALIZAR(""ano"";$N11)-1)*1>=8);OU($L11="""";$L11=""-""))"
        .Add Type:=xlExpression, Formula1:= _
        "=OU($W11=""Aguardando pagamento"";$W11="""";$X11="""")"
        .Add Type:=xlExpression, Formula1:= _
        "=E($AA11<>"""";$AA11<>""-"";OU($AB11="""";$AB11=""-""))"
        With .Item(.Count)
        .Interior.Color = RGB(255, 235, 156)
        .Font.Color = RGB(156, 101, 0)
        End With
    End With
Só deixou de funcionar quando eu acrescentei a terceira FC.
Fiz algo de errado agora? Ou é por causa da quantidade de FC?
#39446
Esse código que você colocou por último aplica 3 Regras na FC, no entanto ele aplica o Formato somente na última Regra.
Rode o código, em seguida selecione qualquer célula na coluna B da Tabela e ative a FC. Você verá que as 3 Regras foram aplicadas, no entanto, no campo que indica o Formato de cada Regra, só aparece a cor do preenchimento na terceira Regra e nas duas primeiras aparece "sem definição de formato".

Veja novamente o exemplo que eu coloquei no post #39417 :
primeira Regra ~~~> critério "JOÃO" ~~~> na sequência o formato desejado (a cor do preenchimento);
segunda Regra ~~~> critério "MARIA" ~~~> idem.

Ou seja, para cada Regra devem ser inseridos o critério e na sequência a formatação desejada. ;)
#39479
Obrigado, Osvaldomp.

Era isso mesmo... apliquei como orientou e funcionou e não acrescentou mais regras na FC.

Muito obrigado.

Agora vou aplicar nas demais colunas que também possuem a FC... em uma das colunas inclusive as células com a FC tem borda... qual a linha de código que devo acrescentar aqui?
Código: Selecionar todos
With TabelaAtividades.ListColumns("Registro").DataBodyRange.FormatConditions
        .Add Type:=xlExpression, Formula1:= _
        "=E($I11=""Paciente"";(EXT.TEXTO($N11;1;LOCALIZAR(""ano"";$N11)-1)*1>=8);OU($L11="""";$L11=""-""))"
        With .Item(.Count)
        .Interior.Color = RGB(255, 235, 156)
        .Font.Color = RGB(156, 101, 0)
        End With
    End With
E mais uma vez obrigado.
#39480
SandroLima escreveu:... em uma das colunas inclusive as células com a FC tem borda... qual a linha de código que devo acrescentar aqui?
Acrescente esta linha ~~~> .Borders.LineStyle = xlContinuous
Código: Selecionar todos
With TabelaAtividades.ListColumns("Registro").DataBodyRange.FormatConditions
  .Add Type:=xlExpression, Formula1:= _
  "=E($I11=""Paciente"";(EXT.TEXTO($N11;1;LOCALIZAR(""ano"";$N11)-1)*1>=8);OU($L11="""";$L11=""-""))"
   With .Item(.Count)
    .Interior.Color = RGB(255, 235, 156)
    .Font.Color = RGB(156, 101, 0)
    .Borders.LineStyle = xlContinuous
   End With
End With
#39481
Muito obrigado , Osvaldomp...

Mas visualmente não mudou nada. E olhe que tentei de diversas maneiras, inclusive somente da maneira que você descreveu.
Queria uma borda vermelha por exemplo. Somente nas células que atendessem à condição.
Código: Selecionar todos
With TabelaAtividades.ListColumns("CPF / CNPJ").DataBodyRange.FormatConditions
        .Add Type:=xlExpression, Formula1:= _
        "=E((EXT.TEXTO($I11;1;LOCALIZAR(""ano"";$I11)-1)*1>=8);OU($K11="""";$K11=""-""))"
        With .Item(.Count)
        .Interior.Color = RGB(255, 235, 156)
        .Font.Color = RGB(156, 101, 0)
        '.BorderAround , , , vbBlack
        .Borders.LineStyle = xlContinuous
        .Borders.ColorIndex = 0
        .Borders.Weight = RGB(156, 101, 0)
        '.Borders(xlEdgeTop).Color = RGB(250, 22, 41)
        '.Borders(xlEdgeBottom).Color = RGB(250, 22, 41)
        End With
    End With
#39487
Selecione uma célula vazia e sem qualquer formatação aplicada a ela e rode o código abaixo.
Em seguida digite joão na célula e veja o resultado.
Código: Selecionar todos
Sub BordasFC()
 With ActiveCell.FormatConditions
  .Add Type:=xlTextString, String:="JOÃO", TextOperator:=xlContains
   With .Item(.Count)
    .Interior.Color = RGB(255, 235, 156)
    .Font.Color = RGB(156, 101, 0)
    .Borders.LineStyle = xlContinuous
    .Borders.Color = vbRed
   End With
 End With
End Sub
#39492
Bom dia, Osvaldomp

Funciona perfeitamente em qualquer área da tabela. Menos na coluna "CPF / CNPJ" que preciso. Deve ser algo com o apontamento dela no código.

O cabeçalho da coluna é CPF / CNPJ.

Esse código executa:
Código: Selecionar todos
TabelaAtividades.ListColumns("Registro").DataBodyRange.FormatConditions.Delete
Mas esse não:
Código: Selecionar todos
TabelaAtividades.ListColumns("CPF / CNPJ").DataBodyRange.FormatConditions.Delete
Como fica a nomenclatura da coluna no código? Ela possui esse espaço mesmo entre os nomes e a barra de separação "/".
#39493
Putz ... eu achei que com o assunto Bordas estávamos finalizando o tópico, mas agora voltamos para o Delete :?: :( :roll:
#39495
Pode ser tb rsrs

Fato é que nesse trecho... no apontamento da coluna (CPF / CNPJ) não está formatando:

É por causa do nome no cabeçalho da coluna que tem espaços?
Código: Selecionar todos
With TabelaAtividades.ListColumns("CPF / CNPJ").DataBodyRange.FormatConditions
Código completo para a formatação da coluna:
Código: Selecionar todos
With TabelaAtividades.ListColumns("CPF / CNPJ").DataBodyRange.FormatConditions
        .Add Type:=xlExpression, Formula1:= _
        "=E((EXT.TEXTO($I11;1;LOCALIZAR(""ano"";$I11)-1)*1>=8);OU($K11="""";$K11=""-""))"
        With .Item(.Count)
        .Interior.Color = RGB(255, 235, 156)
        .Font.Color = RGB(156, 101, 0)
        .Borders.LineStyle = xlContinuous
        .Borders.Color =  vbRed
        End With
    End With
#39496
Repetindo sugestões anteriores:
a) aplique a FC manualmente e só passe para o código depois que manualmente funcionar;
b) utilize o gravador
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