Notifications
Clear all

Função para “redefinir” células com valor padrão

14 Posts
3 Usuários
0 Reactions
1,898 Visualizações
(@wendler)
Posts: 0
New Member
Topic starter
 

Boa tarde pessoal!

To fazendo uma tabela no excel aqui, e preciso criar uma função que não sei se existe ou se é possível.
É uma tabela para controle de gastos.

Vou tentar explicar bem resumidamente.. Tenho a tabela, e em uma célula mesclada tem a seguinte função:

=MAIÚSCULA(“MÊS ATUAL: “)&MAIÚSCULA(TEXTO(HOJE();”mmmm”))

Ele apenas retorna o mês atual nesse célula.

Logo abaixo tem outras células com uma lista suspensa:

– Pago
– Não pago

Eu controlo os gastos com essas opções, por exemplo quando aparece o mês de novembro eu vou marcando como pago os itens.

O que eu preciso fazer é que, quando mudar para o próximo mês (dezembro) ele redefina todos os itens para a opção “Não pago”.

Isso é possível?

 
Postado : 14/11/2015 3:00 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde Wendler

Podemos ajudar, mas para facilitar, anexe uma planilha, demonstrando manualmente o resultado esperado.

[]s

 
Postado : 14/11/2015 3:43 pm
(@wendler)
Posts: 0
New Member
Topic starter
 

Opá, tudo blz?

Sem problemas, anexei uma planilha de exemplo.

Conforme citei, na tabela tem a função "=MAIÚSCULA(TEXTO(HOJE();"mmmm"))" em uma celula onde mostra o mês atual por extenso.

Logo abaixo tem a tabela com os itens, na coluna STATUS, tem uma lista suspensa com as opções "Pago" e "Pendente".

O que eu preciso fazer é que, quando mudar para o próximo mês (dezembro) ele redefina todos os itens para a opção “Pendente” de forma automática.

Sabe algum jeito de fazer isso, ou tem alguma dica melhor?

 
Postado : 15/11/2015 2:57 pm
(@suggos)
Posts: 0
New Member
 

Boa noite. Dá uma olhada no anexo. Ele contém duas macros: uma para que é executada quando se altera alguma célula e outra ao abrir.

 
Postado : 15/11/2015 3:16 pm
(@wendler)
Posts: 0
New Member
Topic starter
 

Obrigado pela resposta meu amigo!

Na verdade nunca trabalhei com macros, então sei como funciona exatamente.

O que exatamente ele faz nessa tabela que você anexou?

 
Postado : 15/11/2015 3:24 pm
(@suggos)
Posts: 0
New Member
 

Há uma macro que é executada sempre que uma célula da aba Plan1 é alterada. Se a célula alterada estiver na coluna C, a macro faz com que o valor de G1 seja o mesmo de B1.
Há uma outra macro que é executada ao abrir o arquivo. Esta macro verifica se G1 é igual a B1. Se não for significa que o mês passou. Neste caso, a macro retorna os valores da coluna C para pendente.

 
Postado : 15/11/2015 6:29 pm
(@wendler)
Posts: 0
New Member
Topic starter
 

Há uma macro que é executada sempre que uma célula da aba Plan1 é alterada. Se a célula alterada estiver na coluna C, a macro faz com que o valor de G1 seja o mesmo de B1.
Há uma outra macro que é executada ao abrir o arquivo. Esta macro verifica se G1 é igual a B1. Se não for significa que o mês passou. Neste caso, a macro retorna os valores da coluna C para pendente.

Pow perfeito cara, funcionou mesmo.. Agora você pode me dar um pequeno passo a passo de como você criou essas macros para eu implementar em outra tabela?

Como disse anteriormente, nunca mexi com macros agradeço pela paciência rsrs..

 
Postado : 16/11/2015 7:43 am
(@suggos)
Posts: 0
New Member
 

Primeiro, habilite a Guia Desenvolvedor. Veja o passo a passo do usuário rilust:
Va em ARQUIVO /OPÇÕES
Na tela clique em PERSONALIZAR FAIXA DE OPÇÕES
Na caixa GUIAS PRINCIPAIS selecione o item DESENVOLVEDOR
CLIQUE no botão OK

Clique em Visual Basic ou tecle Alt+F11
Você verá duas macros: uma em Plan1 e outra em EstaPasta_de_trabalho.

Em Plan1 a macro que é executada sempre que se altera uma célula nesta aba é a seguinte:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 3 Then
    [G1] = [B1]
End If
End Sub

Em EstaPasta_de_trabalho há uma outra macro que é executada sempre que se abre o arquivo:

Private Sub Workbook_Open()
If [G1] <> [B1] Then Range("C6", Range("C1048576").End(xlUp)).Value = "Pendente"
End Sub

Se você quer aprender VBA, comece pelos comandos Range, Cells, End e Offset, nesta ordem.

Abraços.

 
Postado : 16/11/2015 4:37 pm
(@wendler)
Posts: 0
New Member
Topic starter
 

Perfeito, consegui fazer! Só me tira mais uma última dúvida com relação ao range, mais especificadamente essa parte:

If [G1] <> [B1] Then Range("C6", Range("C1048576").End(xlUp)).Value = "Pendente"

Ali ele vai pegar todas as celulas da coluna C6, por que que tem isso "C1048576" ao lado?

E como ficaria se eu fosse fazer para ele mudar apenas em algumas celulas, por exemplo: C6:C9

 
Postado : 16/11/2015 5:02 pm
(@suggos)
Posts: 0
New Member
 

Esse trecho faz o seguinte: altera para Pendente o trecho que se inicia em C6 e termina na primeira célula preenchida acima de C1048576. Se não houvesse o End(xlUp), a macro alteraria até a C1048576 para o valor Pendente.

Se você usar o código abaixo alterará apenas o intervalo de C6 a C9, mas só use essa opção se tiver certeza de que nunca será usado de C10 em diante com a mesma finalidade que de C6 a C10 (Pago/Pendente).

Private Sub Workbook_Open()
If [G1] <> [B1] Then Range("C6:C9").Value = "Pendente"
End Sub

 
Postado : 16/11/2015 5:29 pm
(@wendler)
Posts: 0
New Member
Topic starter
 

Perfeito, só tive um probleminha aqui.

A tabela tem duas abas (Plan1 e Plan2), em Plan1 ele deve alterar todas as células da coluna para Pendente, mas em Plan2 preciso que ele altere apenas algumas células. Isso é possível?

E eu vi que esse código é colocado na pasta de trabalho, então ele afeta todas as abas estou certo? Como faço para ele funcionar somente nas abas que quero?

 
Postado : 16/11/2015 5:35 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Wendler

Favor não usar o botão Citar desnecessariamente, principalmente quando as respostas forem em sequência.

Só polui o fórum e não traz nenhum beneficio.

Patropi - Moderador

 
Postado : 16/11/2015 6:39 pm
(@wendler)
Posts: 0
New Member
Topic starter
 

Ah ok, sem problemas Patropi, agradeço pelo aviso! ;)

 
Postado : 16/11/2015 6:42 pm
(@wendler)
Posts: 0
New Member
Topic starter
 

Encontrei a solução: http://ccm.net/faq/5675-excel-run-a-mac ... ng-a-sheet

Fiz dessa forma:

Private Sub Worksheet_Activate()
If [E2] <> [G1] Then Range("H9:H12,H18").Value = "Pendente"
End Sub

Com esse código ele vai executar somente quando abre aquela planilha, para outras não interfere.

Ta tudo funcionando, muito obrigado pela ajuda suggos, grande abraço! :)

 
Postado : 17/11/2015 7:57 am