Página 1 de 1

Atribuir um Status com base no valor de duas datas em uma listview

Enviado: Sex Jul 12, 2019 2:49 pm
por Diego Shimizu
Olá pessoal.

Sou novo por aqui e muito leigo no assunto. Tudo que consegui até agora foi assistindo vídeos no Youtube e lendo matérias em fóruns. Não encontrei nada específico, então, resolvi escrever.

Tenho uma planilha de cadastro que possui duas colunas: Data de início de vigência e data de final de vigência. A diferença entre elas é de 3 anos.
Por meio de formatação condicional, consigo que o Excel me dê o status da vigência: Se até a data atual o documento estiver vigente, o Excel me retorna com "VIGENTE"; Se, com base na data atual, o documento estiver vencido, o Excel me retorna com "VENCIDO".
Essas informações são carregadas para uma listview. Acontece que a planilha possui muitos registros e está se tornando pesada para carregar.
Existiria alguma maneira, através de VBA, de realizar essa análise de diferença entra as duas datas e o retorno com o STATUS sem utilizar fórmulas na planilha?

Se ficar difícil de entender, me avisem que dou mais informações.

Obrigado desde já pela ajuda!

Re: Atribuir um Status com base no valor de duas datas em uma listview

Enviado: Sex Jul 12, 2019 3:50 pm
por Reinaldo
Possível, em principio é, porem e preciso conhecer sua estrutura e distribuição de dados; modelo representativo de sua planilha, dados fictícios se necessário, com algo em torno de uns 50 registros para teste;
bem como descrever/mostrar como é hoje (formulas/condicional/etc..), e o que espera ter/quando.
Somente a condicional, que eu saiba não e motivo para a lentidão/demora informada

Re: Atribuir um Status com base no valor de duas datas em uma listview

Enviado: Sex Jul 12, 2019 4:18 pm
por Diego Shimizu
Obrigado pelo retorno.

A formatação condicional em si, de fato, não é o problema.
O problemas, creio, está nas fórmulas e funções usadas.

Com o aumento dos registros, a planilha vai se tornando lenta.
Assim, sendo esse o problema ou não, a ideia é partir logo pro VBA.

A listview tem 3 colunas: Data inicial | Data final | Status

A data inicial e a final são carregadas da planilha.

O que quero é uma fórmula que preencha, na própria listview, o status de acordo com o valor de Data Final em relação a data de Hoje.

Se a data final for igual ou anterior a hoje, o status seria "VIGENTE"

Se a data final for superior a hoje, o status seria "RENOVAR"

O código seria executado toda vez que a listview fosse exibida.

Conseguiu entender?

EDIT

Estou anexando a planilha para análise. Ela está sem as fórmulas, funções. Creio que seja suficiente para ajudar a entender o que pretendo.

https://drive.google.com/file/d/1yt85to ... sp=sharing

Re: Atribuir um Status com base no valor de duas datas em uma listview

Enviado: Sex Jul 12, 2019 6:18 pm
por Reinaldo
Entender ja havia entendido, precisava saber quando/onde.
voçe menciona ".. listview tem 3 colunas: Data inicial | Data final | Status..."
Bem a unica listview (que localizei)do modelo (frm.Pesquisa) enviado tem muito mais colunas e não tem data inicial.
"..Nome, DC50, Vencimento, Status, Email, Telefone, Funções, Documentos, Observações..."
Supondo que seja essa; e pela forma de "preenchimento", uma maneira seria:
Alterar a linha:

Código: Selecionar todos

Status = .Cells(linha, 5).Value
Para:

Código: Selecionar todos

If CDate(Vencimento) >= Date Then
    Status = "Vigente"
Else
    Status = "Renovar"
End If

Re: Atribuir um Status com base no valor de duas datas em uma listview

Enviado: Sex Jul 12, 2019 6:58 pm
por Diego Shimizu
Reginaldo, muito obrigado pela ajuda.

De fato, eu estava trabalhando em uma tabela "teste" para, por fim, implementar na tabela fina (a que compartilhei). Por isso, a descrição que fiz ficou diferente daquilo que efetivamente encontrou na tabela compartilhada.

Parece que o código funcionou perfeitamente.

A dúvida é: A medida que o tempo passar, o status da será atualizado?

Por exemplo: Hoje, realizei um registro cuja data de vencimento é 13/07/2019. Logo, o status é "VIGENTE".
No dia 14/07/2019, quando acessar a listview, este registro já estará vencido e, portanto, seu status deverá ser "RENOVAR".

O código que apresentou fará essa leitura?

Obrigado.

Re: Atribuir um Status com base no valor de duas datas em uma listview

Enviado: Sáb Jul 13, 2019 5:45 am
por Reinaldo
A coluna status é calculada, a cada abertura/carregamento do formulário/listview, portanto deverá apresentar essa "revisão"

Re: Atribuir um Status com base no valor de duas datas em uma listview

Enviado: Seg Jul 15, 2019 9:18 am
por Diego Shimizu
Muito obrigado Reginaldo!

Ficou perfeito.

Re: Atribuir um Status com base no valor de duas datas em uma listview

Enviado: Seg Jul 15, 2019 4:22 pm
por Diego Shimizu
Aproveitando o post, fiz mais algumas implementações na planilha.

A dúvida agora é com respeito a impressão: Quando seleciono o item que desejo imprimir e clico no botão "Imprimir", a tela com as opções de impressão é exibida no fundo do userform, deixando o arquivo "congelado". Alguém poderia me ajudar com situação?

Segue link do arquivo: https://drive.google.com/file/d/1MEU5sv ... sp=sharing

Re: Atribuir um Status com base no valor de duas datas em uma listview

Enviado: Seg Jul 15, 2019 8:50 pm
por Reinaldo
Bem sua duvida atual não tem nada haver como o titulo do post; assim creio que o ideal seria abertura de um novo post; mas...
Porque precisa do printPreview?
Porque não utiliza somente o print?

Re: Atribuir um Status com base no valor de duas datas em uma listview

Enviado: Seg Jul 15, 2019 9:10 pm
por Diego Shimizu
Obrigado Reginaldo.

Abri um novo tópico: https://www.tomasvasquez.com.br/forum/v ... =20&t=7160

Agradeço se puder me ajudar.

A ideia de usar o printview é poder pré visualizar o arquivo antes da impressão. O mesmo pode ser feito com o print? (Se desejar, pode responder no novo tópico...)