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

Tópicos relacionados a códigos VBA, gravação de macros, etc.
  • Avatar do usuário
  • Avatar do usuário
Avatar do usuário
Por RonaldoFCO
Posts Avatar
#39797
Preciso de uma macro que trabalhe da seguinte forma:

*Tenho duas pastas de trabalho no excel sendo uma com nome "Inspeção" e a outra "Cumprimento da Inspeção".

*A pasta Inspeção possui 3 guias, sendo que essas guias são nomeadas em função do horário de preenchimento sendo das 6 às 14horas guia "1", das 14 às 22horas a guia "2" e das 22 às 06horas a guia "3".

*Quando efetua-se o preenchimento diário de uma inspeção de um determinado equipamento dentro de um horário compreendido nos horários já mencionados, ao clicar em um botão "GERAR RELATÓRIO" existente em cada guia de preenchimento gera-se automaticamente um PDF com uma caixa de mensagem confirmando que o relatório foi gerado com sucesso. O relatório é nomeado automaticamente em função da data e hora de preenchimento (exemplo: relatorio03012019_0700).

A macro que eu preciso é uma que faça a seguinte função:

*Na pasta "Cumprimento da Inspeção", possui uma coluna com três células referente aos horário mencionados sendo B5 (06 às 14hs), B6 (14 às 22hs), e B7 (22 às 06hs);

*Na linha 1Lx31C tenho os dias de 1 a 31 referente ao mês de janeiro (descrito na célula B3) no caso;

Quando clicar no botão "GERAR RELATÓRIO" da pasta Inspeção, dependendo o dia e o horário eu preciso que uma macro fixe o valor 1 na célula da pasta Cumprimento da Inspeção referente ao mês, dia e horário da ação.

Por exemplo, quando estiver no horário das 06 às 14 horas no dia 2, fizer o preenchimento e clicar no botão pra gerar o relatório, na célula D5 da coluna do dia 2 e da linha do primeiro horário vai subir e fixar o número 1. No mesmo dia no horário das 14 às 22 horas, quando após o preenchimento clicar no botão pra gerar o relatório, automaticamente na célula D6 fixará o valor 1, e assim por diante. Conforme o Mês, Dia e horário compreendido conforme mencionado acima.

Conto com a ajuda de vocês, desde já agradeço.
Avatar do usuário
Por Jimmy
Avatar
#39799
Olá Ronaldo,

Creio que fica bem difícil te ajudar sem um modelo da planilha pra acompanhar toda sua explicação.

Pode anexar um?

Jimmy San JUan
#40270
Bom dia,

Anexei os arquivos referente a dúvida sobre uma macro, se poder me ajudar, eu agradeço.

Att.

RonaldoFCO
Jimmy escreveu:Olá Ronaldo,

Creio que fica bem difícil te ajudar sem um modelo da planilha pra acompanhar toda sua explicação.

Pode anexar um?

Jimmy San JUan
Avatar do usuário
Por Jimmy
Avatar
#40368
Olá Ronaldo,

Você tem diversos módulos criados. Apague todos, deixando apenas 1 deles. Limpe seu conteúdo

Copie o código abaixo, e cole nesse módulo.
Código: Selecionar todos
Sub GERARRELATORIO1TURN()
    Call GERARRELATORIO(1, Range("W4").Value)
End Sub

Sub GERARRELATORIO2TURN()
    Call GERARRELATORIO(2, Range("W4").Value)
End Sub

Sub GERARRELATORIO3TURN()
    Call GERARRELATORIO(3, Range("X4").Value)
End Sub

Sub GERARRELATORIO(Turno, Nome)
    Dim MyLocal As String
    MyLocal = "C:\Users\klrf00130719\Desktop\RELATORIO - ROTAS\"

    Arq = "CUMPRIMENTO DA INSPEÇÃO.xlsx"
    On Error Resume Next
    Set CumIns = Workbooks(Arq)
    Erro = Err
    On Error GoTo 0
    If Erro <> 0 Then
        Workbooks.Open Filename:="CUMPRIMENTO DA INSPEÇÃO.xlsx"  'D:\Usuários\Luis\Downloads\
        Set CumIns = Workbooks(Arq)
        Fechar = "S"
    End If
    Dia = Format(Now(), "dd"):   Col = Dia + 2 'Inicio na coluna 2 ("B")
    Mes = Format(Now(), "mm"):   Lin = Mes * 7 - 3 + Turno
    CumIns.Sheets("Plan1").Cells(Lin, Col).Value = 1
    If Fechar = "S" Then
        ActiveWorkbook.Save
        ActiveWorkbook.Close
    End If

'    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        MyLocal & Nome & ".pdf", Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True
    
    MsgBox "Relatório  " & Nome & "  gerado com sucesso." & vbCrLf & vbCrLf & _
           "Valor 1 lançado no dia " & Dia & ", mes " & Mes & " e turno " & Turno & "."
    Set CumIns = Nothing
End Sub

Não entendi bem se o horário base pra saber em qual linha do mês lançar o 1, era o horário do relógio, ou se quem definia a linha era a planilha que acionou a macro (as 3 planilhas de turno). Fiz a macro de forma a definir a linha com base na planilha que tem o botão que acionou a macro.

Se a planilha CUMPRIMENTO DA INSPEÇÃO já estiver aberta, a macro apenas lança o valor 1 na linha e coluna respectiva, e deixa ela aberta.
Se estiver fechada, a macro abre pra lançar o 1, salva e fecha.

Teste e de retorno.

Jimmy San Juan
Avatar do usuário
Por RonaldoFCO
Posts Avatar
#40614
Boa noite meu amigo, tá perfeita a macro, porém eu preciso garantir a seguinte condição: quando o usuário entrar as 23 horas do dia 27/01 por exemplo, ele terá até as 07 horas da manhã do dia 28/01 para preencher a planilha de inspeção, porém quando salvar e gerar o relatório o valor 1 deverá subir no dia 27/01 no 2º turno no caso em específico (23hs às 07hs). Quando se preenche no horário das 07 às 15hs sobe o valor 1 no 3º turno e na data correspondente do preenchimento, no horário das 15 às 23hs mesma condição sendo 1º turno, e no horário das 23 às 07hs deverá subir 1 no 2º turno na data e e dentro do horário do turno para fechamento dos turnos que são 3 conforme especificado na planilha. O valor 1 deverá subir na coluna e linha dentro do horário do turno independente do preenchimento no início ou final do turno, tipo se eu entrar às 07 horas da manhã eu tenho até as 15 horas para fazer o preenchimento do relatório e gerar o mesmo, o valor 1 subirá dentro desse range de horário de turno na data do preenchimento. A macro está rodando legal, porém só esse detalhe mesmo. Desde já muito obrigado pela ajuda e disposição na resolução.
Avatar do usuário
Por Jimmy
Avatar
#40616
Olá Ronaldo,

Deixa eu ver se entendi.

Os turnos de 7-15h e 15-23h estão OK. O preenchimento do turno 23-07h precisa ajuste. Ele pode ser feito23:30h por exemplo, e deve ser lançado nesse mesmo dia, porém, se for preenchido 3:00h por exemplo, deve ser lançado no dia anterior, que foi o dia de início do turno. É isso?

Dúvida. Se o operador clicou no botão da pasta “RIO - 1° TURNO” às 10 da manhã. O 1 deve ser lançado no turno 1, que foi a planilha que acionou a macro, ou no turno 2 pelo horário do relógio?
Avatar do usuário
Por RonaldoFCO
Posts Avatar
#51336
Boa tarde!
Desculpe não retornar, tive alguns contratempos e interrompi esse projeto, porém, agora estou retornando para finalizar esse trabalho.
Com relação as perguntas:

1 - (Os turnos de 7-15h e 15-23h estão OK. O preenchimento do turno 23-07h precisa ajuste. Ele pode ser feito23:30h por exemplo, e deve ser lançado nesse mesmo dia, porém, se for preenchido 3:00h por exemplo, deve ser lançado no dia anterior, que foi o dia de início do turno. É isso?) - é exatamente isso mesmo, o preenchimento no horário das 23h-07h (referente ao 2º turno) tem que cair para data no periodo das 23h às 23h59min mesmo que o preenchimento seja feito às 3h da madrugada por exemplo. Exemplo: operador faz a rota a partir das 23h do dia 26 de dezembro e faz o lançamento as 3h do dia 27 de dezembro, o valor 1 deverá ser inserido na data do dia 26 de dezembro no 2º turno, ok.

2 - (Dúvida. Se o operador clicou no botão da pasta “RIO - 1° TURNO” às 10 da manhã. O 1 deve ser lançado no turno 1, que foi a planilha que acionou a macro, ou no turno 2 pelo horário do relógio?) - se o botão da pasta referente ao turno for clicado fora do horário específico do turno (1º_TURNO 15H-23H/ 2º_TURNO 23H-07H/ 3º_TURNO 07H-15H) o valor 1 não poderá ser inserido, o relatório até poderá ser gerado porém o valor 1 não pode ser inserido na célula. Poderia ser inserido um valor diferente de 1, pois a intenção é levantar estatísticas com relação ao cumprimento do lançamento da rota e assim gerar um gráfico de indice de cumprimento das rotas.
Desde já obrigado pela ajuda.
Avatar do usuário
Por Jimmy
Avatar
#51373
Olá Ronaldo,

Alterei a macro, e envio anexa para sua avaliação.

A macro agora verifica se o turno, pelo horário de execução, bate com o turno onde o botão da macro foi acionado. Se não bater, pergunta se deve prosseguir (pois pode ter havido um engano), e cancela ou prossegue, segundo a resposta dada.

Caso o turno esteja em desacordo, e o operador responda que quer prosseguir, o processo continua, mas o sinal de "?" será colocado, em vez do "1".

Se esta mensagem colabora para a solução do problema, peço que dê um Like, clicando no botão com o "positivo" existente acima e a direita de cada mensagem.

Jimmy San Juan
Você não está autorizado a ver ou baixar esse anexo.
Avatar do usuário
Por RonaldoFCO
Posts Avatar
#51677
Bom dia, é isso mesmo meu amigo, ficou show.
Só mais um detalhe, eu precisava que quando chegasse no dia 31 de dezembro e passasse para o dia primeiro do próximo ano, as células preenchidas referente aos turnos nos dias elas fossem limpadas para iniciar o ano.
Desde já muito obrigado!
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