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
#48050
Bom dia,

Onde eu trabalho, para controlar e dar prioridade de escolha de férias aos funcionários, criamos um sistema de contagem de pontuação por período de férias, quem tiver mais pontos perde a prioridade de escolha de quem tem menos pontos. Por exemplo: No período de 01 a 31 de janeiro quem tirar férias nesse período ganha 4 pontos por dia (Considerando esse período de alta temporada de escolha entre os funcionários para tirar férias) e o mês de agosto todos os dias valem 1 ponto(considerado de baixa temporada de férias). Gostaria se possível que a planilha fizesse essa contagem automática baseada no período que o funcionário tirou férias, para ilustração, segue em anexo a planilha como exemplo. Muito Obrigado pela atenção.
Você não está autorizado a ver ou baixar esse anexo.
#48058
Veja se resolve: O código faz o calculo da celula atual selecionada
Código: Selecionar todos
Sub PontosData()

Dim DataInicio As Date
Dim DataFim As Date
Dim Pontos As Integer

For qtd = 1 To 4

    If Plan4.Cells(ActiveCell.Row, qtd * 3).Value <> Empty Or Plan4.Cells(ActiveCell.Row, qtd * 3).Value <> Empty Then
    
        DataInicio = Plan4.Cells(ActiveCell.Row, qtd * 3).Value
        DataFim = Plan4.Cells(ActiveCell.Row, (qtd * 3) + 1).Value
        
        Pontos = 0
        For d = CLng(DataInicio) To CLng(DataFim)

            Select Case Month(CDate(d))
                Case Is = 1                 'Janeiro
                    Pontos = Pontos + 4
                Case Is = 7                 'Julho
                    Pontos = Pontos + 4
                Case Is = 3                 'Marco
                    Pontos = Pontos + 2
                Case Is = 4
                    Pontos = Pontos + 1
                Case Is = 5
                    Pontos = Pontos + 1
                Case Is = 6
                    Pontos = Pontos + 1
                Case Is = 8
                    Pontos = Pontos + 1
                Case Is = 9
                    Pontos = Pontos + 1
                Case Is = 10
                    Pontos = Pontos + 1
                Case Is = 11
                    Pontos = Pontos + 1
                
                Case Is = 2                 'Fevereiro, analisar dia
                    If Day(CDate(d)) <= 15 Then
                        Pontos = Pontos + 4
                    Else
                        Pontos = Pontos + 2
                    End If
                Case Is = 12                'Dezembro, analisar dia
                    If Day(CDate(d)) <= 15 Then
                        Pontos = Pontos + 1
                    Else
                        Pontos = Pontos + 4
                    End If
            End Select
        Next
        
        Plan4.Cells(ActiveCell.Row, (qtd * 3) + 2).Value = Pontos
    End If

Next
End Sub
#48060
Bom dia Deimiler,

Segue a planilha abaixo.

A solução foi desenvolvida com a criação de uma função.
Copiei a sua linha, e os valores que obtive estão diferentes dos teus, mas os da função são os corretos.

Tirei a tabela da planilha de controle, colocando-a em planilha própria. Duas tabelas lado a lado acabam interferindo uma na outra. Se inserirmos, por exemplo, linhas na primeira planilha, selecionando a linha toda, a segunda tabela vai ganhar uma linha nova também, o que não seria bom. O mesmo vale para apagar linhas.

Alterei o leiaute da tabela de pontos, mas se preferir o leiaute mais parecido com o antigo, podemos adaptar a função para lê-lo. Me avise.

Se houver algum erro, a mensagem aparecerá na própria célula.

Limitei a quantidade de dias de férias em 100, para que seja dado um alerta caso uma data seja digitada errada e gerar muitos dias de férias. Se esse valor for pequeno pra sua realidade, podemos aumentar. Limitei também, pelo mesmo motivo, a quantidade de linhas na tabela de pontos, para o máximo de 30.

A data inicial e a final das férias são parâmetros diferentes, logo, podem estar em colunas não contíguas.

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

Jimmy San Juan
#48104
Bom dia,
Se não for muito incomodo, onde está a planilha de sua postagem?
Jimmy escreveu:Bom dia Deimiler,

Segue a planilha abaixo.

A solução foi desenvolvida com a criação de uma função.
Copiei a sua linha, e os valores que obtive estão diferentes dos teus, mas os da função são os corretos.

Tirei a tabela da planilha de controle, colocando-a em planilha própria. Duas tabelas lado a lado acabam interferindo uma na outra. Se inserirmos, por exemplo, linhas na primeira planilha, selecionando a linha toda, a segunda tabela vai ganhar uma linha nova também, o que não seria bom. O mesmo vale para apagar linhas.

Alterei o leiaute da tabela de pontos, mas se preferir o leiaute mais parecido com o antigo, podemos adaptar a função para lê-lo. Me avise.

Se houver algum erro, a mensagem aparecerá na própria célula.

Limitei a quantidade de dias de férias em 100, para que seja dado um alerta caso uma data seja digitada errada e gerar muitos dias de férias. Se esse valor for pequeno pra sua realidade, podemos aumentar. Limitei também, pelo mesmo motivo, a quantidade de linhas na tabela de pontos, para o máximo de 30.

A data inicial e a final das férias são parâmetros diferentes, logo, podem estar em colunas não contíguas.

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

Jimmy San Juan
#48108
Esqueci de postar.... segue.

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

Jimmy San Juan
Você não está autorizado a ver ou baixar esse anexo.
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