Tópicos relacionados a códigos VBA, gravação de macros, etc.
Por kiko 09 Ago 2019 às 08:12
Membro 1 Estrela
Mensagens: 56
Reputação: 17
#46668
Bom dia a todos, estou tento um problema para resolver é o seguinte:
Tenho uma planilha com nomes dos empregados;
Outra com os materiais que usam e o período máximo para as trocas;
Outra com o nome do empregado, o material e a data que foi TROCADA.
PENSO EU que com VBA seria mais provável.
Como posso fazer para que, ao abrir essa pasta de trabalho, me apareça a relação de todos os empregados e os materiais que devem ser trocados da DATA ATUAL ATÉ DOIS DIAS APÓS?
Obs; Baseado na tabela de Periodicidade de troca da planilha “Materiais”
Apenas usuários registrados podem ver ou baixar anexos.
Avatar do usuário
Por Jimmy 09 Ago 2019 às 09:57
Membro 5 Estrelas
Mensagens: 622
Reputação: 391
#46670
Bom dia Kiko,

Segue a planilha. A verificação se a troca é necessária ou não fiz por fórmula. A macro, que é executada na abertura da planilha, apenas classifica a tabela, de forma a deixar nas linhas de cima as trocas necessárias.

Qualquer dúvida, me avise.

Jimmy San Juan
Apenas usuários registrados podem ver ou baixar anexos.
Por kiko 09 Ago 2019 às 13:58
Membro 1 Estrela
Mensagens: 56
Reputação: 17
#46680
Jimmy bom dia, mais uma vez você prontamente em ajudar, mas vamos para a realidade atual:
temos mais de 50 empregados
e esses empregados trocam diversos tipos de materiais
materiais esse que tem validade para troca de diversos períodos
que cada empregado pode ou não trocar mais de um material da mesma vez
Esses materiais vencem em datas diferentes, haja vista a periodicidade de trocas
Vamos ao que eu penso que poderia ser feito:
Ao abrir a pasta de trabalho seria apresentado, caso necessita-se de trocas, um formulário com uma relação com nome empregado, material à ser trocado e a data que aquele material venceria ou venceu.
A partir da troca realizada essa nova data seria o parâmetro para a relação futura.
Não sei se me fiz entender, mas qualquer dúvida estou disposto a sana-la.
Pelo exposto acima que acho que tem que ser por VBA, para ser uma coisa dinâmica e automática.
Desde já agradeço e no aguardo de suas enriquecidas dicas.
Avatar do usuário
Por Jimmy 09 Ago 2019 às 15:14
Membro 5 Estrelas
Mensagens: 622
Reputação: 391
#46685
Olá Kiko,

Creio que a forma que eu te apresentei atende às necessidades, é totalmente automático, e mostra quem tem trocas a fazer, e quem não. O que podemos acrescentar é um segundo critério de classificação por nome da pessoa, para que quando ela comparecer para trocar, vejam-se as suas necessidades de trocas todas juntas.

Quando a troca é feita, basta digitar a data do dia na coluna de data, e pronto.

O que podemos fazer apenas para você poder testar, é alterar a fórmula para em vez de pegar o dia de HOJE(), pegar uma data digitada em alguma célula. Assim você pode simular mudanças de dias. Lembre-se que a classificação é feita apenas na abertura da planilha, então, ao simular uma mudança de data, teria que salvar/fechar e abrir a planilha.

Eu gostaria que você me dissesse onde o modelo que mandei está insuficiente, para podermos acertar.

Se você preferir fazer 100% com macro VBA, não há problema, podemos fazer. Não sei seu nível de conhecimento em Excel ou VBA, mas para quem não tem muito conhecimento, pode ser mais fácil de fazer manutenção em fórmulas em caso de mudanças de planilha, colunas, faixas, etc, do que em VBA.

Jimmy San Juan
Por kiko 09 Ago 2019 às 20:03
Membro 1 Estrela
Mensagens: 56
Reputação: 17
#46694
Jimmy boa noite, mais uma vez dedicado e atencioso
“Creio que a forma que eu te apresentei atende às necessidades, é totalmente automático”
Resposta: Concordo mas atende em parte às necessidades.

“Quando a troca é feita, basta digitar a data do dia na coluna de data, e pronto.”
Resposta: Quando a troca é feita é gerado uma nova linha, pois a entrega anterior tem que ficar registrada, por isso um novo registro.

“O que podemos fazer apenas para você poder testar, é alterar a fórmula para em vez de pegar o dia de HOJE(),.....”
Resposta: Não adiantaria pelo exposto acima.

“Eu gostaria que você me dissesse onde o modelo que mandei está insuficiente, para podermos acertar.”
Resposta: No modelo apresentado teria que alterar a data do registro já existente e na realidade gerar um novo registro.

“Se você preferir fazer 100% com macro VBA, .... Não sei seu nível de conhecimento em Excel ou VBA, .....”
Resposta: Hoje não sou totalmente Crú, mas também não estou no seu nível e de outros aqui existentes, mas já faço algum códigos graças as dicas desse e outros fórum que muito enriquece meu conhecimento.

Obs: Como relatado acima, para cada vez que se faz uma troca se gera um novo registro individual EMPREGADO/MATERIAL/DATA e essa data que passará a ser o parâmetro do próximo RELATÓRIO apresentado na abertura, haja vista não poder DELETAR/ALTERAR o já existente, por isso que disse anteriormente “que acho que tem que ser por VBA, para ser uma coisa dinâmica e automática.
Certo de sua dedicada e valorosa atenção, fico no aguardo.
Avatar do usuário
Por Jimmy 09 Ago 2019 às 21:50
Membro 5 Estrelas
Mensagens: 622
Reputação: 391
#46697
Ok, entendido. A peça que faltava era a necessidade de manter o histórico.

Nova proposta: Deixamos a planilha como está, e incrementamos o restande em VBA da seguinte forma. O operador abre a planilha e terá na sua frente a relação completa:
- os que necessitam ser trocados;
- os que ainda não não estão na hora de trocar;
- os que já foram trocados.

Quando o operador efetuar uma troca, ele digitará "OK" na coluna E (Trocar). A macro identifica essa digitação, e toma três ações:
A) Alterar o OK por OK + HOJE() + Atraso/adianto: "OK 09/08/2019 (-2)". O -2 significa "trocou 2 dias antes do dia da troca. Poderia ser "OK 09/08/2019 (+5)" significando "trocou 5 após o dia certo de troca.
B) Inclui uma nova linha (novo registro) contendo o mesmo funcionário, o mesmo material, e a data de hoje.
C) Reclassifica os dados para que a linha com OK saia da parte de cima da lista, permanecendo apenas as linhas com troca necessária.

Assim, essa linha que gerou a necessidade de troca nunca mais será apontada como TROCA porque a fórmula existente terá sido substituída por OK+HOJE, e a nova linha criada ficará aguardando até chegar a hora da troca dela ser feita.

Podemos também filtrar esses dados, para permitir, por exemplo, consultar o histórico de trocas de João, material Luvas.
Se implementarmos filtros, seria interessante dividir a informação "OK 09/08/2019 (-2)" em 3 colunas distintas, para permitir, por exemplo, classificar por atraso/adianto e identificar quem está atrasando muito as trocas, ou identificar tudo o que foi trocado no dia 04/08/2019, por exemplo.

Se quiser 100% VBA, passamos a verificação se é hora ou não de trocar para a macro, e a planilha passa a não ter mais fórmulas (pelo menos nessa parte).

Aguardo críticas.

Jimmy San Juan
Por kiko 10 Ago 2019 às 07:55
Membro 1 Estrela
Mensagens: 56
Reputação: 17
#46700
Jimmy bom dia, vamos as respostas:
“Nova proposta: Deixamos a planilha como está, e incrementamos o restande em VBA da seguinte forma. O operador abre a planilha e terá na sua frente a relação completa:
- os que necessitam ser trocados;
- os que ainda não não estão na hora de trocar;
- os que já foram trocados.”

Resposta: Deixamos a planilha como está – OK
, e incrementamos o restante em VBA – Ok
Preciso que operador abre a planilha e terá na sua frente a relação completa: SOMENTE
- os que necessitam ser trocados;” da DATA ATUAL ATÉ POR EXEMPLO +2 DIAS, conforme PERIODICIDADE de cada material

“Quando o operador efetuar uma troca, ele digitará "OK" na coluna E (Trocar).”
Resposta: Não podemos digitar na coluna já registrada, temos que gerar um novo registro que “ANULA” aquela troca anterior e vigora a atual

“A macro identifica essa digitação, e toma três ações:
A) Alterar o OK por OK + HOJE() + Atraso/adianto: "OK 09/08/2019 (-2)". O -2 significa "trocou 2 dias antes do dia da troca. Poderia ser "OK 09/08/2019 (+5)" significando "trocou 5 após o dia certo de troca.”
Resposta: Criar uma nova coluna para registrar “Ok” dos registros EMPREGADO/MATERIAL/DATA que foi feita a troca e gerado novo registro EMPREGADO/MATERIAL/DATA achei excelente, porque poderíamos fazer diversos tipos de filtros em cima dessa coluna Ok como por exemplo oque foi dito “Podemos também filtrar esses dados, para permitir, por exemplo, consultar o histórico de trocas de João, material Luvas.”

“Se quiser 100% VBA, passamos a verificação se é hora ou não de trocar para a macro, e a planilha passa a não ter mais fórmulas (pelo menos nessa parte).”
Resposta: Penso eu que seria melhor com VBA, por que quando abrir a pasta de trabalho apareceria um formulário com um ListBox (penso eu) e nele estaria todos os registros EMPREGADO/MATERIAL/DATA que necessitariam de troca na data atual e data atual +2, por exemplo, e usaríamos um formulário que poderia selecionar UM EMPREGADO a fazer a troca de diversos materiais ao mesmo tempo, desde que a PERIODICIDADE de cada material for respeitada. Jimmy o relatado acima são coisas do meu pensamento de estudioso, mas prioriza a sua vasta experiência e bom senso aos quais respeito.
Desde já agradeço sua preciosa atenção e fico no aguardo.
Por kiko 11 Ago 2019 às 11:11
Membro 1 Estrela
Mensagens: 56
Reputação: 17
#46710
Jimmy bom dia, e feliz dia dos pais à você e à todos os usuários que se enquadram nessa condição.
Segue em anexo uma cópia da planilha do modo que pretendo que possa ficar.
As explicações que pensei serem necessárias estão dentro do código.
Grato
Apenas usuários registrados podem ver ou baixar anexos.
Avatar do usuário
Por Jimmy 11 Ago 2019 às 22:40
Membro 5 Estrelas
Mensagens: 622
Reputação: 391
#46715
Olá Kiko, boa noite.

Ultimamente não tenho tido muito tempo para o fórum, e não me sentirei bem em assumir te ajudar num trabalho como esse. Da forma que você está pensando agora, está mais complexo que o que eu havia sugerido, mas, é claro, não adianta ser mais simples se não te atende. Como a ideia cresceu, incluindo agora até formulário, tenho receio de uma hora pra outra não ter tempo pra te ajudar e te deixar na mão. Prefiro nem começar.

Me proponho a te ajudar em uma ou outra dúvida pontual, que você lance no fórum.

Desculpe!

Jimmy San Juan
Por osvaldomp 11 Ago 2019 às 22:48
Membro 5 Estrelas
Mensagens: 1310
Reputação: 648
#46716
Veja se a solução do arquivo anexado ajuda.

Tomei como base o arquivo disponibilizado no primeiro post (#46668).
Apenas usuários registrados podem ver ou baixar anexos.
Por kiko 12 Ago 2019 às 13:48
Membro 1 Estrela
Mensagens: 56
Reputação: 17
#46725
Jimmy bom dia e muito obrigado pela atenção dispensada e aguardo sua ajuda em uma ou outra dúvida pontual que possa a ter.

Osvaldomp obrigado pela sua dedicada atenção e estarei testando e darei o retorno o mais breve possível!
Desde já agradeço.
OBS: Osvaldomp voçê chegou a ver o outro arquivo enviado?
Por kiko 13 Ago 2019 às 07:29
Membro 1 Estrela
Mensagens: 56
Reputação: 17
#46781
Osvaldomp bom dia, estive olhando o seu código e não consegui adaptar a minha realidade, estou anexando um novo arquivo muito perto da minha realidade e gostaria que na ABA "Entregas" selecionasse os registros com data de vencimento IGUAL E + 2 DIAS da DATA ATUAL (todos que estão em AMARELO) e colasse na ABA "Temp" o resultado dessa seleção, é claro que limpando o que já existia anteriormente, pois dessa maneira já teria as trocas à serem realizadas.
Desde já agradeço.
Apenas usuários registrados podem ver ou baixar anexos.
Por osvaldomp 13 Ago 2019 às 11:11
Membro 5 Estrelas
Mensagens: 1310
Reputação: 648
#46787
kiko escreveu:... (todos que estão em AMARELO) ...


Me parece que você se atrapalhou aí pois dos 7 registros que você pintou de amarelo somente 3 atendem ao critério.

Segue uma cópia da nova versão do seu arquivo com o código alterado de acordo.
Apenas usuários registrados podem ver ou baixar anexos.
Por kiko 13 Ago 2019 às 13:35
Membro 1 Estrela
Mensagens: 56
Reputação: 17
#46795
“Me parece que você se atrapalhou aí pois dos 7 registros que você pintou de amarelo somente 3 atendem ao critério.”
Osvaldomp boa tarde, primeiramente me desculpe por não ter te avisado que havia forjado as data de vencimento da ABA "Entregas" da coluna VENCIMENTO, as data da coluna TROCA já são registradas no ato de um novo registro de ENTREGA, por isso que disse para selecionar SOMENTE OS REGISTROS com data de vencimento IGUAL E + 2 DIAS da DATA ATUAL, que no caso seriam os registros com 13, 14 e 15/08/2019 e não há necessidade, nesse momento, de comparar a data da troca com a PERIODICIDADE.
Vou tentar adaptar o código.
Por kiko 13 Ago 2019 às 19:23
Membro 1 Estrela
Mensagens: 56
Reputação: 17
#46824
Infelizmente não conseguir seguir sua logica e deu errado, eu só preciso selecionar os dados da na ABA "Entregas" da coluna VENCIMENTO com data IGUAL E + 2 DIAS da DATA ATUAL E colar na ABA "Temp" o resultado dessa seleção.
Você me daria essa luz?
Por osvaldomp 13 Ago 2019 às 19:59
Membro 5 Estrelas
Mensagens: 1310
Reputação: 648
#46826
substitua esta linha
Código: Selecionar todos  di = Date - mat.Offset(, 1).Value

por esta
Código: Selecionar todos di = Date


e substitua esta outra
Código: Selecionar todos   .[B1:G1].AutoFilter Field:=4, Criteria1:=">=" & CLng(di), Operator:=xlAnd, Criteria2:="<=" & CLng(di) + 2

por esta abaixo
Código: Selecionar todos    .[B1:G1].AutoFilter Field:=5, Criteria1:=">=" & CLng(di), Operator:=xlAnd, Criteria2:="<=" & CLng(di) + 2
Por kiko 15 Ago 2019 às 09:20
Membro 1 Estrela
Mensagens: 56
Reputação: 17
#46885
Osvaldomp bom dia, obrigado pela sua indispensável contribuição na resolução desse tópico e espero um dia poder CRESCER (não de estatura, pois já sou alto, mas de conhecimento) e como você e tantos outros, possa contribuir gratuitamente à quem venha a precisar de meus humildes conhecimentos, muitos deles, adquiridos nesse fórum. Desde já agradeço mais uma vez.