MaximoAccess

Caro Usuário, não tire as suas duvidas nas Salas de Repositório, abra sempre um novo tópico relacionado, nas salas destinadas para o efeito, como Sala de Tabelas, Consultas, Formulários, Relatórios, Macros, Módulos e VBA.

Obrigado

Administração do MaximoAccess

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

    [Resolvido]Preencher meses seguintes com valor ultima compra

    Compartilhe

    ilvecchio
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 127
    Registrado : 16/11/2012

    [Resolvido]Preencher meses seguintes com valor ultima compra

    Mensagem  ilvecchio em Qui 16 Jun 2016, 13:03

    Buenas!
    Tenho a seguinte tabela, com os últimos quatro anos, e todos os meses já preenchidos, para um grupo especial de clientes. Nessa Tabela são carregados os valores mensais da compra desses clientes. Até aqui tudo bem. Agora preciso preencher os demais meses com o mesmo valor da compra imediatamente anterior. A tabela é esta:
    CodCliente, ValorCompra, Seq (sequencial de registros por cliente - 4 anos = 48 registros ), ano da compra, mês da compra, AnoMes da compra.

    CodCliente ValorCompra Seq AnoCompra MesCompra AnoMesCompra
    12345.................. 0............. 1........ 2011.................... 1.......... 201101
    12345.................. 0............. 2........ 2011.................... 2.......... 201102
    12345.................. 100.......... 3........ 2011.................... 3.......... 201103
    12345.................. 0............. 4........ 2011.................... 4.......... 201104
    12345.................. 0............. 5........ 2011.................... 5.......... 201105
    12345.................. 0............. 6........ 2011.................... 6.......... 201106
    12345.................. 0............. 7........ 2011.................... 7.......... 201107
    12345.................. 0............. 8........ 2011.................... 8.......... 201108
    12345.................. 0............. 9........ 2011.................... 9.......... 201109
    12345.................. 80.......... 10........ 2011.................. 10.......... 201110
    12345.................. 0........... 11........ 2011................... 11.......... 201111
    12345.................. 0........... 12........ 2011................... 12.......... 201112
    12345.................. 0........... 13........ 2012.................... 1.......... 201201
    12345.................. 0........... 14........ 2012.................... 2.......... 201202
    12345.................. 0........... 15........ 2012.................... 3.......... 201203
    12345.................. 0........... 16........ 2012.................... 4.......... 201204
    ---.................. ---............. --........ ---.................... ----.......... -------
    12345.................. 0............. 48........ 2014.................... 12.......... 201412
    22222.................. 150......... 1........ 2011.................... 1.......... 201101
    22222.................. 0............. 2........ 2011.................... 2.......... 201102
    22222.................. 0............. 3........ 2011.................... 3.......... 201103
    22222.................. 130.......... 4........ 2011.................... 4.......... 201104
    22222.................. 0............. 5........ 2011.................... 5.......... 201105
    22222.................. 0............. 6........ 2011.................... 6.......... 201106
    22222.................. 0............. 7........ 2011.................... 7.......... 201107
    22222.................. 0............. 8........ 2011.................... 8.......... 201108
    ---.................. ---............. --........ ---.................... ----.......... -------
    22222.................. 0............. 10........ 2011.................... 10.......... 201110
    22222.................. 0............. 11........ 2011.................... 11.......... 201111
    22222.................. 0............. 12........ 2011.................... 12.......... 201112
    22222.................. 0............. 13........ 2012.................... 1.......... 201201
    22222.................. 0............. 14........ 2012.................... 2.......... 201202
    22222.................. 0............. 15........ 2012.................... 3.......... 201203
    22222.................. 0............. 16........ 2012.................... 4.......... 201204
    22222.................. 0............. 17........ 2012.................... 5.......... 201205
    22222.................. 0............. 45........ 2014.................... 9.......... 201409
    22222.................. 0............. 46........ 2014.................... 10.......... 201410
    22222.................. 0............. 47........ 2014.................... 11.......... 201411
    22222.................. 0............. 48........ 2014.................... 12.......... 201412


    Imaginei um código VBA que ao iniciar a leitura da tabela gravasse numa variável o primeiro ValorCompra (zero ou não), e preencheria o registro com esse valor até encontrar um ValorCompra maior que zero (para o mesmo CodCliente). Quando encontrasse o próximo ValorCompra, gravaria novamente o valor na variável e o repetiria para os meses seguintes até o próximo ValorCompra diferente, ou próximo CodCliente. E assim, sucessivamente, até o final da tabela.

    Parece simples. Mas não consegui fazer.
    Então, se alguém puder me ajudar ....

    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 5889
    Registrado : 05/11/2009

    Re: [Resolvido]Preencher meses seguintes com valor ultima compra

    Mensagem  Alexandre Neves em Sex 17 Jun 2016, 10:23

    Bom dia,
    Mande bd com pequeno exemplo com tabela com dados representativos


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo

    ilvecchio
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 127
    Registrado : 16/11/2012

    Re: [Resolvido]Preencher meses seguintes com valor ultima compra

    Mensagem  ilvecchio em Sex 17 Jun 2016, 14:41

    Buenas!

    Obrigado.

    Anexei um banco Access 2003. Nele tem a tabela TabelaClientesCompra, com o campo ValorCompra, a ser atualizado.

    Vamos lá. O cliente 11111 teve a primeira compra no ano 2011 mês 03, no ValorCompra de 100. Esse valor quero repetir para os meses 04, 05 e 06. No mês 07 já tem outra compra, de 150, que será repetida para os meses restantes do ano 2011 e nos meses 01 e 02 do ano 2012, pois no mês 03, há um novo valor de compra.

    Quando iniciar um novo cliente, o processo se repete.
    Anexos
    bd1.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (9 Kb) Baixado 4 vez(es)

    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 5889
    Registrado : 05/11/2009

    Re: [Resolvido]Preencher meses seguintes com valor ultima compra

    Mensagem  Alexandre Neves em Sex 17 Jun 2016, 16:50

    Tenha um módulo ou crie Cole esta rotina e execute-a
    Código:
    Sub PreencheMesesEmBranco()
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        '  código criado por Alexandre Neves, do Fórum MaximoAccess                                                '
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        Dim Rst As DAO.Recordset, strCodCliente As String, sngValorCompra As Single
       
        Set Rst = CurrentDb.OpenRecordset("SELECT * FROM TabelaClientesCompra ORDER BY CodCliente,AnoCompra,MesCompra;")
       
        Do While Not Rst.EOF
            If Rst("CodCliente") = strCodCliente Then
                If Rst("ValorCompra") > 0 Then
                    sngValorCompra = Rst("ValorCompra")
                ElseIf sngValorCompra > 0 Then
                    Rst.Edit
                    Rst("ValorCompra") = sngValorCompra
                    Rst.Update
                End If
            Else
                strCodCliente = Rst("CodCliente")
                If Rst("ValorCompra") > 0 Then sngValorCompra = Rst("ValorCompra")
            End If
            Rst.MoveNext
        Loop
    End Sub


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo

    ilvecchio
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 127
    Registrado : 16/11/2012

    Re: [Resolvido]Preencher meses seguintes com valor ultima compra

    Mensagem  ilvecchio em Sex 17 Jun 2016, 21:37

    Buenas!
    Alexandre, funcionou com a tabela que te enviei.
    Quando testei com a tabela real, na minha base de dados, não preencheu corretamente. A tabela real tem 150 mil registros. O código "se perdeu".
    Para tirar a prova dos nove, reduzi minha tabela para a quantidade de registros da tabela que te mandei, e funcionou.
    Se quiser, mando a tabela real para confirmares.

    Pode ser?

    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 5889
    Registrado : 05/11/2009

    Re: [Resolvido]Preencher meses seguintes com valor ultima compra

    Mensagem  Alexandre Neves em Sex 17 Jun 2016, 23:05

    pode


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo

    ilvecchio
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 127
    Registrado : 16/11/2012

    Re: [Resolvido]Preencher meses seguintes com valor ultima compra

    Mensagem  ilvecchio em Seg 20 Jun 2016, 12:52

    Anexo.
    Pitaco de quem não sabe nada: ajudaria usar o campo SeqCliente, talvez num for ... next (For SeqCliente = 1 to 48 ) ?
    Anexos
    bd1.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (2.2 Mb) Baixado 8 vez(es)

    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 5889
    Registrado : 05/11/2009

    Re: [Resolvido]Preencher meses seguintes com valor ultima compra

    Mensagem  Alexandre Neves em Ter 21 Jun 2016, 09:02

    Bom dia,
    Código:
    Sub PreencheMesesEmBranco()
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        '  código criado por Alexandre Neves, do Fórum MaximoAccess                                                '
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        Dim Rst As DAO.Recordset, strCodCliente As String, dblValorCompra As Double
       
        Set Rst = CurrentDb.OpenRecordset("SELECT * FROM TabelaClientesCompra ORDER BY CodCliente,AnoCompra,MesCompra;")
        Rst.MoveFirst
       
        Do While Not Rst.EOF
            If Rst("CodCliente") = strCodCliente Then
                If Rst("ValorCompra") > 0 Then
                    dblValorCompra = Rst("ValorCompra")
                ElseIf dblValorCompra > 0 Then
                    Rst.Edit
                    Rst("ValorCompra") = dblValorCompra
                    Rst.Update
                End If
            Else
                strCodCliente = Rst("CodCliente")
                dblValorCompra = 0
                If Rst("ValorCompra") > 0 Then dblValorCompra = Rst("ValorCompra")
            End If
            Rst.MoveNext
        Loop
        Set Rst = Nothing
    End Sub


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo

    ilvecchio
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 127
    Registrado : 16/11/2012

    Re: [Resolvido]Preencher meses seguintes com valor ultima compra

    Mensagem  ilvecchio em Qua 22 Jun 2016, 19:57

    Buenas!
    Alexandre, o Grande!!!
    Fantástico, tudo certinho.

    Obrigado.

      Data/hora atual: Sex 09 Dez 2016, 13:26