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

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