Página 1 de 1

Fixar data

Enviado: 29 Mai 2018 às 12:03
por afelizardo
Boa tarde,

Preciso da vossa ajuda. Tenho uma excel em que tem uma formula simples, SE(PROCV($A2;Folha2!$A:$C;3;0)=B$1;HOJE();"").
Quando a formula sair para Verdadeiro, eu gostaria que ele me fixa-se a data, na medida que a Sheet BaseDados irá ser substituída. O Objectivo é registar a data de alteração de Status.

Penso que a melhor forma era passar a formula para valores. Se fizer um Filtro para tudo o que seja diferente de zero copiar e colar para valores o excel dá erro.

Encontrei uma macro no Forúm mas está me a dar erro. Podem me ajudar?

Em anexo coloco o excel.

Fixar data

Enviado: 29 Mai 2018 às 13:21
por mprudencio
Cole este codigo na planilha

A macro coloca a data na coluna A sempre que alterar a coluna B

Faça as devidas alterações.

2 é o numero da coluna que vai acionar a macro no caso B

A 1, B 2, C 3 e por ai vai.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 2 Then Exit Sub

If Range("B" & Target.Row).Value <> "" Then
Range("A" & Target.Row).Value = Date ' troque A pela letra da coluna que vai receber a data.

End If

End Sub

Re: Fixar data

Enviado: 29 Mai 2018 às 14:01
por afelizardo
Está a dar erro a macro, pode por favor consultar o ficheiro.

eu vou todos os dias vou substituir a Basedados e os Status de Cada PA poderá alterar, sempre que alterar eu quero que registe a data.

Re: Fixar data

Enviado: 29 Mai 2018 às 14:04
por osvaldomp
Experimente:
Instale o código abaixo no módulo da planilha BaseDados, assim:
1. copie o código daqui
2. clique com o direito na guia daquela planilha e escolha 'Exibir código'
3. cole o código na janela em branco que vai se abrir
4. feito! 'Alt+Q' para retornar para a planilha e testar
Código: Selecionar todos
Private Sub Worksheet_Change(ByVal Target As Range)
 Dim n As Long
 If Target.Count > 1 Then Exit Sub
 If Target.Column <> 3 Or Target.Value <> "Entrada" Then Exit Sub
 n = Sheets("Controlo de Status").[A:A].Find(Target.Offset(, -2).Value).Row
 Sheets("Controlo de Status").Cells(n, 2) = Date
End Sub
funcionamento - ao inserir o termo Entrada na coluna C da planilha BaseDados o código irá colocar a data do dia na coluna B da planilha Controlo de Status na linha correspondente ao PA que teve seu estatus alterado.

Fixar data

Enviado: 30 Mai 2018 às 06:30
por afelizardo
Muito Obrigada. :D Para fazer para os outros Status como faço? tentei colocar igual, alterando o nome do Status e a coluna, mas está me a dar erro. Como devo fazer?

Fixar data

Enviado: 30 Mai 2018 às 06:48
por afelizardo
E é possível, se o Status se manter ele não alterar a data?

Re: Fixar data

Enviado: 30 Mai 2018 às 08:48
por osvaldomp
afelizardo escreveu:Muito Obrigada. :D
Você recebeu duas sugestões. A qual delas você se refere ?

Para fazer para os outros Status como faço?
Quais outros estatus ?

tentei colocar igual, alterando o nome do Status e a coluna, mas está me a dar erro. Como devo fazer?
Tentou colocar igual onde ? Alterou o estatus de qual nome para qual nome ? Em qual coluna ?
Disponibilize nova amostra do seu arquivo com as necessárias explicações para essas novas demandas.

Fixar data

Enviado: 30 Mai 2018 às 10:13
por afelizardo
Optei pela última opção. Na coluna C na Sheet "BaseDados", Tenho diversos Estados/Status (Entrada, Em Diagnóstico,...). Na Sheet "Controlo de Status", Coloquei em coluna os diferentes Estados que cada PA pode ter.
De acordo com a Código que me disponibilizou, ele quando encontra Entrada, ele coloca a data. Eu gostaria que fizesse o mesmo para os outros Estados "Com Orçamento", "Em Diagnóstico" (..).

Tentei repetir, mas dá me erro:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim n As Long
If Target.Count > 1 Then Exit Sub
If Target.Column <> 3 Or Target.Value <> "Entrada" Then Exit Sub
n = Sheets("Controlo de Status").[A:A].Find(Target.Offset(, -2).Value).Row
Sheets("Controlo de Status").Cells(n, 2) = Date
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
Dim n As Long
If Target.Count > 1 Then Exit Sub
If Target.Column <> 3 Or Target.Value <> "Com Orçamento" Then Exit Sub
n = Sheets("Controlo de Status").[A:A].Find(Target.Offset(, -2).Value).Row
Sheets("Controlo de Status").Cells(n, 3) = Date
End Sub

(...)

Entretanto, se o Estado mantiver, eu não queria que ele alterasse a data. Acontece que eu todos os dias eu vou substituir a BaseDados, exemplo: Hoje o PA 10438 tem estado Entregue, amanhã quando actualizar a BaseDados, pode-se manter Entregue, no entanto, como actualizei, ele altera a data. O que eu pretendia era que se não existe alteração do Estado, então mantém a data anterior.

Pode ajudar?

Re: Fixar data

Enviado: 30 Mai 2018 às 12:38
por osvaldomp
afelizardo escreveu:Acontece que eu todos os dias eu vou substituir a BaseDados, exemplo: Hoje o PA 10438 tem estado Entregue, amanhã quando actualizar a BaseDados, pode-se manter Entregue, ... O que eu pretendia era que se não existe alteração do Estado, então mantém a data anterior.
Entendi. Então o código que passei não serve, precisamos de outro caminho.

Dúvidas:
1. no seu exemplo, na coluna A da planilha Controlo de Status há 22 números de PAs, que são iguais aos primeiros 22 números da coluna A da planilha BaseDados. Essa igualdade sempre irá ocorrer ao substituir diariamente a planilha BaseDados ?
2. considerando que ao substituir a planilha Basedados pela primeira vez não haverá datas na planilha Controlo de Status, qual data você quer lançar nessa planilha, a data do dia ou a data que está na coluna B da Basedados ?
3. para não ocorrer a situação que comentei no item 2 (planilha BaseDados vazia) então você deverá preencher totalmente aquela planilha e disponibilizar aqui no fórum.
4. a cada substituição da planilha BaseDados se o estatus de algum PA mudou em relação ao estatus que consta na planilha Controlo de Status o que você quer fazer ?
primeiro exemplo ~~~> PA 108453 em 29-05-2018 era Entrada e passou em 30-05-2018 para Com Orçamento, neste caso lançamos a data 30-05-2018 na coluna Com Orçamento e limpamos a data 29-05-2018 na coluna Entrada ?
segundo exemplo ~~~> PA 108453 em 29-05-2018 era Entrada e permaneceu em 30-05-2018 como Entrada , neste caso lançamos a data 30-05-2018 na coluna Entrada ou mantemos a data 29-05-2018 na coluna Entrada ?

Re: Fixar data

Enviado: 30 Mai 2018 às 14:09
por afelizardo
1. no seu exemplo, na coluna A da planilha Controlo de Status há 22 números de PAs, que são iguais aos primeiros 22 números da coluna A da planilha BaseDados. Essa igualdade sempre irá ocorrer ao substituir diariamente a planilha BaseDados ?

Não Irá acontecer. A minha ideia é colocar na Coluna A Nr sequencial crescente na Sheet "Controlo Status", na medida que todos os dias vão surgindo novos PA's na "BaseDados", e tem que existir correspondência no "Controlo Status", de forma a registar a data do Estado

2. considerando que ao substituir a planilha Basedados pela primeira vez não haverá datas na planilha Controlo de Status, qual data você quer lançar nessa planilha, a data do dia ou a data que está na coluna B da Basedados ?

A Data do Dia. O objectivo é conseguir ter a data de mudança de estado em cada coluna correspondete (controlo de Status), na medida que vou carregar todos os dias consigo obter a mudança

3. para não ocorrer a situação que comentei no item 2 (planilha BaseDados vazia) então você deverá preencher totalmente aquela planilha e disponibilizar aqui no fórum.

a BaseDados nunca irá ficar vazia, vai ser sempre subsituida pelo mesmos PA's e novos, com númeração crescente, conforme Excel que partilhei

4. a cada substituição da planilha BaseDados se o estatus de algum PA mudou em relação ao estatus que consta na planilha Controlo de Status o que você quer fazer ?
primeiro exemplo ~~~> PA 108453 em 29-05-2018 era Entrada e passou em 30-05-2018 para Com Orçamento, neste caso lançamos a data 30-05-2018 na coluna Com Orçamento e limpamos a data 29-05-2018 na coluna Entrada

Mantem 29-05-2018 na Coluna Entrada e acrescenta 30-05-2018 na coluna Com Orçamento

segundo exemplo ~~~> PA 108453 em 29-05-2018 era Entrada e permaneceu em 30-05-2018 como Entrada , neste caso lançamos a data 30-05-2018 na coluna Entrada ou mantemos a data 29-05-2018 na coluna Entrada ?

Mantemos a data 29-05-2018

Fixar data

Enviado: 01 Jun 2018 às 05:52
por afelizardo
Osvaldo, Consegui esclarecer tudo? acha que é possível?

Re: Fixar data

Enviado: 02 Jun 2018 às 08:44
por osvaldomp
Instale o código abaixo em um módulo comum, assim:
1. copie o código daqui
2. a partir da planilha Controlo de Status tecle 'Alt+F11' para acessar o editor de VBA
3. no menu do editor >> Inserir >> Módulo
4. cole o código na janela em branco que vai se abrir
5. feito! 'Alt+Q' para retornar para a planilha e testar

para rodar o código:
6. tecle 'Alt+F8' >> selecione a macro correspondente >> Executar, ou insira um botão na planilha e vincule-o à macro ou vincule-a a um atalho de teclado (Alt+F8 > Opções).

Código: Selecionar todos
Sub AtualizaDataEstatus()
 Dim PA As Range, d As Range, s As String, c As Long
  For Each PA In Range("A2:A" & Cells(Rows.Count, 1).End(3).Row)
   Set d = Sheets("BaseDados").Range("A1:A" & Sheets("BaseDados").Cells(Rows.Count, 1).Row).Find(PA.Value)
   If Not d Is Nothing Then
    s = d.Offset(, 2).Value: c = Range("A1:O1").Find(s).Column
    If Cells(PA.Row, c) = "" Then Cells(PA.Row, c) = d.Offset(, 1).Value
   End If
  Next PA
End Sub

obs.
1. ao rodar o código a planilha Controlo de Status deverá ser a planilha ativa
2. para testar limpe as células C18 e D22 da planilha Controlo de Status e rode o código
3. todas as fórmulas da planilha Controlo de Status podem ser removidas

Re: Fixar data

Enviado: 04 Jun 2018 às 10:09
por afelizardo
MUITO OBRIGADA! Funcionou lindamente e vai dar uma grande ajuda no trabalho!