Ir ao conteúdo
  • Cadastre-se

Posts recomendados

Galera,

Estou precisando da ajuda de vocês pra desenrolar uma formula que não estou conseguindo. É o seguinte: Tenho duas colunas, na coluna A tenho as datas e na coluna B tenho os espaços onde insiro os horários, só que gostaria que nas datas que correspondem a sábado e domingo na coluna do horário já aparecesse os nomes sábado e domingo. Como vocês podem perceber, na coluna dos horários não pode ter formula, então teria que ser em VBA. Espero ter sido claro o suficiente e que vocês possam me ajudar.

De já agradeço a quem possa me ajudar.

 

Paulo Cezar.

 

Obs.: Planilha em anexo.

CONTROLE_INDIVIDUAL_DE_FREQUENCIA- ABRIL_2017.zip

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

@paulocezarpicos O que você poderia fazer nesse caso é o seguinte, acrescentar mais uma coluna antes ou depois da coluna A onde você colocaria por exemplo, se o dia 1º de Abril for Sábado, você vai preencher com "SAB", o dia 2 é Domingo, então você preenche com "DOM", nesse caso você já acabou criando para o Excel uma sequencia, agora basta você pegar a seta preta que tem dentro da célula e arrastar até os últimos dias do mês. Ficaria mais ou menos assim o procedimento:

 

85980e1637ce4df685eab6bb993e4ffb.png

 

E o resultado final seria esse:

 

72d086db40dd470bba29c48bd90c8567.png

 

Seria isso ou eu entendi errado?

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Mr. Paglia,

Obrigado por responder. Não posso inserir nada na coluna B, pois tenho que inserir os horários. Eu preciso que apareça somente nos sábados e domingos (os outros dias ficar em branco pra inserir os horários) e tem que ser na coluna B, logo depois das datas.

 

Paulo Cezar.

Link para o comentário
Compartilhar em outros sites

@paulocezarpicos , boa noite.

 

Prá fazer via código, pelo menos suas planilhas deveriam estar mais padronizadas, senão complica o meio de campo. Nem analisei todas, mas já da primeira ("Alexandre") prá segunda ("Antonio Mendes") tem algumas diferenças que interferem diretamente na criação da macro:

1) na Alexandre, a coluna A (Dia), é inserida através de fórmula que pega mês e ano da célula L9. Ok, muito bom, pois nesse caso a coluna A vai conter valores válidos como data e podem ser usados diretamente assim na macro. A macro nesse caso poderia ser, por exemplo:

Sub InsereFDS()
   Dim rgDiasDoMês As Range, rgDia As Range
   Set rgDiasDoMês = ActiveSheet.Range("A13:A43")
   For Each rgDia In rgDiasDoMês
     If IsDate(rgDia.Value) Then
        If Weekday(rgDia.Value) = 7 Or Weekday(rgDia.Value) = 1 Then '7 = Sábado e 1 = Domingo
           rgDia.Offset(0, 1).Resize(1, 4).Value = UCase(Format(rgDia.Value, "dddd"))
        End If
     End If
   Next rgDia
End Sub

 

2) Só que aí, olhando a segunda planilha, "Antonio Mendes", já começam a aparecer as diferenças. A coluna dos dias mostra algarismos de 1 a 31, aí prá converter para uma data válida tudo bem que daria prá pegar da K9 (na do Alexandre era L9), mas além de estar em um intervalo mesclado (K9:L10), mês e ano não estão mais como um valor mas no meio de um outro texto. Indo mais adiante, na planilha "Paulo Cruz", o intervalo mesclado já mudou e está agora em K10:L11.

 

Claro que tudo isso dá prá resolver, dá prá localizar a célula onde estaria o mês/ano, dá prá extrair a substring mês e ano do meio do texto, sem problemas.

 

Mas aí o código começa a inchar desnecessariamente só prá tratar das exceções e erros começam a pipocar. Se você pudesse definir e padronizar uma planilha mestra prá servir de modelo prá todas, facilita muito.

 

@CasaDoHardware (Marcelo) que sempre diz: "Simplifica que simples fica"

Link para o comentário
Compartilhar em outros sites

Edson,

Tô com um probleminha na formula que você me mandou. É que quando altero o mês na planilha principal (Relação), nas outras planilhas não altera os dias sábado e domingo correspondente as suas datas. Estou enviando a planilha em anexo pra que você veja onde está o erro.

 

Obs.: Vou inserir 74 planilhas.

 

Paulo Cezar.

CONTROLE INDIVIDUAL DE FREQUENCIA - 2017.zip

Link para o comentário
Compartilhar em outros sites

Paulo, bom dia.

 

Mas essa necessidade não estava em sua postagem original, não existia uma planilha principal "Relação" lá que gerasse novas datas.

Então descreva completamente o que você quer fazer: imagino que você queira que, após atualizar mês/ano da planilha "Relação" apague onde antes já havia texto "SÁBADO" ou "DOMINGO" e reescreva para o novo mês? Ou você já faz isso ao fazer a limpeza dos lançamentos de horas?

 

Algumas considerações/sugestões sobre seus formulários de preenchimento (filhos).

1) Percebi que você está replicando a referência ao mês/ano da planilha Relação (D5) para cada planilha individual na célula L9. Entretanto, não entendi o porquê de a do Antônio Joaquim pegar da L9 da do Ivanildo que por sua vez pega da L9 da do Alexandre, que por sua vez, esta sim, pega da planilha principal, Relação. É um erro ou tem algum propósito? Se for erro, sugiro que você atribua à célula D5 de Relação um nome, digamos "MêsAno" e use esse nome (=MêsAno) como fórmula nas planilhas individuais em L9, assim evita erro se caso você elimine alguma planilha no futuro.

 

2) Percebi também que você está tentando usar uma armadilha de eventos em cada planilha filha para capturar mudanças na célula L9 de cada uma delas. Só que infelizmente o evento Change só ocorre se a alteração foi feita inserindo/deletando algo na própria célula e não por alterações que são originadas como resultado de fórmula provenientes de outros locais. Neste caso, melhor seria usar o evento Calculate. Mas, melhor ainda seria capturar a alteração da célula da própria planilha "Relação" e fazer isso se propagar para todas de uma só vez, o que você acha? 

 

Comente para que possamos continuar.

Link para o comentário
Compartilhar em outros sites

Meu caro Edson,

Não sou tão bom como você imagina. Tentei usando o "nome" da celula D5 nas celulas L9 e não deu certo e sobre usar o calculate eu não sei fazer, se você sabe, vamos tentar. Outra coisa, eu percebo que a formula é só pra uma planilha, como é que dá certo pra 71 planilhas (inclusive a linha: "Planilha1.Range("B12:E43").ClearContents" que eu acrescentei na sua formula refere-se a uma planilha, tem como dá certo??

Obs.: Tô mandando de novo a plan em anexo

CONTROLE INDIVIDUAL DE FREQUENCIA - 2017.zip

Link para o comentário
Compartilhar em outros sites

Em 28/03/2017 às 19:35, paulocezarpicos disse:

Mr. Paglia,

Obrigado por responder. Não posso inserir nada na coluna B, pois tenho que inserir os horários. Eu preciso que apareça somente nos sábados e domingos (os outros dias ficar em branco pra inserir os horários) e tem que ser na coluna B, logo depois das datas.

 

Paulo Cezar.

 

Você realmente não pode ter conteúdo algum na célula ou apenas ficar visualmente vazia? Se for isso, bastaria:

 

=SE(DIA.DA.SEMANA($A13)=1;"DOMINGO";SE(DIA.DA.SEMANA($A13)=7;"SÁBADO";""))

 

Feriado é outra história.

Link para o comentário
Compartilhar em outros sites

Edson,

Não queria te perturbar, mas, se o santo é milagroso, não tem sentido mudar a devoção. É o seguinte: Me bati pra criar uma maneira prática de como imprimir as planilhas e não consegui. Fiz um formulário que será chamado pelo ícone que inseri na planilha "Relação" e queria que ao marcar o primeiro checkbox imprimisse todas as planilhas ou marcar o segundo checkbox aparecesse a Label3 e Textbox1 e então o usuário digitasse o nº da planilha, tipo 1,2,3,4,15,44 etc.....

 

Na certeza de sua colaboração,

 

 

Paulo Cezar.

 

Obs.: Estou enviando a planilha em anexo.

CONTROLE INDIVIDUAL DE FREQUENCIA - 2017.zip

Link para o comentário
Compartilhar em outros sites

Edson,

 

Muito agradecido pela sua presteza e atenção. Desse jeito que você fez não dá certo poque são 74 planilhas, não tem espaço no formulário que dê. Mas, não se preocupe, depois de apanhar muito consegui fazer do jeito que queria, isto é, fiz um código que imprime todas as planilhas e outro que imprime a planilha que estiver marcada com um "X" na coluna "F". Mas, o mais importante é que sou muito grato a você pela ajuda a mim dispensada.

 

Que JESUS te abençoe hoje e sempre.

 

Paulo Cezar.

Link para o comentário
Compartilhar em outros sites

33 minutos atrás, paulocezarpicos disse:

...Desse jeito que você fez não dá certo poque são 74 planilhas, não tem espaço no formulário que dê.

 

Bem, só prá informar, fiz teste com 86 planilhas e todas couberam, pois fiz de maneira que o form se expandisse em n colunas de 20 planilhas cada coluna.

 

Mas, como você já resolveu, ok, sem problemas.

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

Edson,

Venho aqui  humildemente admitir que não utilizei sua fórmula (planilha) devido a sua complexidade e assim sendo não pude fazer nenhuma alteração. Mas, se você não ficou chateado comigo e quiser me ajudar , gostaria que visse essa formula e me dissesse onde estou errando e ficaria muitíssimo grato pela sua compreensão e colaboração.

 

Formula abaixo:

 

Private Sub CommandButton1_Click()

 Dim I As Long
  For I = 1 To 2
   If UserForm2.Controls("CheckBox" & I) Then GoTo Mjump
  Next I
MsgBox "VAL, MARQUE UMA OPÇÃO !!!!!!": Unload Me: Exit Sub
Mjump:

If CheckBox1 = True Then (imprime todas as planilhas)
Call ImprimirPlanilhas


If CheckBox2 = True Then    (imprime somente as planilhas marcadas)
        If Sheets("Relação").[F10] <> "" Then
           Sheets("ALEXANDRE").PageSetup.PrintArea = "A1:L48"
           Sheets("ALEXANDRE").PrintOut
       End If
        ElseIf Sheets("Relação").[F11] <> "" Then
           Sheets("ANTONIO").PageSetup.PrintArea = "A1:L48"
           Sheets("ANTONIO").PrintOut
        
        ElseIf Sheets("Relação").[F12] <> "" Then
             Sheets("IVANILDO").PageSetup.PrintArea = "A1:L48"
             Sheets("IVANILDO").PrintOut
       
        
        ElseIf Sheets("Relação").[F13] <> "" Then
             Sheets("ANTONIO JOAQUIM").PageSetup.PrintArea = "A1:L48"
             Sheets("ANTONIO JOAQUIM").PrintOut
        
        ElseIf Sheets("Relação").[F14] <> "" Then
             Sheets("AMENDES").PageSetup.PrintArea = "A1:L48"
             Sheets("AMENDES").PrintOut
        
        ElseIf Sheets("Relação").[F15] <> "" Then
             Sheets("LOMBARDE").PageSetup.PrintArea = "A1:L48"
             Sheets("LOMBARDE").PrintOut
        
        ElseIf Sheets("Relação").[F16] <> "" Then
             Sheets("AURIVAN").PageSetup.PrintArea = "A1:L48"
             Sheets("AURIVAN").PrintOut
        
        ElseIf Sheets("Relação").[F17] <> "" Then
             Sheets("CLEMILTON").PageSetup.PrintArea = "A1:L48"
             Sheets("CLEMILTON").PrintOut
        
        ElseIf Sheets("Relação").[F18] <> "" Then
             Sheets("DANIEL").PageSetup.PrintArea = "A1:L48"
             Sheets("DANIEL").PrintOut
        
        ElseIf Sheets("Relação").[F19] <> "" Then
             Sheets("DANILO").PageSetup.PrintArea = "A1:L48"
             Sheets("DANILO").PrintOut

 

        

Else: MsgBox "VAL, VOCÊ NÃO MARCOU COM X NENHUM FUNCIONÁRIO !!!!!!": Unload Me: Exit Sub
        End If
End If
End If


Call limpar

Unload Me
Application.ScreenUpdating = True

End Sub

 

 

De já, meus agradecimentos.

 

 

Paulo Cezar.

 

Link para o comentário
Compartilhar em outros sites

Paulo você vai imprimir as planilhas?

 

Se sim nao precisa criar 80 guias em separado isso é no mimino despresar os recursos do excel,

 

Da pra resolver isso com 2 planilhas uma com os dados e uma para ser impressa.

 

Um codigo simples de pouco mais de 10 linhas resolve com facilidade.

 

Outra coisa se vai imprimir nao precisa de VBA para identificar os sabados e domingos.

Imaginei que você tivesse criando 80 guias porque cada funcionario iria lançar a informação hora de entrada e saida na planilha.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

CasaDoHardware,

Não é desprezo pelo excel e sim ignorância, me ajude, por favor. Sim vou imprimir as planilhas pra que seja escrito os horários todos os dias, são comprovantes de frequência. Só a título de informação, na planilha "Relação", na coluna "F" vou marcar um "X" no nome e assim imprimirá  a planilha correspondente. Perceba que tem um form com dois checkbox, se tiver uma mensagem quando os dois checkbox's estiverem desmarcados e outra mensagem quando o checkbox2 tiver marcado e não tiver nenhum "X" marcado na coluna "F", eu ficaria muitíssimo grato.

 

Obs1.: Planilha em anexo;

Obs2.: Se você comentar a formula minha gratidão será multiplicada por dez.

 

Ficarei no aguardo,

 

Paulo Cezar.

CONTROLE INDIVIDUAL DE FREQUENCIA - 2017-3.zip

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...