Vídeo recomendado
https://youtu.be/diWPPPhW-9E

Dúvida Excel - Planilha Controle de Combustível e Kilometragem

Discussões sobre a integração do Excel com o Banco de Dados Access

Moderador: joseA

cemilani_spo
Acabou de chegar
Acabou de chegar
Mensagens: 1
Registrado em: Qua Mai 27, 2020 2:45 pm

Dúvida Excel - Planilha Controle de Combustível e Kilometragem

Mensagem por cemilani_spo »

Pessoal,

Estou bolando uma planilha de controle de combustível / Km rodados… Quando um motorista abastece o veículo dentro da empresa (há uma bomba própria), ele informa o KM (atual), do veículo.
Dentro da planilha esse é o dado que será inserido e preciso calcular o hodômetro a partir daí…
Na planilha tenho vários dados mas o que importa são:
Coluna A: Data
Coluna B: Placa
Coluna C: KM Atual
Coluna D: KM Antigo
Coluna E: Hodômetro

Gostaria que o usuário, ao inserir uma placa já informada em data diferente, obtivesse a informação do último registro daquela placa referente ao KM atual, na linha que ele estiver preenchendo, mas na coluna KM antigo…
Se ele já tem um dado na linha 02, por exemplo 01/06/2020 - ABC123 - 120.200
Na linha 20 ao inserir a informação: 03/06/2020 - ABC123 - 120.300 (na célula D20, aparecer a informação do que está em C2: 120.200).

Anexo encontra-se planilha com os campos informados.

Alguém consegue me auxiliar?
Anexos
PLANILHA - FORUM TOMAS VASQUES.zip
(11.23 KiB) Baixado 292 vezes


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Avatar do usuário
Jahezer
Acabou de chegar
Acabou de chegar
Mensagens: 8
Registrado em: Ter Jun 02, 2020 4:15 pm

Re: Dúvida Excel - Planilha Controle de Combustível e Kilometragem

Mensagem por Jahezer »

cemilani_spo escreveu: Qua Mai 27, 2020 4:51 pm Pessoal,

Estou bolando uma planilha de controle de combustível / Km rodados… Quando um motorista abastece o veículo dentro da empresa (há uma bomba própria), ele informa o KM (atual), do veículo.
Dentro da planilha esse é o dado que será inserido e preciso calcular o hodômetro a partir daí…
Na planilha tenho vários dados mas o que importa são:
Coluna A: Data
Coluna B: Placa
Coluna C: KM Atual
Coluna D: KM Antigo
Coluna E: Hodômetro

Gostaria que o usuário, ao inserir uma placa já informada em data diferente, obtivesse a informação do último registro daquela placa referente ao KM atual, na linha que ele estiver preenchendo, mas na coluna KM antigo…
Se ele já tem um dado na linha 02, por exemplo 01/06/2020 - ABC123 - 120.200
Na linha 20 ao inserir a informação: 03/06/2020 - ABC123 - 120.300 (na célula D20, aparecer a informação do que está em C2: 120.200).

Anexo encontra-se planilha com os campos informados.

Alguém consegue me auxiliar?
Boa tarde!

Fiz a criação de um código VBA que faz o procedimento que você deseja. Favor fazer alguns testes, o código irá pegar as informações mais recentes.
O código pode ser verificado ao pressionar ALT+F11 > Lado esquerdo superior > Microsoft Excel Objetos > EstaPasta_de_Trabalho

Código: Selecionar todos

Option Explicit
' vgProcessamentoAtivo = Usado para identificar se ja está em andamento uma validação.
Dim vgProcessamentoAtivo As Boolean

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    ' vQTDLinhas = Guarda quantidade de linhas.
    ' vLoop      = Usado para estrutura de repetição.
    Dim vQTDLinhas As Long
    Dim vLoop As Long
    
    ' Caso tenha um processamento ativo, não permite outro processamento até que o primeiro acabe.
    If vgProcessamentoAtivo = False Then
        vgProcessamentoAtivo = True
        ' Verifica se a linha alterada é referente à coluna B e se possui 8 caracteres "XXX-0000".
        If Target.Column = 2 And Len(Target.Value2) = 8 Then
            ' Valida quantidade de linhas existentes.
            vQTDLinhas = Sheets("Abastecimento").Range("A" & Rows.Count).End(xlUp).Row
            
            ' Varre todas as células da coluna B (da ultima linha para a primeira, para garantir informações mais recentes (data em ordem crescente)).
            For vLoop = vQTDLinhas To 1 Step -1
                ' Se for a célula que acabou de sofrer alteração, ignora.
                If Cells(vLoop, 2).AddressLocal <> Target.AddressLocal Then
                    ' Se encontrar uma célula com a mesma placa..
                    If Cells(vLoop, 2).Value2 = Target.Value2 Then
                        ' Verifica se possui preenchimento na coluna C.
                        If IsNull(Cells(vLoop, 3).Value2) = False And Cells(vLoop, 3).Value2 <> "" Then
                            ' Preenche valor na coluna C.
                            Cells(Target.Row, Target.Column + 1).Value2 = Cells(vLoop, 3).Value2
                        End If
                        
                        ' Verifica se possui preenchimento na coluna D.
                        If IsNull(Cells(vLoop, 4).Value2) = False And Cells(vLoop, 4).Value2 <> "" Then
                            ' Preenche valor na coluna D.
                            Cells(Target.Row, Target.Column + 2).Value2 = Cells(vLoop, 4).Value2
                        End If
                        
                        ' Caso tenha valor nas colunas C e D, sai da estrutura de repetição, pois foi feito o preenchimento.
                        If IsNull(Cells(vLoop, 3).Value2) = False And Cells(vLoop, 3).Value2 <> "" And _
                            IsNull(Cells(vLoop, 4).Value2) = False And Cells(vLoop, 4).Value2 <> "" Then
                            Exit For
                        End If
                    End If
                End If
            Next
            ' Define processamento como falso (finalizado).
            vgProcessamentoAtivo = False
        End If
    End If
End Sub
Anexos
PLANILHA - AproveitamentoDados.zip
(20.4 KiB) Baixado 261 vezes


Responder