Notifications
Clear all

formar histórico de alteração de uma linha

11 Posts
3 Usuários
0 Reactions
2,041 Visualizações
(@cisneiro)
Posts: 0
New Member
Topic starter
 

Boa noite. pessoal gostaria de saber se tem como copiar parte de uma linha em outra planilha, quando o valor de uma célula dessa linha for alterado.
Na planilha em anexo por exemplo, na planilha "banco de dados" se eu alterar o portador atual em "D4", gostaria que fosse copiado para a planilha "histórico", o valor das celulas "D4" antes de ser alterado(ana patricia), "D4" novo valor(allan da costa), "B4" (nº do processo) e "E4" (data da tramitação).

com isto eu teria um histórico de tramitações daquele processo. ou seja, toda vez que eu alterar o portador atual de um processo na planilha Banco de dados", essas quatro informações seriam copiadas para a planilha "histórico". com isto eu teria um histórico de tramitações daquele processo.

neste exemplo, na planilha "banco de dados" o processo estava com "ana patricia" e seria passado para (Allan da costa). (alterar portador atual)
com isto, apareceu na planilha histórico, remetente = ana patricia, destinatario = allan, processo e data.

sendo que são varios processos, então na planilha histórico esse processo deveria ocorrer criando linhas toda vez que for alterado o portador atual em "banco de dados"

segue planilha em anexo,

certo da atenção dos senhores , antecipo meu agradecimento.

 
Postado : 09/01/2018 10:22 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Fiz uns ajustes em um modelo antigo que correu aqui no forum, veja se é isto, na rotina que grava o log deixei algumas linhas desabilitadas só para entender, depois pode apaga-las.
Não cheguei a fazer varios testes, então teste e qq duvida retorne.

Log Alteração na ABA

 
Postado : 10/01/2018 7:07 am
(@cisneiro)
Posts: 0
New Member
Topic starter
 

Caramba mauro obrigado, é isso mesmo que eu quero. Porém só funciona na primeira tramitação do processo, quando altero o mesmo processo pela segunda vez, o remetente em "histórico" fica escrito VAZIO.

Tentei consertar aqui , mas não consegui.

 
Postado : 10/01/2018 9:22 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Cisneiro, em um teste rápido, se a alteração se der na coluna "D - Portador atual" as informações são gravadas corretamente, mesmo que se retorne a celula e altere novamente, lembrando, que ao efetuar a alteração é necessário selecionar a celula novamente, se alterar sem sair da celula ou seja sem precionar Enter, TAB ou qq das setas, o Evento "SheetSelectionChange" se perderá.
Mas pelo que entendi acredito que não é isto, nas instruções para gravar as alterações não estamos limitando somente a coluna D, ou seja se alterar ou lançar na coluna B - Processo será gravado tambem e algumas colunas estarão como VAZIO, se for isto podemos limitar a execução das rotinas somente se houver alteração na coluna "D".
Troque a rotina anterior pela a abaixo e veja se é isto, senão forneça um pouco mais de detalhe de como opera as informações na planilha, quanto mais detalhe melhor, assim não ficamos em suposições.

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Dim I As Integer
    Dim wsLog As Worksheet
    
    'Verifica se alteração não for na coluna D (4) sai da rotina
    'sem gravar o log
    If Target.Column <> 4 Then
        Exit Sub
    Else
    
        Set wsLog = Sheets("histórico.") 'pasta onde sera gravado o log de alteracoes
        'Se a alteração for feita na Aba histórico, sai da rotina
        If Sh Is wsLog Then Exit Sub
        
            For I = 1 To Target.Count
                Log I, Target(I).Value, Target(I).Address(False, False), ActiveSheet.Name
            Next I
    
    End If
    
End Sub

[]s

 
Postado : 10/01/2018 12:22 pm
(@cisneiro)
Posts: 0
New Member
Topic starter
 

obrigado Mauro, mas me desculpe por ser tão leigo no assunto, não entendi muito bem, pois você falou de forma muito técnica. onde eu colo este código? na aba histórico ou na aba banco de dados. tipo assim , botão direito - exibir código e colar este código?

 
Postado : 11/01/2018 6:43 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Em qualquer aba clique com o botão direito e selecione "Exibir Código" ou use o conjunto de Teclas "ALT + F11", irá abrir a janela do VBE, na mesma, do lado esquerdo de 02 cliques em "EstaPasta_de_trabalho", neste modulo de pasta você encontrará a rotina, então substitua por esta que enviei.

[]s

 
Postado : 11/01/2018 6:56 am
(@cisneiro)
Posts: 0
New Member
Topic starter
 

Mauro boa tarde , fiz exatamente como você descreveu, porém apareceu a seguinte mensagem: Número de argumentos incorreto ou atribuição de propriedade inválida.
Sabe como resolver?

 
Postado : 11/01/2018 11:53 am
(@klarc28)
Posts: 0
New Member
 
Log I, Target(I).Value, Target(I).Address,False, False, ActiveSheet.Name
 
Postado : 11/01/2018 12:01 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Cisneiro, chegou a deletar a rotina anterior no modulo que indiquei ?
A não ser que você tenha feito alguma alteração no layout ou modificado alguma variável ou nome da aba, não é para termos este erro, eu ainda utilizo a versão 2007, não sei se nas versões superiores teve alguma alteração em relação da linha citada, mas se utilizar conforme o colega klarc28 indicou, ai sim termos este erro.
De qualquer forma segue novamente o exemplo, deixei as rotinas mais limpas e fiz um ajuste, onde quando se tratar de um novo lançamento, em vez de indicar "VAZIO" irá indicar "1º lançamento" e se alterar um nome e deixa-lo em branco irá indicar "Deletou nome Existente.
Da mesma forma que você não tenha intimidade com o VBA, eu sou mais leigo ainda em relação ao seu programinha, uma vez que desconheço os passos de como o utiliza, por isso muitas das vezes vamos por suposições pela forma que entendemos, então se não for isso ou tiver algum outro problema, descreva detalhadamente como a utiliza, um passo a passo de como são lançados (qual o primeiro e último)

[]s

 
Postado : 11/01/2018 1:28 pm
(@cisneiro)
Posts: 0
New Member
Topic starter
 

passo a passo de como será utilizado o sistema de controle

1 - este sistema ficara no setor de protocolo e será controlado por uma única pessoa
2 - primeiramente cadastramos todos os processos na aba "banco de dados", com as suas respectivas informações como: numero - assunto - portador atual(com qual funcionario ele está) - data da ultima mudança de portador atual

3- quando um funcionário A terminar de usar um determinado processo e desejar passar para outro funcionário B, ele deverá passar primeiro pela pessoa que controla o sistema, pois esta mudará o portador atual daquele processo de "funcionário A" para "Funcionário B". quando o funcionário B quiser passar o processo para um funcionário C, este tambem terá que fazer o mesmo procedimento.

a ideia é manter o histórico dessas alterações de portadores de um mesmo processo. ou seja, na aba "histórico"

Assim quando necessario, poderei saber todo o caminho que esse processo fez, ou seja, pela mão de quem ele passou e em que data foi transferido de pessoa para outra.

4 - as informações que preciso na historico são: numero do processo - remetente(que seria o funcionário A, que por sua vez é o portador atual , antes de mudar para funcionário B - Destino(que seria o funcionário B, que por sua vez passará a ser o portador atual na aba "danco de dados". - Data ( ou seja, a data que ocorreu a alteração em portador atual, de func. A para Func. B)

obs: o código para fixar a data de alteração de portador atual, "ja esta ativo na aba Banco de dados". só é preciso que essa informação vá para o histórico.

espero que eu tenha conseguido explicar de uma forma melhor. caso consiga ajudar ficarei muito grato. só falta o histórico funcionar para o sistema entrar em vigor.

obrigado

 
Postado : 12/01/2018 7:59 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Cisneiro, chegou a ver o último exemplo que anexei ?
Se ele está próximo ao que pretende, indique que alterações gostaria baseado neste modelo.

[]s

 
Postado : 12/01/2018 8:49 am