SandroLima escreveu:Ah sim... pelo motivo de que a minha macro (a que ordena a tabela) leva as linhas com registros com formatação condicional de preenchimento amarelo ou vermelho (por exemplo com data da coluna "Pgto / Vencimento" perto da data atual e cujo Status de Pagamento seja ainda "Aguardando pagamento").
Não entendi o sentido do LEVA: "... leva as linhas com registros..."
Na substituição que fez, em vez de colocar na coluna Registro da nova linha, o número do registro seguinte, passou a colocar a quantidade de linhas + 1. Como isso afeta as formatações condicionais?
Com base na última planilha que você mandou, me oriente em como reproduzir o erro. Diga mais ou menos assim: "rodando com a linha que você fez, tal célula deveria estar de tal forma e não está, mas com a linha usando ULinha isso passa a acontecer.". Uma vez o erro reproduzido, fica mais fácil entender e arrumar.
Não tem fórmula na E13; tem na D13, que, aliás, pode ser alterada de
=SOMARPRODUTO((TB_AtividadesDiarias[Registro]<>"")*(TB_AtividadesDiarias[Registro]<>""))-SOMARPRODUTO((TB_AtividadesDiarias[Registro]="-")*(TB_AtividadesDiarias[Registro]="-"))
para
=SOMARPRODUTO(--(TB_AtividadesDiarias[Registro]<>""))-SOMARPRODUTO(--(TB_AtividadesDiarias[Registro]="-"))
Explico: a multiplicação dele por ele mesmo só serve pra transformar VERDADEIRO em 1, e FALSO em 0. Essa transformação acontece porque o Excel entende que se uma operação matemática está sendo feita com um operador lógico, significa que você está interessado no número (1 ou 0) e não nos operadores lógicos VERDADEIRO ou FALSO. É mais usual fazer essa transformação usando o "--" que significa "o negativo do negativo" que na prática não altera nada, mas o Excel entende como uma operação matemática, e transforma VERDADEIRO em 1, e FALSO em 0.
Mas penso que essa situação pode ser contornada mudando a fórmula da célula E13... podemos colocar uma fórmula que some a quantidade de registros e diminua o número de registros repetidos.
Por exemplo a fórmula matricial:
Código: Selecionar todos{=SOMA(SEERRO(1/CONT.SE(TB_AtividadesDiarias[Registro];TB_AtividadesDiarias[Registro]);0))}
O valor do último registro inserido pode ser o resultado dessa fórmula acrescido de 1 (E13 + 1)... o que acha?
Não sei opinar sobre essa solução porque ainda não entendi o problema.
Acho que dá para manter isso também... basta alterar a macro que ordena a tabela... em vez de usar cores das células posso usar fórmulas dentro da macro.
Há menos que vc tenha imaginado outra maneira de identificar as linhas filha... a ideia de identificá-las achei interessante.
Se eu alterar a ordenação da tabela por fórmulas em vez de por cores há possibilidade de que as linhas filhas alterem a posição, digo, saiam do bloco "mãe e filhas" (ao reordenar a tabela a linha filha sairia da proximidade da sua linha mãe?)
Tenho dúvidas se entendi corretamente o que você quis dizer. Entendi que em vez da macro renumerar a coluna de Registros, poderia haver uma fórmula que fizesse com queos registros se renumerassem automaticamente. É isso?
Se for isso, não sei que fórmula seria, mas crio que não vale a pena. As linhas filhas azuis eu posso tirar a qualquer momento, ou podemos alterar o padrão da tabela.
Aliás, tô pra te dizer algo faz tempo e esqueço. A tabela zebrada serve pra ajudar a não perder uma linha de vista, quando você tem que deslocar a planilha para um lado ou outro. Se está seguindo uma linha azul, jamais vai perder a visão da linha que está seguindo, e passar a segui a de cima (ou a de baixo), porque ela é de outra cor. Sua vista, numa distração, pode até se perder e passar a seguir duas linhas acima (ou abaixo), pois essas são da mesma cor que a se segue. Esse é o objetivo do zebrado. É uma questão de gosto, mas eu prefiro tabela zebrada de 3 em 3 linhas, ou seja, 3 brancas, 3 azuis, 3 brancas, 3 azuis... a tabela fica mais leve, e mais difícil de perder a linha que está sendo seguida, quando desloca a tabela pra um lado ou outro. Digamos que está seguindo uma linha que é a linha de cima de uma faixa branca tripla. O cérebro guarda facilmente que você está seguindo a linha de cima. Se for a do meio ou a de baixo idem. E sendo grupo de 3 linhas, você dificilmente vai confundir o grupo que está seguindo com o grupo branco acima (ou abaixo) porque esse grupo está 6 linhas acima (ou abaixo). Vou te mandar a última planilha que você mandou, de volta com essa alteração pra você avaliar.
Pensando nessa alteração há possibilidade de "travar as alterações de um bloco "mãe e filhas"? Por exemplo, ao alterar o Status da linha mãe para pago alterar automaticamente das linhas filhas?
Sim, claro! As células marcadas com seu X, vão receber fórmulas pegando os dados da mãe, exceto a descrição, que será digitado para cada linha, e a coluna de valor, que será reavaliada a cada "acerto". A avaliação será assim: a macro ira separar os valores vindo de fórmulas (no início será o valor da linha mãe, dividido pela quantidade de filhas), dos valores digitados. Os digitados serão somados, vai ser calculado quanto falta pra chegar no valor total (da linha mãe) e esse restante será dividido pelas linhas que contém fórmula, via fórmula mesmo. Acho que as que estarão com fórmula devem ter uma cor diferente, ou algum meio de avisar ao operador de que aquele valor é automático, e provavelmente, não correto. A medida que ele for digitando os valores corretos, a quantidade de filhas, daquele bloco, com fórmulas vai diminuindo até acabar.
Seria perfeito assim.
Já está assim! Aliás, seria bom testar isso também. Veja que isso não torna o sistema infalível. Se o operador apagar o Sub de mais de 1 linha de uma mesma família, sei lá o que acontecerá. São algumas medidas apenas pra diminuir as chances de erro, mas não para tornar o erro impossível.
Isso acho que é possível resolver da maneira como conversamos no começo do tópico. Um fórmula que conte os registros não duplicados.
Então, essa contagem de registros não duplicados já existe. Quando a macro classifica as linhas pelo Registro, e ordem decrescente, o número do registro da primeira linha da tabela representa essa quantidade de registros não duplicados. Por isso é que mudei a linha:
.ListColumns("Registro").DataBodyRange.Cells(1, 1).Value = ULinha
para
.ListColumns("Registro").DataBodyRange.Cells(1, 1).Value = .ListColumns("Registro").DataBodyRange.Cells(2, 1).Value + 1
Usei Cells(2,1) (linha 2 da tabela) porque já havia sido inserida a linha nova, e assim, a quantidade de registros não repetidos passo para a linha 2.
Será que é possível que você esteja atribuindo a essa mudança, um problema que na verdade não tem relação com ela?
Jimmy
Você não está autorizado a ver ou baixar esse anexo.
Nas mensagens que te ajudaram de alguma forma, dê seu LIKE: clique no "positivo" (ícone OBRIGADO).
Se o problema está encerrado, por favor, clique em MARCAR RESOLVIDO.