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

Acumular dados para um mesmo cliente [RESOLVIDO]

Fórum para dúvidas sobre os fundamentos da linguagem de programação Visual Basic no contexto do VBA
jrlins
Colaborador
Colaborador
Mensagens: 14
Registrado em: Qui Jan 26, 2017 11:06 am

Acumular dados para um mesmo cliente [RESOLVIDO]

Mensagem por jrlins »

Boa Tarde a todos..

Como é difícil ser novo no assunto mas vamos tentando evoluir...rsrs!!!

Estou com um problema na verdade de raciocinio...rsrs!!!

Como faço para acumular vários dados para um mesmo cliente. Ex:

Chamo um Paciente e tenho duas TextBox uma (data) e uma (Descrição) e uma ListBox(relatorio), quando escrevo algo sobre aquele paciente clico em um botão ok, assim a ListBox recebera os dados daquele dia e assim vai acontecer sempre.

Quando eu chamar novamente esse Paciente então ele teria que carregar todo o relatório do mesmo.

não consegui pensar me nada, Alguém teria uma solução?
Agradeço desde já
Anexos
erro_1.jpg
erro_1.jpg (284.27 KiB) Exibido 6053 vezes
Editado pela última vez por jrlins em Seg Fev 06, 2017 8:37 pm, em um total de 1 vez.


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.


jrlins
Colaborador
Colaborador
Mensagens: 14
Registrado em: Qui Jan 26, 2017 11:06 am

Re: Acumular dados para um mesmo cliente

Mensagem por jrlins »

Sera que ninguém pode ajudar? :-(


leandroxtr
Acabou de chegar
Acabou de chegar
Mensagens: 3
Registrado em: Ter Jan 31, 2017 11:02 am

Re: Acumular dados para um mesmo cliente

Mensagem por leandroxtr »

Anexe a planilha para ajudarmos melhor!


Wagner.cwb
Manda bem
Manda bem
Mensagens: 168
Registrado em: Sáb Set 24, 2016 4:48 pm

Re: Acumular dados para um mesmo cliente

Mensagem por Wagner.cwb »

Realmente, sem a planilha fica um pouco mais complicado, mas se você tentar usar um comando "SE"


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.


avgsantos
Colaborador
Colaborador
Mensagens: 93
Registrado em: Ter Fev 02, 2016 6:39 pm

Re: Acumular dados para um mesmo cliente

Mensagem por avgsantos »

Boa noite, Jr. Lins

Sem a planilha fica difícil, ver abaixo se te ajuda.

Primeiro criar uma variável tipo "busca registro" , segue um exemplo abaixo

Sub busca_regitros()
'Adiciona os dados a listbox
Dim linha As Integer
Dim codigo As String
Dim coluna As Integer
Dim LinLBox As Integer
Dim ContRegs As Integer
Set guia = ThisWorkbook.Worksheets("bancodedados")
LinLBox = 0
codigo = txt_codigo
linha = 2
ContRegs = 0
ListBox1.Clear
guia.Select
Do Until Sheets("bancodedados").Cells(linha, 1) = ""
If Sheets("bancodedaodos").Cells(linha, 1) = codigo Then
With ListBox1
.AddItem
.List(LinLBox, 0) = Cells(linha, 1) 'Data
.List(LinLBox, 1) = Cells(linha, 2) 'Descrição

End With
LinLBox = LinLBox + 1
ContRegs = ContRegs + 1

End If

linha = linha + 1
Loop

lbl_registros = "Total de Ocorrencia: " & ContRegs ' Conta registro de paciente

End Sub
Depois de criar a variavel acima coloque esta variavel dentro do botão do código para chamar o registro de ocorrência do mesmo paciente.

Grato
avgsantos


jrlins
Colaborador
Colaborador
Mensagens: 14
Registrado em: Qui Jan 26, 2017 11:06 am

Re: Acumular dados para um mesmo cliente

Mensagem por jrlins »

Boa Tarde a todos, desculpe-me pela demora em responder mas eu tive vários contra-tempos aqui.

Agradeço desde já a todos que tentam me ajudar, e digo que já resolvi boa parte aqui quebrando a cabeça, mas ainda não esta 100%.
So preciso agora carregar apenas o Relatório do mesmo cliente na listbox conforme imagem. anexo também linha de código do botão que que grava uma nova descrição e o preenchimento de lista.

Botão "ok"

Código: Selecionar todos

 Private Sub CmdOkRelat_Click()
 
 Worksheets("Relatorios").Activate
 Plan3.Range("A2").Select

    If Trim(Me.TextDescPac.Value) = "" Then
        Me.TextDescPac.SetFocus
        MsgBox "Por favor insira uma descrição", vbInformation, "Cadastro de Paciêntes"

        Exit Sub
    End If

    Do

        If Not (IsEmpty(ActiveCell)) Then
            ActiveCell.Offset(1, 0).Select

        End If

    Loop Until IsEmpty(ActiveCell) = True

    EnumeraContatos

    ActiveCell.Offset(0, 1).Value = TextCodigo.Text
    ActiveCell.Offset(0, 2).Value = TextNome.Text
    ActiveCell.Offset(0, 3).Value = TextDtDescPac.Text
    ActiveCell.Offset(0, 4).Value = TextDescPac.Text
   
    TextDtDescPac.Text = ""
    TextDescPac = ""

    ActiveWorkbook.Save

    MsgBox "Relatório salvo com sucesso", vbInformation, "Cadastro de Paciêntes"
PreencherListBox
End Sub
Preenchimento de Lista

Código: Selecionar todos

Sub PreencherListBox()
Dim lastRow As Long
Dim i As Integer
lst_DescPaci.Clear
With lst_DescPaci
'define nº colunas
        .ColumnCount = 3
End With
' Verifica qual a ultima linha preenchida
lastRow = Plan3.Range("A65000").End(xlUp).Row
'adiciona dados
For i = 2 To lastRow
Me.lst_DescPaci.AddItem Plan3.Range("B" & i)
Me.lst_DescPaci.List(Me.lst_DescPaci.ListCount - 1, 1) = Plan3.Range("D" & i)
Me.lst_DescPaci.List(Me.lst_DescPaci.ListCount - 1, 2) = Plan3.Range("E" & i)
Next

End Sub
agradeço desde já.

Junior Lins
Anexos
duvida.jpg
duvida.jpg (269.27 KiB) Exibido 5975 vezes


srobles
Jedi
Jedi
Mensagens: 805
Registrado em: Qua Mai 06, 2015 7:39 pm

Re: Acumular dados para um mesmo cliente

Mensagem por srobles »

jrlins,

Creio que o que está ocorrendo seja o seguinte :

No código postado que preenche o relatório, não há uma verificação baseada no paciente.

Seu código :

Código: Selecionar todos

Sub PreencherListBox()
Dim lastRow As Long
Dim i As Integer
lst_DescPaci.Clear
With lst_DescPaci
'define nº colunas
        .ColumnCount = 3
End With
' Verifica qual a ultima linha preenchida
lastRow = Plan3.Range("A65000").End(xlUp).Row
'adiciona dados
For i = 2 To lastRow
Me.lst_DescPaci.AddItem Plan3.Range("B" & i)
Me.lst_DescPaci.List(Me.lst_DescPaci.ListCount - 1, 1) = Plan3.Range("D" & i)
Me.lst_DescPaci.List(Me.lst_DescPaci.ListCount - 1, 2) = Plan3.Range("E" & i)
Next

End Sub
Código com a verificação de dados:

Código: Selecionar todos

Sub PreencherListBox()
Dim lastRow As Long
Dim i As Integer
lst_DescPaci.Clear
With lst_DescPaci
'define nº colunas
        .ColumnCount = 3
End With
' Verifica qual a ultima linha preenchida
lastRow = Plan3.Range("A65000").End(xlUp).Row
'adiciona dados
For i = 2 To lastRow
   'Aqui checamos se a linha atual tem o valor igual ao ID do paciente
   If Cells(i,"A")=campoIDPaciente Then 'Insira o nome do campo onde está o ID do Paciente
      Me.lst_DescPaci.AddItem Plan3.Range("B" & i)
      Me.lst_DescPaci.List(Me.lst_DescPaci.ListCount - 1, 1) = Plan3.Range("D" & i)
      Me.lst_DescPaci.List(Me.lst_DescPaci.ListCount - 1, 2) = Plan3.Range("E" & i)
   End If
Next
Experimente e retorne ok?

Abs

End Sub


jrlins
Colaborador
Colaborador
Mensagens: 14
Registrado em: Qui Jan 26, 2017 11:06 am

Re: Acumular dados para um mesmo cliente

Mensagem por jrlins »

Código com a verificação de dados:

Código: Selecionar todos

Sub PreencherListBox()
Dim lastRow As Long
Dim i As Integer
lst_DescPaci.Clear
With lst_DescPaci
'define nº colunas
        .ColumnCount = 3
End With
' Verifica qual a ultima linha preenchida
lastRow = Plan3.Range("A65000").End(xlUp).Row
'adiciona dados
For i = 2 To lastRow
   'Aqui checamos se a linha atual tem o valor igual ao ID do paciente
   If Cells(i,"A")=campoIDPaciente Then 'Insira o nome do campo onde está o ID do Paciente
      Me.lst_DescPaci.AddItem Plan3.Range("B" & i)
      Me.lst_DescPaci.List(Me.lst_DescPaci.ListCount - 1, 1) = Plan3.Range("D" & i)
      Me.lst_DescPaci.List(Me.lst_DescPaci.ListCount - 1, 2) = Plan3.Range("E" & i)
   End If
Next

End Sub
Experimente e retorne ok?

Abs
Obrigado pela pronta resposta srobles, ele sumiu não carregou mais nada... mas acho que onde tenho que trocar o campo campoIDPaciente ele teria que comparar na PLAN1 de onde ele realmente se origina. será que é isso? mas nao sei como fazer isso. :?


jrlins
Colaborador
Colaborador
Mensagens: 14
Registrado em: Qui Jan 26, 2017 11:06 am

Re: Acumular dados para um mesmo cliente

Mensagem por jrlins »

Acho que nesta imagem vai da pra entender o que eu realmente preciso

Segue o codigo que carrega a lista.
Essa lista esta sendo carregada a partir da Plan3("Relatorios") o Código do Paciente esta em Plan1 ("CadPaciente").

Código: Selecionar todos

Sub PreencherListBox()

    Dim lastRow As Long
    Dim i As Integer
    lst_DescPaci.Clear
    With lst_DescPaci
        'define nº colunas
        .ColumnCount = 3
    End With
    ' Verifica qual a ultima linha preenchida
    lastRow = Plan3.Range("A65000").End(xlUp).Row
    'adiciona dados
    
    For i = 2 To lastRow
     
            Me.lst_DescPaci.AddItem Plan3.Range("B" & i)
            Me.lst_DescPaci.List(Me.lst_DescPaci.ListCount - 1, 1) = Plan3.Range("D" & i)
            Me.lst_DescPaci.List(Me.lst_DescPaci.ListCount - 1, 2) = Plan3.Range("E" & i)
       
    Next

End Sub

Agradeço desde já..

Junior Lins
Anexos
duvida2.jpg
duvida2.jpg (254.94 KiB) Exibido 5945 vezes


srobles
Jedi
Jedi
Mensagens: 805
Registrado em: Qua Mai 06, 2015 7:39 pm

Re: Acumular dados para um mesmo cliente

Mensagem por srobles »

jrlins,

Os demais campos devem ter seus valores obtidos na planilha CadPaciente normalmente. Isso permanece inalterado.
Os dados obtidos da planilha Relatórios, preenchem o ListBox, correto?
Caso positivo, tente o que segue abaixo :

Código: Selecionar todos

Sub PreencherListBox()

    Dim lastRow As Long
    Dim i As Integer
    lst_DescPaci.Clear
    With lst_DescPaci
        'define nº colunas
        .ColumnCount = 3
    End With
    ' Verifica qual a ultima linha preenchida
    lastRow = Plan3.Range("A65000").End(xlUp).Row

   'Desabilitamos a atualização de tela
   Application.ScreenUpdating = False

    'adiciona dados
    'Selecionamos a planilha Relatórios
    With ThisWorkBook.Sheets("Relatórios")
        'Ativamos a planilha
        .Activate
        'Selecionamos a célula A2
        Cells(2,"A").Select
             'Com o laço For => Next, verificamos o valor da célula atual 
             For i = 2 To lastRow
                 'Para que não tenhamos de percorrer todas as 65000 linhas
                 'Caso a célula atual for igual nulo / branco, saimos do laço
                 If Cells(i,"A") = "" Then  Exit For
                 'Caso o valor da célula atual for igual ao valor do ID do paciente, adicionamos esta linha ao ListBox
                 If Cells(i,"A") = TextBox_ID_Paciente Then     
                     Me.lst_DescPaci.AddItem Cells(i, "B")
                     Me.lst_DescPaci.List(Me.lst_DescPaci.ListCount - 1, 1) = Cells(i, "D")
                     Me.lst_DescPaci.List(Me.lst_DescPaci.ListCount - 1, 2) = Cells(i, "E")
                 End If       
            Next
    End With

    'Selecionamos a planilha de cadastro de pacientes
    ThisWorkBook.Sheets("CadPaciente").Activate

    'Habilitamos a atualização de tela
    Application.ScreeUpdating = True

End Sub
Aguardo retorno.

Abs


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.


Responder