Foto de Washington T.
Washington há 1 mês
Enviada pelo
Site

Criei uma planilha para controle de frequência de pessoal no

Criei uma planilha para controle de frequência de pessoal no formato de um calendário, que muda as informações conforme o ano e o mês. A planilha vem com um campo para escolha do setor de trabalho, que automaticamente, trás na coluna ao lado do calendário, a lista dos nomes dos funcionários. Dentro do calendário, para cada funcionário, coloquei duas linhas com os períodos da manhã e da tarde, onde serão realizados cadastros com diferentes siglas, como por exemplo: PÇ (presença); FT (falta), FE (férias), etc., com mudanças de cor para cada código de forma automática. Comecei a esbarrar em dificuldades, na hora que, por exemplo: escolho um setor (automaticamente vem o pessoal que trabalha no setor); escolho o ano (automaticamente os dias da semana se ajustam no calendário conforme o mês que já está aparente); escolho o mês (automaticamente se ajusta os dias da semana no calendário); e faço o lançamento das diferentes situações dos funcionário (presença, falta, férias, etc.). Porém, não consigo salvar estas informações, de forma que, por exemplo, quando eu mudo o setor, e são trocados os nomes dos funcionário, os campos fiquem vazios para novos cadastros, e se eu selecionar o setor anterior, onde já havia cadastrado, as informações retornassem à tela do calendário, com todas as informações, conforme foram cadastradas anteriormente. Qual o procedimento, com o uso de VBA, para automatizar este cadastro de funcionários, de forma que retornem as informações cadastradas anteriormente, conforme mudo o setor, o ano e/ou o mês?
3 respostas
Minerva IA
Inteligência Artificial do Profes
Respondeu há 1 mês

Para resolver o seu problema usando VBA no Excel, você pode criar um sistema que armazena os dados de frequência em uma planilha separada e utiliza macros para preencher automaticamente a planilha de calendário com as informações corretas ao mudar de setor, ano ou mês. Abaixo está um esboço de como você poderia estruturar isso:

  1. Estrutura da Planilha:
  2. Crie uma nova planilha, por exemplo, chamada "Data", onde você armazenará os registros de frequência.
  3. Nesta planilha, suas principais colunas podem ser: Setor, Ano, Mês, Funcionário, Dia, Período, Código.
  4. Cada linha corresponderá a uma entrada única de frequência para cada funcionário, dia e período.

  5. Usando VBA:

  6. Salvar Dados: Crie uma macro que, ao mudar o setor, ano ou mês, salva todas as informações atuais do calendário na planilha "Data".

  7. Carregar Dados: Crie uma macro que, ao mudar o setor, ano ou mês, carrega as informações da planilha "Data" de volta para o seu calendário.

  8. Exemplo de Código VBA:

Sub SaveData()
    Dim wsData As Worksheet
    Dim wsCalendar As Worksheet
    Dim lastRow As Long
    Dim setor As String
    Dim ano As Long
    Dim mes As Long
    Dim nomeFuncionario As String
    Dim dia As Integer
    Dim periodo As String
    Dim codigo As String

    ' Defina as suas planilhas
    Set wsData = ThisWorkbook.Sheets("Data")
    Set wsCalendar = ThisWorkbook.Sheets("Calendar") ' Mude para o nome real da sua planilha

    ' Limpa os dados antigos para o setor, ano e mês selecionados
    setor = wsCalendar.Range("Setor").Value
    ano = wsCalendar.Range("Ano").Value
    mes = wsCalendar.Range("Mes").Value
    With wsData
        .Rows("2:" & .Rows.Count).ClearContents
    End With

    lastRow = wsData.Cells(wsData.Rows.Count, "A").End(xlUp).Row + 1

    ' Loop através do calendário para salvar os dados
    ' Ajuste esses números para corresponder às suas configurações de planilha
    For dia = 1 To 31
        For Each cell In wsCalendar.Range("A1:A10") ' Ajuste o range
            nomeFuncionario = cell.Offset(0, 0).Value
            periodo = cell.Offset(0, 1).Value
            codigo = cell.Offset(0, 2).Value

            ' Salva apenas se houver um código válido
            If codigo <> "" Then
                With wsData
                    .Cells(lastRow, 1).Value = setor
                    .Cells(lastRow, 2).Value = ano
                    .Cells(lastRow, 3).Value = mes
                    .Cells(lastRow, 4).Value = nomeFuncionario
                    .Cells(lastRow, 5).Value = dia
                    .Cells(lastRow, 6).Value = periodo
                    .Cells(lastRow, 7).Value = codigo
                    lastRow = lastRow + 1
                End With
            End If
        Next cell
    Next dia
End Sub

Sub LoadData()
    Dim wsData As Worksheet
    Dim wsCalendar As Worksheet
    Dim setor As String
    Dim ano As Long
    Dim mes As Long
    Dim row As Long
    Dim lastRow As Long

    ' Defina as suas planilhas
    Set wsData = ThisWorkbook.Sheets("Data")
    Set wsCalendar = ThisWorkbook.Sheets("Calendar") ' Mude para o nome real da sua planilha

    setor = wsCalendar.Range("Setor").Value
    ano = wsCalendar.Range("Ano").Value
    mes = wsCalendar.Range("Mes").Value

    ' Limpa o calendário atual
    wsCalendar.Range("CalendarRange").ClearContents ' Mude para o intervalo real

    lastRow = wsData.Cells(wsData.Rows.Count, 1).End(xlUp).Row

    ' Loop através dos dados armazenados para carregar as informações
    For row = 2 To lastRow
        With wsData
            If .Cells(row, 1).Value = setor And _
               .Cells(row, 2).Value = ano And _
               .Cells(row, 3).Value = mes Then
                  ' Carregue as informações de volta para a planilha de calendário
                  ' Ajuste de acordo com a estrutura da sua planilha
            End If
        End With
    Next row
End Sub
  1. Automatização:
  2. Essas macros podem ser chamadas automaticamente ao mudar de setor, ano ou mês usando eventos como Worksheet_Change ou botões dedicados.

  3. Notas Adicionais:

  4. Ajuste os intervalos de célula e os nomes das planilhas para corresponder à sua configuração.
  5. Teste suas macros em um ambiente seguro para garantir que tudo funcione como esperado antes de aplicá-las a dados reais.

Com esses passos, suas informações de frequência devem ser armazenadas e recuperadas conforme necessário, mantendo a integridade dos dados ao mudar de setor, ano ou mês.

Já tem uma conta? Entrar
Ao me cadastrar, confirmo que li e concordo com os Termos de Uso .
Envie uma dúvida grátis
Resposta na hora da Minerva IA e de professores particulares
Enviar dúvida
Professor Vilson B.
Identidade verificada
  • CPF verificado
  • E-mail verificado
Respondeu há 1 mês
Contatar Vilson Rafael

Washington,

Nesse caso é melhor você solicitar uma aula.

Um professor já respondeu

Envie você também uma dúvida grátis
Ver resposta
Professor José F.
Respondeu há 1 mês
Contatar José
 

Para automatizar o cadastro de funcionários na planilha que você descreveu e garantir que, ao selecionar um setor, ano ou mês, as informações previamente cadastradas sejam retornadas corretamente e que novos lançamentos sejam salvos, você pode implementar a solução utilizando VBA no Excel. Aqui está uma abordagem para isso:

Passos a serem seguidos no VBA:

  1. Criação de uma Tabela de Registro de Dados:

    • Precisamos de uma estrutura de dados que armazene as informações de frequência dos funcionários para cada combinação de setor, ano, mês, funcionário e os períodos (manhã e tarde).
    • Uma boa prática é criar uma tabela em uma aba separada para armazenar todos os registros de frequência. Essa tabela pode conter as colunas: Setor, Ano, Mês, Funcionário, Dia, Período (manhã/tarde), e Status (PÇ, FT, etc.).
  2. Automação da Interface (Dropdowns):

    • Os campos de seleção de setor, ano, e mês precisam estar vinculados ao VBA para carregar ou limpar dados de acordo com a seleção atual.
  3. Recuperação dos Dados Cadastrados:

    • Ao alterar o setor, ano ou mês, o código VBA deve buscar na tabela de registros e preencher o calendário com os dados correspondentes àquela combinação de setor, ano e mês.
  4. Salvamento dos Novos Dados:

    • Quando o usuário altera uma célula dentro do calendário (preenchendo presença, falta, etc.), o VBA deve salvar essas informações na tabela de registros, associando-as ao setor, funcionário, ano, mês e dia.

Estrutura do VBA:

1. Tabela de Dados:

Crie uma aba chamada Registro_Frequencia com as seguintes colunas:

  • Setor (Coluna A)
  • Ano (Coluna B)
  • Mês (Coluna C)
  • Funcionário (Coluna D)
  • Dia (Coluna E)
  • Período (Coluna F – manhã/tarde)
  • Status (Coluna G – PÇ, FT, etc.)

 

Um professor já respondeu

Envie você também uma dúvida grátis
Ver resposta
Minerva IA
do Profes
Respostas na hora
100% no WhatsApp
Envie suas dúvidas pelo App. Baixe agora
Precisa de outra solução? Conheça
Aulas particulares Encontre um professor para combinar e agendar aulas particulares Buscar professor