Alteração com duas ...
 
Notifications
Clear all

Alteração com duas variáveis

6 Posts
2 Usuários
0 Reactions
1,660 Visualizações
(@edcurita)
Posts: 67
Trusted Member
Topic starter
 

Olá amigos feras,

Vocês tê, ajudado muito em meu projeto. A intenção de faze-lo é justamente para entender as rotinas de programação e do VBA. Desde que comecei já aprendi muito mas sei que estou só "engatinhando". Mas começa assim. Já estou quase no fim deste projeto e os detalhes finais sempre são os mais difíceis (para quem não sabe direito.

Vamos lá: tudo funciona perfeitamente. Mas aprendi que você deve ter um olhar crítico no que faz e vi que uma rotina pode ser melhorada.

Quando eu cadastro um cheque frmCadastro_cheque, estou buscando a informação pelo número de ordem. Eu estava evitando uma duplicidade (ou mais na numeração). Por exemplo: conta no Itaú com cheques de 1 a 10. Conta no Banco do Brasil com cheques de 1 a 10. Conta no Bradesco com cheque de 1 a 10... e assim por diante. Então o número de ordem elimina as coincidências.

Mas para o usuário que está com o cheque na mão, é óbvio que o cheque número 1 do Bradesco é o cheque número 1 do Bradesco e não a ordem 30, por exemplo. Aí ele teria que consultar a relação sempre que tivesse que incluir ou alterar dados do cheque.

Eu criei uma rotina (foi com a ajuda deste fórum) que, assim que for cadastrado o lote, por exemplo: de 1 a 10, na PLAN2 já vai inserir a informação do número do cheque e do banco, incluindo em uma sequência da ordem.

Então optei em fazer um botação de ALTERAR/INCLUIR, já que sempre existirá a folha.

Então o que quero é que quando eu acionar a tecla ALTERAR/INCLUIR eu inclua o número do cheque e o banco e o restante seja preenchido automaticamente com os dados que já existem (se for apenas uma alteração de dados) ou com nada, se for a inclusão para um cheque novo.

Já tenho a rotina que faz isso mas informando o número de ordem. Se entrarem no projeto verão o que estou dizendo. A ideia do número do cheque e dados do banco é para ficar igual como se fosse com o número de ordem.

Agradeço novamente o apoio de vocês.

Edmilson

 
Postado : 27/07/2013 5:19 pm
AdolfoLima
(@adolfolima)
Posts: 27
Eminent Member
 

Oi edcurita.

Sugiro que use a insturção 'FOR' ao invés do 'PROC' do excel. No 'FOR' vc consegue manipular melhor as informações.

Tente colocar a rotina abaixo no evento 'EXIT' do cmbConta_banco: (Não esqueça de habilitar o campo 'Numero do cheque').
Aí faça o teste não colocando a ordem, mas somente o numero do cheque e o nome do banco.

Private Sub cmbConta_banco_Exit(ByVal Cancel As MSForms.ReturnBoolean)
On Error Resume Next
    ' Declara variáveis
Dim i As Integer
Dim NumeroCheque As Long
Dim NomeBanco As String
    ' Carrega variaveis
NumeroCheque = Me.txtFolha.Value
NomeBanco = Me.cmbConta_banco.Value

    ' Busca dos dados na planilha
For i = 2 To 2000
    If Plan2.Cells(i, 2) = NumeroCheque Then                    ' Verifica se número do cheque coincide
        If Plan2.Cells(i, 3) = NomeBanco Then                   ' ...se número coindide... verifica se banco tambem coincide
            Me.txtFavorecido.Value = Plan2.Cells(i, 4).Value    ' Se tudo coincide, preenche campos com dados da linha
            Me.txtdata.Value = Plan2.Cells(i, 5).Value
            Me.txtValor.Value = Plan2.Cells(i, 6).Value
            Exit Sub
        End If
    End If
Next i

End Sub

Qualquer coisa, dá um toque pra gente.

Gnd abç. ;)

Gnd abç. ;)

 
Postado : 28/07/2013 10:06 pm
(@edcurita)
Posts: 67
Trusted Member
Topic starter
 

Oi edcurita.

Sugiro que use a insturção 'FOR' ao invés do 'PROC' do excel. No 'FOR' vc consegue manipular melhor as informações.

Tente colocar a rotina abaixo no evento 'EXIT' do cmbConta_banco: (Não esqueça de habilitar o campo 'Numero do cheque').
Aí faça o teste não colocando a ordem, mas somente o numero do cheque e o nome do banco.

Private Sub cmbConta_banco_Exit(ByVal Cancel As MSForms.ReturnBoolean)
On Error Resume Next
    ' Declara variáveis
Dim i As Integer
Dim NumeroCheque As Long
Dim NomeBanco As String
    ' Carrega variaveis
NumeroCheque = Me.txtFolha.Value
NomeBanco = Me.cmbConta_banco.Value

    ' Busca dos dados na planilha
For i = 2 To 2000
    If Plan2.Cells(i, 2) = NumeroCheque Then                    ' Verifica se número do cheque coincide
        If Plan2.Cells(i, 3) = NomeBanco Then                   ' ...se número coindide... verifica se banco tambem coincide
            Me.txtFavorecido.Value = Plan2.Cells(i, 4).Value    ' Se tudo coincide, preenche campos com dados da linha
            Me.txtdata.Value = Plan2.Cells(i, 5).Value
            Me.txtValor.Value = Plan2.Cells(i, 6).Value
            Exit Sub
        End If
    End If
Next i

End Sub

Qualquer coisa, dá um toque pra gente.

Gnd abç. ;)

Obrigado pelo retorno, Adolfo. Eu sou iniciante neste arte. Estou dando F8 em tudo para ver o que posso fazer e não estou conseguindo fazer que dê certo. Estou anexando o arquivo novamente, com as alterações que recomendou. O que acontece é que eu faço um registro do talonário e na folha avulsa ele simplesmente vai sobrepondo a última informação. Não entendi que acontece. Consegue me ajudar novamente?

Muito obrigado pelo seu retorno.

Edmilson

 
Postado : 29/07/2013 4:59 pm
AdolfoLima
(@adolfolima)
Posts: 27
Eminent Member
 

O f8 é uma excelente ferramenta de 'Debug'.

Então edcurita; o problema da alteração com duas variáveis foi resolvido?

Vamos ao segundo problema: Na tua rotina 'Sub incluir_ch' A função do excel que vc usou deixei como comentário pois não rodou no meu excel. Então fiz outro 'FOR' que como já disse, é melhor de manipular em VBA.
Ver se dar certo o código abaixo com as alterações que fiz:

Sub incluir_ch()
'On Error Resume Next
Dim i As Integer
                                               
'b = Application.WorksheetFunction.Match(corr, Plan2.Columns(2), 0)
For i = 2 To 2000   ' Varre da linha 2 to 2000
    If Plan2.Cells(i, 2) <> "" Then GoTo Segue  ' Se linha estiver diferente de vazia salta a próxima linha
                                                ' se vazia... preenche
        Plan2.Cells(i, 1) = i - 1
        Plan2.Cells(i, 2) = Me.txtFolha.Text
        Plan2.Cells(i, 3) = Me.cmbConta_banco.Text
        Plan2.Cells(i, 4) = Me.txtFavorecido.Text
        Plan2.Cells(i, 5) = Me.txtdata.Text
        Plan2.Cells(i, 6) = CCur(Me.txtValor.Text) ''CCur' converte o valor para dinheiro para não dar erro na célula
        Exit Sub
Segue:
Next i
                                   
End Sub

Qualquer coisa é só gritar aqui.

Gnd abç. ;)

 
Postado : 30/07/2013 9:09 am
(@edcurita)
Posts: 67
Trusted Member
Topic starter
 

Bom dia Adolfo,

Muito obrigado pelo retorno e desculpe demorar tanto a responder. Nos últimos dias não tive tempo mesmo. Hoje fiz as alterações que recomendou. Ele registra todos os lançamentos mas com o For acaba lançando sempre em uma próxima linha em branco, ao contrário do Vlookup, que se mantinha na mesma linha. Somente relembrando: neste projeto, quando eu cadastro o talonário eu insiro a primeira e a última folha. Na aba lançamento vai inserir as folhas em branco e depois eu preencho cada cheque. Assim vai informar se aquela folha existe ou não existe e também terei visualmente as folhas preenchidas e as em branco.

Pode continuar me ajudando, por favor? Estou anexando o arquivo alterado.

Obrigado

Edmilson

 
Postado : 10/08/2013 7:49 am
(@edcurita)
Posts: 67
Trusted Member
Topic starter
 

Bom dia Adolfo,

Muito obrigado pelo retorno e desculpe demorar tanto a responder. Nos últimos dias não tive tempo mesmo. Hoje fiz as alterações que recomendou. Ele registra todos os lançamentos mas com o For acaba lançando sempre em uma próxima linha em branco, ao contrário do Vlookup, que se mantinha na mesma linha. Somente relembrando: neste projeto, quando eu cadastro o talonário eu insiro a primeira e a última folha. Na aba lançamento vai inserir as folhas em branco e depois eu preencho cada cheque. Assim vai informar se aquela folha existe ou não existe e também terei visualmente as folhas preenchidas e as em branco.

Pode continuar me ajudando, por favor? Estou anexando o arquivo alterado.

Obrigado

Edmilson

O f8 é uma excelente ferramenta de 'Debug'.

Então edcurita; o problema da alteração com duas variáveis foi resolvido?

Vamos ao segundo problema: Na tua rotina 'Sub incluir_ch' A função do excel que vc usou deixei como comentário pois não rodou no meu excel. Então fiz outro 'FOR' que como já disse, é melhor de manipular em VBA.
Ver se dar certo o código abaixo com as alterações que fiz:

Sub incluir_ch()
'On Error Resume Next
Dim i As Integer
                                               
'b = Application.WorksheetFunction.Match(corr, Plan2.Columns(2), 0)
For i = 2 To 2000   ' Varre da linha 2 to 2000
    If Plan2.Cells(i, 2) <> "" Then GoTo Segue  ' Se linha estiver diferente de vazia salta a próxima linha
                                                ' se vazia... preenche
        Plan2.Cells(i, 1) = i - 1
        Plan2.Cells(i, 2) = Me.txtFolha.Text
        Plan2.Cells(i, 3) = Me.cmbConta_banco.Text
        Plan2.Cells(i, 4) = Me.txtFavorecido.Text
        Plan2.Cells(i, 5) = Me.txtdata.Text
        Plan2.Cells(i, 6) = CCur(Me.txtValor.Text) ''CCur' converte o valor para dinheiro para não dar erro na célula
        Exit Sub
Segue:
Next i
                                   
End Sub

Qualquer coisa é só gritar aqui.

 
Postado : 13/08/2013 5:23 pm