Notifications
Clear all

escala de trabalho com revezamento de turnos

31 Posts
5 Usuários
0 Reactions
21.4 K Visualizações
(@elfoeda)
Posts: 40
Trusted Member
Topic starter
 

Olá amigos do planilhando!

gostaria de fazer uma planilha com código em VBA que gerasse automaticamente uma aba para cada dia do mês, do dia 1º ao dia 31.

e na planilha do dia primeiro eu inserisse a escala de trabalho e o excel se encarregasse de copia-los para todos os outros dias, logicamente, obedecendo aos criterios de horários e giro da escala, como na imagem abaixo.

se alguém puder me ensinar como fazer, ficaria agradecido.

att.

 
Postado : 11/08/2013 1:00 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Segue planilha corrigida a diferença do dia da semana.
Alteração
1- Solicita; somente se houver planilhas diferentes da planilha nome Base; se quer excluir.
2- Digite em B1 na Planilha Base o primeiro dia do mês que deseja "montar" , formato d/m/aaaa

Veja se lhe auxilia

 
Postado : 30/08/2013 5:48 am
(@elfoeda)
Posts: 40
Trusted Member
Topic starter
 

Obrigado caro Reinaldo,

tens me ajudado demais e nao quero ficar te alugando... ao descompactar a planiha, vejo que ja existem as 31 abas,sem clicar no botao executar, diferentemente da planilha anterior e isso nao eh nenhum problema. Vi nessas abas que abrindo-as uma a uma, a data e o dia da semana se alteram corretamente, isso no mes de dezembro 2013, nao conferi se corresponde com exatidao ao calendario daquele mes.

Como estou testando aqui, e nao sei se fiz o certo, na planilha base insiro os nomes dos colaboradores e em B1 a data de 01/09/2013 para gerar a planilha para setembro e clico em executar, eh perguntado se desejo excluir as planilhas se digo que sim, da erro em tempo de execucao 13, tipos incompativeis. As abas 1 e 2 ficam com o dia do mes e o dia da semana corretos, mas da aba 3 em diante, todas repetem 01/09/2013 e Domingo.

Se digo que nao desejo excluir as planilhas da erro em tempode execucao 1004, esse nome ja foi usado escolha outro. Dai as planilhas ficam todas como dezembro.

Muito obrigago pelo esforco em me ajudar, agradeco mesmo brother!

 
Postado : 31/08/2013 8:12 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Esse erro, provavelmente foi devido a falta dos códigos de revezamento, já que o preenchimento das planilhas adicionadas baseia-se nessa informação, em não existindo gera erro.
Caso não deseje que a rotina exclua as planilhas (se preferir faze-lo manualmente, quando necessário), exclua ou "comente" inserindo um apóstrofo " ' " (sem as aspas) no inicio da linha, o seguinte trecho do codigo:

Application.DisplayAlerts = False
If Sheets.Count > 1 Then
    msg = MsgBox("deseja excluir as planilhas", vbYesNo, "Atenção")
        If msg = vbYes Then
            For Each plan In Sheets
                If plan.Name <> "Base" Then plan.Delete
            Next
        End If
End If
Application.DisplayAlerts = True

Abaixo segue o codigo alterado verificando tambem se em c4 há dado, e excluindo o botão "executar" das demais planilhas; copie e cole sobre o existente.

Dim uD As Integer
Sub AbrePlans()
Dim x As Integer, c As Integer
Dim msg As VbMsgBoxResult
Application.ScreenUpdating = False
Application.DisplayAlerts = False
If Sheets.Count > 1 Then
    msg = MsgBox("deseja excluir as planilhas", vbYesNo, "Atenção")
        If msg = vbYes Then
            For Each plan In Sheets
                If plan.Name <> "Base" Then plan.Delete
            Next
        End If
End If
Application.DisplayAlerts = True
If Sheets("Base").Range("B1") = "" Or Sheets("Base").Range("C4") = "" Then
    MsgBox "Informe a data em B1 e horarios nos demais campos"
    Exit Sub
Else
    uD = Day(Application.WorksheetFunction.EoMonth(Sheets("Base").Range("B1"), 0))
End If
For x = 1 To uD
c = Sheets.Count
 Sheets("Base").Copy After:=Sheets(c)
 
 Sheets(c + 1).Name = Format(x, "00")
    ActiveSheet.Shapes.Range(Array("CommandButton1")).Select
    Selection.Delete
    
    Next
Folgas
Application.ScreenUpdating = True
MsgBox "Concluido"
Sheets("Base").Range("A15,A4:A9,B1,C4:C9").ClearContents
End Sub
Sub Folgas()
Dim a As String, b As String, c As String, d As String, e As String, f As String
Dim g As String, h As String, i As String, j As String, k As String, l As String
Dim Cel0 As String, Cel1 As String, Cel2 As String
Dim x As Integer
Dim nPlancel As Range
Dim nFolga()
nFolga = Array("C2", "C3", "FOLGA")

Set nPlancel = Worksheets("01").Cells
a = nPlancel(4, 1).Value
b = nPlancel(5, 1).Value
c = nPlancel(6, 1).Value
d = nPlancel(7, 1).Value
e = nPlancel(8, 1).Value
f = nPlancel(9, 1).Value

For x = 1 To uD Step 2
    Cel1 = Format(x, "00"): Cel2 = Format(x + 1, "00"): Cel0 = Format(x - 1, "00")
    If Cel0 = "00" Then
        m = ""
        Else
        m = Application.Match(Sheets(Cel0).Cells(4, 3).Value, nFolga, 0) - 1
    End If
    If x = 1 Then
        g = nPlancel(4, 3).Value
        h = nPlancel(5, 3).Value
        i = nPlancel(6, 3).Value
        j = nPlancel(7, 3).Value
        k = nPlancel(8, 3).Value
        l = nPlancel(9, 3).Value
    Sheets(Cel1).Cells(1, 2) = VBA.CDate("01/" & Month(Sheets("Base").Range("B1")) & "/" & Year(Sheets("Base").Range("B1")))
    Sheets(Cel1).Cells(1, 6) = VBA.Format(Sheets(Cel1).Cells(1, 2), "DDDD")
    Sheets(Cel2).Cells(1, 2) = Sheets(Cel1).Cells(1, 2) + 1
    Sheets(Cel2).Cells(1, 6) = VBA.Format(Sheets(Cel2).Cells(1, 2), "DDDD")
    Else
    Sheets(Cel1).Cells(1, 2) = Sheets(Cel0).Cells(1, 2) + 1
    Sheets(Cel1).Cells(1, 6) = VBA.Format(Sheets(Cel1).Cells(1, 2), "DDDD")
            If Cel2 <= 30 Then
                Sheets(Cel2).Cells(1, 2) = Sheets(Cel1).Cells(1, 2) + 1
                Sheets(Cel2).Cells(1, 6) = VBA.Format(Sheets(Cel2).Cells(1, 2), "DDDD")
            End If
        Select Case m
            Case 0
                g = nFolga(1)
                h = nFolga(1)
                i = nFolga(2)
                j = nFolga(2)
                k = nFolga(0)
                l = nFolga(0)
            Case 1
                g = nFolga(2)
                h = nFolga(2)
                i = nFolga(0)
                j = nFolga(0)
                k = nFolga(1)
                l = nFolga(1)
             Case 2
                g = nFolga(0)
                h = nFolga(0)
                i = nFolga(1)
                j = nFolga(1)
                k = nFolga(2)
                l = nFolga(2)
   
        End Select
    End If
    Sheets(Cel1).Cells(4, 1) = a
    Sheets(Cel1).Cells(5, 1) = b
    Sheets(Cel1).Cells(6, 1) = c
    Sheets(Cel1).Cells(7, 1) = d
    Sheets(Cel1).Cells(8, 1) = e
    Sheets(Cel1).Cells(9, 1) = f
    Sheets(Cel1).Cells(4, 3) = g
    Sheets(Cel1).Cells(5, 3) = h
    Sheets(Cel1).Cells(6, 3) = i
    Sheets(Cel1).Cells(7, 3) = j
    Sheets(Cel1).Cells(8, 3) = k
    Sheets(Cel1).Cells(9, 3) = l
 'Verifica se já está na planilha
    If Cel2 <= uD Then
        
        Sheets(Cel2).Cells(9, 3) = l
        Sheets(Cel2).Cells(4, 1) = a
        Sheets(Cel2).Cells(5, 1) = b
        Sheets(Cel2).Cells(6, 1) = c
        Sheets(Cel2).Cells(7, 1) = d
        Sheets(Cel2).Cells(8, 1) = e
        Sheets(Cel2).Cells(9, 1) = f
        Sheets(Cel2).Cells(4, 3) = g
        Sheets(Cel2).Cells(5, 3) = h
        Sheets(Cel2).Cells(6, 3) = i
        Sheets(Cel2).Cells(7, 3) = j
        Sheets(Cel2).Cells(8, 3) = k
    End If

Next
End Sub
 
Postado : 31/08/2013 9:01 am
(@elfoeda)
Posts: 40
Trusted Member
Topic starter
 

Espetacular caro amigo Reinaldo, deu super certo. Fico imensamente agradecido.

 
Postado : 03/09/2013 4:15 pm
(@elfoeda)
Posts: 40
Trusted Member
Topic starter
 

Olá pessoal,

a planilha do amigo Reinaldo ficou perfeita, mas agora preciso fazer uma pequena alteração, em vez de cada funcionário trabalhar apenas 02 dias em cada turno, agora preciso que a planilha seja alterada para 03 dias em cada turno e 03 dias de folga.

ficaria assim por exemplo:

Dias 01,02 e 03

Dias 04,05 e 06

Dias 07,08 e 09

Segue planilha a ser modificada:

download/file.php?id=9516

e aqui alterações que tiveram que serem inseridas para que ficassem exatamente como devia:

Esse erro, provavelmente foi devido a falta dos códigos de revezamento, já que o preenchimento das planilhas adicionadas baseia-se nessa informação, em não existindo gera erro.
Caso não deseje que a rotina exclua as planilhas (se preferir faze-lo manualmente, quando necessário), exclua ou "comente" inserindo um apóstrofo " ' " (sem as aspas) no inicio da linha, o seguinte trecho do codigo:

Application.DisplayAlerts = False
If Sheets.Count > 1 Then
    msg = MsgBox("deseja excluir as planilhas", vbYesNo, "Atenção")
        If msg = vbYes Then
            For Each plan In Sheets
                If plan.Name <> "Base" Then plan.Delete
            Next
        End If
End If
Application.DisplayAlerts = True

Abaixo segue o codigo alterado verificando tambem se em c4 há dado, e excluindo o botão "executar" das demais planilhas; copie e cole sobre o existente.

Dim uD As Integer
Sub AbrePlans()
Dim x As Integer, c As Integer
Dim msg As VbMsgBoxResult
Application.ScreenUpdating = False
Application.DisplayAlerts = False
If Sheets.Count > 1 Then
    msg = MsgBox("deseja excluir as planilhas", vbYesNo, "Atenção")
        If msg = vbYes Then
            For Each plan In Sheets
                If plan.Name <> "Base" Then plan.Delete
            Next
        End If
End If
Application.DisplayAlerts = True
If Sheets("Base").Range("B1") = "" Or Sheets("Base").Range("C4") = "" Then
    MsgBox "Informe a data em B1 e horarios nos demais campos"
    Exit Sub
Else
    uD = Day(Application.WorksheetFunction.EoMonth(Sheets("Base").Range("B1"), 0))
End If
For x = 1 To uD
c = Sheets.Count
 Sheets("Base").Copy After:=Sheets(c)
 
 Sheets(c + 1).Name = Format(x, "00")
    ActiveSheet.Shapes.Range(Array("CommandButton1")).Select
    Selection.Delete
    
    Next
Folgas
Application.ScreenUpdating = True
MsgBox "Concluido"
Sheets("Base").Range("A15,A4:A9,B1,C4:C9").ClearContents
End Sub
Sub Folgas()
Dim a As String, b As String, c As String, d As String, e As String, f As String
Dim g As String, h As String, i As String, j As String, k As String, l As String
Dim Cel0 As String, Cel1 As String, Cel2 As String
Dim x As Integer
Dim nPlancel As Range
Dim nFolga()
nFolga = Array("C2", "C3", "FOLGA")

Set nPlancel = Worksheets("01").Cells
a = nPlancel(4, 1).Value
b = nPlancel(5, 1).Value
c = nPlancel(6, 1).Value
d = nPlancel(7, 1).Value
e = nPlancel(8, 1).Value
f = nPlancel(9, 1).Value

For x = 1 To uD Step 2
    Cel1 = Format(x, "00"): Cel2 = Format(x + 1, "00"): Cel0 = Format(x - 1, "00")
    If Cel0 = "00" Then
        m = ""
        Else
        m = Application.Match(Sheets(Cel0).Cells(4, 3).Value, nFolga, 0) - 1
    End If
    If x = 1 Then
        g = nPlancel(4, 3).Value
        h = nPlancel(5, 3).Value
        i = nPlancel(6, 3).Value
        j = nPlancel(7, 3).Value
        k = nPlancel(8, 3).Value
        l = nPlancel(9, 3).Value
    Sheets(Cel1).Cells(1, 2) = VBA.CDate("01/" & Month(Sheets("Base").Range("B1")) & "/" & Year(Sheets("Base").Range("B1")))
    Sheets(Cel1).Cells(1, 6) = VBA.Format(Sheets(Cel1).Cells(1, 2), "DDDD")
    Sheets(Cel2).Cells(1, 2) = Sheets(Cel1).Cells(1, 2) + 1
    Sheets(Cel2).Cells(1, 6) = VBA.Format(Sheets(Cel2).Cells(1, 2), "DDDD")
    Else
    Sheets(Cel1).Cells(1, 2) = Sheets(Cel0).Cells(1, 2) + 1
    Sheets(Cel1).Cells(1, 6) = VBA.Format(Sheets(Cel1).Cells(1, 2), "DDDD")
            If Cel2 <= 30 Then
                Sheets(Cel2).Cells(1, 2) = Sheets(Cel1).Cells(1, 2) + 1
                Sheets(Cel2).Cells(1, 6) = VBA.Format(Sheets(Cel2).Cells(1, 2), "DDDD")
            End If
        Select Case m
            Case 0
                g = nFolga(1)
                h = nFolga(1)
                i = nFolga(2)
                j = nFolga(2)
                k = nFolga(0)
                l = nFolga(0)
            Case 1
                g = nFolga(2)
                h = nFolga(2)
                i = nFolga(0)
                j = nFolga(0)
                k = nFolga(1)
                l = nFolga(1)
             Case 2
                g = nFolga(0)
                h = nFolga(0)
                i = nFolga(1)
                j = nFolga(1)
                k = nFolga(2)
                l = nFolga(2)
   
        End Select
    End If
    Sheets(Cel1).Cells(4, 1) = a
    Sheets(Cel1).Cells(5, 1) = b
    Sheets(Cel1).Cells(6, 1) = c
    Sheets(Cel1).Cells(7, 1) = d
    Sheets(Cel1).Cells(8, 1) = e
    Sheets(Cel1).Cells(9, 1) = f
    Sheets(Cel1).Cells(4, 3) = g
    Sheets(Cel1).Cells(5, 3) = h
    Sheets(Cel1).Cells(6, 3) = i
    Sheets(Cel1).Cells(7, 3) = j
    Sheets(Cel1).Cells(8, 3) = k
    Sheets(Cel1).Cells(9, 3) = l
 'Verifica se já está na planilha
    If Cel2 <= uD Then
        
        Sheets(Cel2).Cells(9, 3) = l
        Sheets(Cel2).Cells(4, 1) = a
        Sheets(Cel2).Cells(5, 1) = b
        Sheets(Cel2).Cells(6, 1) = c
        Sheets(Cel2).Cells(7, 1) = d
        Sheets(Cel2).Cells(8, 1) = e
        Sheets(Cel2).Cells(9, 1) = f
        Sheets(Cel2).Cells(4, 3) = g
        Sheets(Cel2).Cells(5, 3) = h
        Sheets(Cel2).Cells(6, 3) = i
        Sheets(Cel2).Cells(7, 3) = j
        Sheets(Cel2).Cells(8, 3) = k
    End If

Next
End Sub

Se alguém puder fazer isso para mim novamente, desde já agradeço.

 
Postado : 29/10/2013 2:30 pm
(@elfoeda)
Posts: 40
Trusted Member
Topic starter
 

Caro amigo Reinaldo, poderia me dar novamente uma mãozinha?

 
Postado : 31/10/2013 12:45 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

No momento estou fora de minha estação de trabalho, e fica difícil retomar sua solicitação. se não houver resposta, no próximo fim de semana volto a verificar.

 
Postado : 02/11/2013 8:20 am
(@elfoeda)
Posts: 40
Trusted Member
Topic starter
 

sem problemas, desde já agradeço.

 
Postado : 02/11/2013 9:25 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Veja se está em linha ao desejado

 
Postado : 05/11/2013 7:19 am
(@elfoeda)
Posts: 40
Trusted Member
Topic starter
 

Exatamente isso caro amigo Reinaldo!

entretanto tenho um probleminha que tentarei resolver por aqui...

é o seguinte:

A escala de trabalho de cada um desses funcionários segue o padrão 03 dias de C2,03 dias de C3,e 03 dias de FOLGA(a isso chamo de "rodada").

Tenho que gerar uma planilha dessa para cada mês do ano e ficou "mamão com açúcar" com o presente que me deu, nem sei como agradecer além do joinha que é o mínimo que eu poderia fazer.

O problema a que me refiro é que se a rodada já estiver em curso, por exemplo, em 31/10/2013 tenha sido o primeiro dia do funcionário em determinado horário e a partir de 1º de novembro seja o segundo, ela vai executar a rotina estabelecida de 03 dias em cada horário, assim ficaria errado por exemplo a partir de 03 de novembro.

Tentei contornar isso iniciando a planilha com dia 31/10/13 mas não deu certo.

Esse probleminha já havia na primeira planilha, mas como em setembro e outubro a "rodada" se iniciou perfeitamente no dia 1º desses meses não tive problemas, somente agora em novembro.

Assim meu caro, fico imensamente agradecido pelo esforço e a gentileza em ajudar-me, que Deus o abençoe sempre por sua generosidade. Tentarei resolver isso por aqui.

abç.

 
Postado : 05/11/2013 3:38 pm
(@escuderia)
Posts: 179
Reputable Member
 

Grande Reinaldo..... estava acompanhando essa planilha e gostei muito, será que tinha como fazer uma alteração para minha necessidade..... na Minha empresa trabalho com vários estilos de escala ...... essa que vc postou ae quase atende...... será que teria como alterar só o tipo de escala ?
trabalho com as seguintes escalas : 6 dias trabalhados e 1 folga chamada escala 6x01 " onde o funcionário tem 1 domingo por mês de folga " outra escala e a 5x2 trabalha 5 dias e folga 2 dias ..... outra escala e a 12x36 onde trabalha 12 horas e folga 36 horas ... conhecida como trabalha 1 dia e folga 1 dia..... espero ter sido claro !! qualquer coisa e so falar !!!

 
Postado : 08/11/2013 5:22 pm
(@elfoeda)
Posts: 40
Trusted Member
Topic starter
 

Olá meus caros,

então... agora só preciso que a planilha gere a rotina de 03 dias em cada turno a partir da data que eu informar e não só a partir do dia 1º, se alguém mais souber como fazer, desde já agradeço.

att.

 
Postado : 11/11/2013 4:37 pm
(@elfoeda)
Posts: 40
Trusted Member
Topic starter
 

Exatamente isso caro amigo Reinaldo!

entretanto tenho um probleminha que tentarei resolver por aqui...

é o seguinte:

A escala de trabalho de cada um desses funcionários segue o padrão 03 dias de C2,03 dias de C3,e 03 dias de FOLGA(a isso chamo de "rodada").

Tenho que gerar uma planilha dessa para cada mês do ano e ficou "mamão com açúcar" com o presente que me deu, nem sei como agradecer além do joinha que é o mínimo que eu poderia fazer.

O problema a que me refiro é que se a rodada já estiver em curso, por exemplo, em 31/10/2013 tenha sido o primeiro dia do funcionário em determinado horário e a partir de 1º de novembro seja o segundo, ela vai executar a rotina estabelecida de 03 dias em cada horário, assim ficaria errado por exemplo a partir de 03 de novembro.

Tentei contornar isso iniciando a planilha com dia 31/10/13 mas não deu certo.

Esse probleminha já havia na primeira planilha, mas como em setembro e outubro a "rodada" se iniciou perfeitamente no dia 1º desses meses não tive problemas, somente agora em novembro.

Assim meu caro, fico imensamente agradecido pelo esforço e a gentileza em ajudar-me, que Deus o abençoe sempre por sua generosidade. Tentarei resolver isso por aqui.

abç.

Olá pessoal!

infelizmente não consegui resolver esse probleminha da mensagem acima. Até enviei a planilha para um amigo que manja de excel no trabalho, mas ele nem teve tempo de verificar.

Alguém poderia me fazer essa gentileza ?

 
Postado : 04/01/2014 12:47 pm
(@elfoeda)
Posts: 40
Trusted Member
Topic starter
 

Algum amigo aqui poderia me ajudar a editar essa planilha para que ela preencha a escala conforme imagens abaixo, mas a partir da data que eu informar na planilha base ?

03 dias assim:

03 dias assim:

03 dias assim:

OBS: A planilha segue o padrão das imagens, ou seja, 03 em cada horário de trabalho/folga, mas somente a partir do dia 1º, desejava que ela iniciasse no dia em que eu informar.

[/url]
grato!

 
Postado : 07/01/2014 4:50 pm
(@amazonascf)
Posts: 0
New Member
 

tudo que eu baixo quando vou abrir ta com erro pq?

 
Postado : 08/04/2015 1:21 pm
Página 2 / 3