Ir ao conteúdo
  • Cadastre-se

Excel Relatório por ordem crescente na data, Excel 2003 e 2007


Ir à solução Resolvido por Visitante,

Posts recomendados

Boa noite

 

Venho solicitar uma pequena ajuda.

 

Tenho uma planilha na qual se regista os dias de determinado mês que o funcionário pretende gozar de folga ( Compensação ), que se encontram na Aba Ano2018 e Aba Ano2019.

 

Depois, escolhe-se o mês que se pretende ver os dias desse mesmo mês, na Aba Compensações2018 e Aba Compensações2019.

 

O que é que eu pretendo??

 

Que nas Abas Compensações2018 de J4 a J47 e Compensações2019 de J4 a J47, fiquem por ordem crescente de Data.

 

Dados esses que veem das Abas Ano2018 e Ano2019 respectivamente.

 

Assim, sempre que se faça um registo, o mesmo seja actualizado automaticamente nas Abas que referi em cima.

 

De referir que, nas Abas Ano2018 e Ano2019, os dados estão ordenados por Ordem de Nome, e pretendo que se mantenham assim, por causa da organização pessoal e funcional.

 

Obrigado desde já.

 

Cumprimentos

Compensações_2019_V5.xls

Link para o comentário
Compartilhar em outros sites

Olá, Bikke.

Veja se atende.

Instale uma cópia do código abaixo no módulo de EstaPasta.

Nas planilhas CompensaçõesXXX altere a sequência dos títulos das colunas H:J e deixe igual às planilhas AnoXXX (respectivamente: Data a gozar, Período a gozar e Posição ... bem sugestivos  :tw_tounge_wink:)

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
 Dim shn As String
 If Target.Count > 1 Then Exit Sub
 If Left(Sh.Name, 4) <> "Comp" Or Target.Address <> "$L$4" Or Target.Value = "" Then Exit Sub
 [B4:J47] = "": shn = "Ano" & Year([L4])
 Sheets(shn).Range("B4:J" & Sheets(shn).Cells(Rows.Count, 2).End(3).Row).Copy [B4]
 Range("B4:J47").Sort Key1:=[H3], Order1:=xlAscending
End Sub

 

Link para o comentário
Compartilhar em outros sites

Boa noite osvaldo

 

Provavelmente não percebi o que querias dizer, e sendo assim, alterei a ordem dos nomes para ficar tudo igual, porque interessa-me que a data fique no fim da ordem.

 

Não sei se, com isso, mexeu com o código VBA que deste, se aconteceu isso, peço desde já as minhas desculpas, pois não sabia.

 

Coloquei o teu código VBA, mas as Datas não ficaram por ordem crescente.

 

Peço que dês uma vista de olhos, sff.

 

Segue a planilha anexada, para melhor se entender.

 

Obrigado desde já pela tua disponibilidade.

 

Bom domingo

 

Cumprimentos

Compensações_2019_V5.xls

Link para o comentário
Compartilhar em outros sites

Osvaldo

 

Obrigado, assim já funciona direitinho.

 

Mas, tem uma coisa que verifiquei agora.

 

Se eu, na Aba Compensações2018 ou Compensações2019, alterar em L4 o mês que pretendo ver, aparece-me esse mês e todos os outros meses que lá estiverem, e não é isso que eu pretendo, mas sim só o Mês que estiver em L4.

 

Vê-me isso, sff.

 

Obrigado desde já pela ajuda

 

Cumprimentos

Link para o comentário
Compartilhar em outros sites

33 minutos atrás, Bikke disse:

Se eu, na Aba Compensações2018 ou Compensações2019, alterar em L4 o mês que pretendo ver, aparece-me esse mês e todos os outros meses que lá estiverem, e não é isso que eu pretendo, mas sim só o Mês que estiver em L4.

 

Nas suas planilhas não há "outros meses", pois tanto na planilha 2018 como na 2019 só há datas referentes a agosto, então como vamos selecionar outros meses se não existem ? :confused:

 

Disponibilize outro arquivo e coloque nas planilhas mais registros que representem TODAS AS VARIAÇÕES POSSÍVEIS de ocorrerem.

 

Link para o comentário
Compartilhar em outros sites

Osvaldo

 

Eu pensei que esse código VBA retornasse o mês pretendido e que não seria necessário eu dizer que era só o mês que se encontra em L4, porque é o óbvio.

 

Pensei também, que tu mesmo pensasses nessas possibilidades, mas, as  minhas desculpas pela falta das palavras nesse sentido.

 

Sendo assim, coloquei registos referentes ao mês de Maio ( 05 ) até ao mês de Setembro ( 09 ) de 2019, para teres uma ideia.

 

O código VBA, deverá ter opções para os meses de Janeiro até Dezembro, conforme estiver na célula L4 na Aba Compensações2018 e em L4 da Aba Compensações2019

 

Obrigado

 

Cumprimentos

Compensações_2019_V5.xls

Link para o comentário
Compartilhar em outros sites

  • Solução
11 horas atrás, Bikke disse:

Eu pensei que esse código VBA retornasse o mês pretendido e que não seria necessário eu dizer que era só o mês que se encontra em L4, porque é o óbvio.

A eficácia da resposta depende diretamente da qualidade da formulação da questão. Formulação imprecisa resulta em resposta que não atende.

Ainda, algo na sua planilha pode ser óbvio para você, que elaborou a planilha, porém, poderá não ser óbvio para outros que não conhecem os seus objetivos.

 

Pensei também, que tu mesmo pensasses nessas possibilidades, ...

As possibilidades devem ser pensadas e informadas por você e não por quem tenta lhe ajudar.

 

Experimente o código abaixo no lugar do anterior.

Precisei desativar os códigos Worksheet_SelectionChange das planilhas AnoXXXX pois eles provocavam erro.


 

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
 Dim shn As String
 If Target.Count > 1 Then Exit Sub
 If Left(Sh.Name, 4) <> "Comp" Or Target.Address <> "$L$4" Or Target.Value = "" Then Exit Sub
 [B4:J47] = "": shn = "Ano" & Year([L4])
 With Sheets(shn)
  .AutoFilterMode = False
  .[B3:J3].AutoFilter 9, ">=" & CLng([L4]), xlAnd, "<=" & CLng(DateSerial(Year([L4]), Month([L4]) + 1, 0))
  If .AutoFilter.Range.Columns(2).SpecialCells(xlCellTypeVisible).Count > 1 Then
  .Range("B4:J" & Sheets(shn).Cells(Rows.Count, 2).End(3).Row).Copy [B4]
  End If
  .AutoFilterMode = False
 End With
 Range("B4:J47").Sort Key1:=[J3], Order1:=xlAscending
End Sub

dicas:

1. formate o intervalo Anos e a célula L4 como mmmm/aaaa

2. as suas duas planilhas CompensaçõesXXXX executam função duplicada, uma delas pode ser excluída

3. me parece que a sua ideia é utilizar a planilha Compensações para exibir registros filtrados das planilhas AnoXXXX, conforme o mês selecionado em L4, então somente uma planilha Ano como Banco de Dados é suficiente, e não uma para cada ano; as dicas 2 e 3 acima reduzem o seu arquivo das cinco planilhas atuais para apenas duas

4. ainda, é possível reduzir o seu arquivo para apenas uma planilha Banco de Dados e aplicar os filtros diretamente nela; nesse caso, para facilitar a inserção de registros utilize o recurso Formulário

Link para o comentário
Compartilhar em outros sites

Boa tarde osvaldo

 

Obrigado desde já pelas dicas.

 

Formatei em L4 para mmmm-aaaa

 

Coloquei o teu código VBA e fui em L4 escolher o mês, ficou igual ao que estava, isto é, mostra-me na mesma os meses de Maio, Junho, Julho e Agosto, e não é isto que pretendo.

 

Pretendo que eu ao clicar em L4 ( que é uma caixa de Listagem que tem datas desde 01 de Janeiro de 2018 a 31 de Dezembro de 2020 ) possa escolher o mês e é só esse mês que quero ver em Compensações2019.

 

Com esse teu código VBA, perdi o que quero manter, isto é, sempre que eu fizer algum registo em Ano2019, os mesmos não ficam por ordem de nome, e quero manter isso assim, pois é necessário para melhor organização ( saber quantas folgas tem esse mesmo funcionário ), se os registos ficarem soltos, fica confuso, e tenho que andar para baixo e para cima à procura.

 

Com o formato data em mmmm-aaaa, não se sabe a que dia se refere esse registo, pois só aparece o mês e o ano, coisa que não quero, quero que apareça sempre o dia, mês e o ano.

 

Qual o objectivo??  Pretendo saber quando vou a Compensações2019, saber quantos funcionários estão de folga no mesmo dia, isto se houver mais que uma pessoa a pedir esse mesmo dia.

 

Peço desculpa por te estar a dar esta maçada, mas com este código VBA não dá para o que pretendo.

 

Os meus agradecimentos na mesma pelo teu trabalho.

 

Cumprimentos

Link para o comentário
Compartilhar em outros sites

44 minutos atrás, Bikke disse:

Pretendo que eu ao clicar em L4 ... possa escolher o mês e é só esse mês que quero ver em Compensações2019.

O código funciona exatamente como você descreveu acima.

 

Com esse teu código VBA, perdi o que quero manter, isto é, sempre que eu fizer algum registo em Ano2019, os mesmos não ficam por ordem de nome ...

Além da incompatibilidade o seu código é inadequado pois ele é disparado pelo evento Worksheet_SelectionChange. Por exemplo, ao inserir  o nome Antonio em B20 e selecionar C20 para continuar o preenchimento aí o seu código faz a ordenação da tabela e então o Antonio sai de B20 e vai para B2, e ainda faltam 8 colunas do registro Antonio para serem preenchidas. Não faz o menor sentido ordenar a tabela ao mudar a célula selecionada. Dispare a ordenação por outro meio.

 

Com o formato data em mmmm-aaaa, não se sabe a que dia se refere esse registo, pois só aparece o mês e o ano, coisa que não quero, quero que apareça sempre o dia, mês e o ano.

O formato que eu sugeri para o intervalo Anos e para L4 não interfere com o formato da coluna J, se foi isso que você imaginou.

 

Link para o comentário
Compartilhar em outros sites

Osvaldo

 

Aqui fica o printscreen para veres que eu ao selecionar o mês de Agosto, devia me mostrar só o mês de Agosto e não, mostra tudo o que lá estiver registado em Ano2019, e não é o que pretendo.

 

Quanto ao à ordenação por nome, quero manter assim mesmo.

Quando estou a fazer o registo, coloco o nome por último, após preencher todos os outros campos, aí coloco o nome para que os registos fiquem por ordem Alfabética.

 

 

Image1.png

Link para o comentário
Compartilhar em outros sites

osvaldo

 

Há qualquer coisa de estranho mesmo, pois eu fui ao teu arquivo e escolhi o Agosto, e devolveu-me todos os registos que estão no Ano2019, ( desde o 10-05-2019 a 18-08-2019 )

 

Não sei o que será que está a causar isto, pois nunca me aconteceu.

 

E como estou a ver que não está a ver solução para o que pretendo, peço que este tópico seja dado como encerrado.

 

Quero agradecer-te por tudo o que fizeste para me ajudar.

 

Os meus mais sentidos agradecimentos.

 

Continuação de um bom Domingo

 

Cumprimentos

Link para o comentário
Compartilhar em outros sites

O meu problema já foi resolvido.

 

Quero aqui agradecer a todos os que, de certa forma me tentaram ajudar.

 

Quero pedir desculpa pela maçada que dei, e pelo tempo gasto em me tentar me ajudar.

 

Não esqueço isso, fico eternamente agradecido.

 

Os meus agradecimentos do fundo do coração ao osvaldomp e ao Patropi

 

E como não quero só a solução para mim, aqui fica a planilha com as fórmulas colocadas para quem precisar.

 

Bom fim de semana

 

Cumprimentos

Compensações_2019_V11.xls

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

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...