Formulário para pes...
 
Notifications
Clear all

Formulário para pesquisar e gravar na propria planilha

25 Posts
2 Usuários
0 Reactions
4,495 Visualizações
(@fabiosp)
Posts: 291
Reputable Member
Topic starter
 

Bom prezados colegas.

Estou desenvolvendo um base de pesquisa através de uma planilha de excel que inserimos as informações diariamente.
Fiz um user form e criei os campos que necessito que seja pesquisados.
Porém não consigui fazer funcionar devido ao meu pouco conhecimento em vba apesar de ser interessado no assunto.
O que eu necessito e o seguinte
Apertando o botão PESQUISAR
Seja efetuado uma pesquisa em toda planilha com as informações que forem inseridas no campo NOME DO CLIENTE E NUMERO DE REGISTRO.

Apertando o botão GRAVAR

Grava na planilha todas as informações inseridas no user form em seu respectivo local na planilha.

Apertando o botão LiMPAR

LImpa todos dados que apareceu no user form conforme dados inseridos para pesquisar.

Apertar botão FECHAR

Fecha o user form.

Desculpe incomoda-los tentei pesquisar no fórum e na net mas não encontrei algo que poderia ser útil para minha necessidade.

Desde já agradeço e espero que algum possa me ajudar.

Abracos a todos

Fabio sp

 
Postado : 17/04/2014 7:32 am
(@themrl16)
Posts: 60
Trusted Member
 

Boa tarde Fábio!

Por favor, verifique os arquivos no anexo:

Eu criei para você os controles de Gravar, Limpar, e Fechar... a planilha já calcula qual foi a última linha preenchida, e insere as infos na linha de baixo.

Referente ao Pesquisar: De que forma os dados encontrados serão exibidos? Eles ficarão em uma nova aba, ou algo do tipo?
Observe que no anexo eu deixei um outro arquivo chamado ListBox e Registros que eu criei para um membro de outro fórum de Excel. Ele busca dados na planilha e exibe no formulário em forma de lista de pesquisa... caso seja de seu interesse, posso programar algo do mesmo tipo para vc. Se não for esse caso, poderia detalhar mais de que forma o usuário poderá visualizar o resultado da pesquisa?

Abraços,

Murilo.

 
Postado : 17/04/2014 10:47 am
(@fabiosp)
Posts: 291
Reputable Member
Topic starter
 

Murilo boa noite.

Muito obrigado pela ajuda!!
Ficou muito legal!!

Referente ao pesquisar gostaria de saber se seria possível fazer da seguinte forma.

ao clicar no botão Pesquisar ou gravar após aparecer o list box efetuar a pesquisa caso seja inseridos como critério o nome do cliente ou o numero de registro e após apertar o botão pesquisar que todo os dados encontrados seja listado em uma nova aba.

Verifiquei o arquivo listbox que você anexou mas não era bem isso que necessito.

Desde já agradeço novamente sua generosidade e espero que você entendeu minha necessidade sobre ao item pesquisar.

Valeu Murilo.

Abraços

 
Postado : 17/04/2014 4:19 pm
(@themrl16)
Posts: 60
Trusted Member
 

Boa tarde Fábio!

Não entendi a seguinte parte:

ao clicar no botão Pesquisar ou gravar após aparecer o list box efetuar a pesquisa caso seja inseridos como critério o nome do cliente ou o numero de registro e após apertar o botão pesquisar que todo os dados encontrados seja listado em uma nova aba.

Você deseja que seja criado um listbox para que os resultados da pesquisa sejam exibidos?

Eu criei a opção de pesquisar de acordo com as informações que eu consegui captar: No mesmo formulário que é utilizado para gravar, o usuário poderá pesquisar registros previamente incluídos de acordo com os valores nas TextBoxes txt_Cliente e txt_NoRegistro (observe que eu mudei o nome de todos os objetos, para facilitar a codificação das macros). Os resultados encontrados serão copiados para a segunda aba (Lista).

Aproveitei também para colocar algumas validações, como por exemplo: Verificar se as duas Textboxes estão ou não preenchidas ou se foi encontrado algum registro durante a pesquisa (caso não seja encontrado nada, o usuário será informado).

Estou à disposição para eventuais necessidades de alterar a planilha.

Abraços e bom fim de semana,

Murilo

 
Postado : 18/04/2014 2:04 pm
(@fabiosp)
Posts: 291
Reputable Member
Topic starter
 

Prezado Murilo

Bom dia.

A planilha ficou show de bola muito obrigado !!

Referente ao pesquisar seria possível que os resultados sejam exibidos em uma outra janela (Listbox).

Acho que se os resultados fossem exibidos em outra janela ficaria melhor pra trabalhar.

Pelo momento muito obrigado pela ajuda esta sendo muito útil.

abraços.

Fabio sp

 
Postado : 19/04/2014 9:28 am
(@fabiosp)
Posts: 291
Reputable Member
Topic starter
 

Murilo bom dia.

Estava analisando minha planilha e constatei que necessitava incluir alguns campos adicionais.
Incluir um text box para data de nascimento e 4 combo box analisando os códigos criados por você conseguir fazer com que as informações sejam copiadas para a planilha mas não consegui fazer com que o o botão limpar funcionasse para os combo boxes que criei.
Sem querer abusar sua generosidade poderia por favor analisar o motivo do não funcionamento.
E referente ao pesquisar conforme comentei no tópico anterior gostaria que se possível o resultado da pesquisa seja exibido em outra janela (user form ou box não sei o termo apropriado).
Graças a sua ajuda estou quase terminando minha planilha estou muito contente valeu caro colega.

Abraços e desculpe em incomodar com tantas duvidas.

Fabiosp

 
Postado : 21/04/2014 6:56 am
(@fabiosp)
Posts: 291
Reputable Member
Topic starter
 

Olá pessoal.
Desculpa incomodo e a insistência mas será que alguém pode me dar uma força para resolver este problema.

Abraços

Fabiosp

 
Postado : 24/04/2014 8:41 am
(@themrl16)
Posts: 60
Trusted Member
 

Boa tarde Fabio!

Primeiramente, peço desculpas pela demora de responder o tópico. Estive de férias nesses últimos dias, e durante a viagem eu mal utilizei o computador.

Por favor, verifique o novo arquivo que está no anexo desta mensagem. Eu incluí um novo userform, que contém a listbox utilizada para listar os dados encontrados na pesquisa. A pesquisa é realizarda através da Function listar, que contém parâmetros e retorno de função.

Como o código possui novas funcionalidades, eu comentei as linhas que julguei necessário. Se você tiver dúvidas referentes à alguma que foi utilizada ou necessidades de adaptar a planilha novamente, basta deixar o post que eu verifico para você assim que possível.

Observe que além do listbox preenchido, foi adicionada também uma aba chamada Lista, que também será atualizada com os dados da pesquisa.

Abraços,

Murilo.

 
Postado : 30/04/2014 9:12 am
(@fabiosp)
Posts: 291
Reputable Member
Topic starter
 

Bom dia Murilo.

Muito obrigado pela resposta.
Quanto a demora não tem problema.
Apesar da minha necessidade entendo que você tem coisa importante a fazer diariamente.
Eu testei a planilha e ficou show de bola.
Mas me desculpe ainda tenho uma dúvida.
Analisei as rotinas mas devido ao meu pouco conhecimento não consegui resolver.
Gostaria de saber como fazer aparecer todas as linhas da planilha na list box quando e feito a pesquisa pois agora só aparece alguns campos.
Copiei todas as rotinas e colei no tópico talvez assim não lhe causarei tanto incomodo.
Por gentileza poderia me dizer em qual rotina devo alterar para que apareça todas as linhas.
Mais uma vez agradeço a sua generosidade e espero poder retribuir.
Abraços

Fabio

 Private Sub cmd_Pesquisar_Click()
Dim bool As Boolean 'Variável utilizada na Function 'listar' para comparar o retorno da função

    Call listar(txt_NoRegistro.Text, txt_Cliente.Text, bool)
    
    If bool = True Then 'Se ao menos um registro foi encontrado na pesquisa da Function:
        Unload Me
        lista.Show
        Else:
    End If
End Sub

Private Sub cmd_Voltar_Click()
    Unload Me
    pesquisar.Show
End Sub


Private Sub UserForm_Initialize()
Dim iLastRow As Long
    
    iLastRow = Sheets("Lista").Cells(Cells.Rows.Count, "A").End(xlUp).Row
    
    With ListPesquisa
        .RowSource = "Lista!A1:O" & iLastRow 'Fonte de Dados
        'Abaixo, defino manualmente o tamanho de cada coluna do ListBox:
        .ColumnWidths = "2,8 cm; 2,5 cm; 3,1 cm; 2,5 cm; 2 cm; 2,5 cm; 2,5 cm; 3,1 cm; 2cm; 2cm; 2cm; 3cm"
    End With

End Sub




Private Sub cmd_Fechar_Click()
    Unload Me
End Sub

Private Sub cmd_Gravar_Click()
Dim iLastRow As Integer

    iLastRow = ActiveSheet.UsedRange.Rows.Count 'Conta o número de linhas preenchidas no arquivo
    
    iLastRow = iLastRow + 1 'valor de iLastRow será a próxima célula (que estará vazia)

'Preencher as células vazias com os valores das TextBoxes:
'-----------
    Range("A" & iLastRow).Value = txt_NoRegistro.Text
    Range("C" & iLastRow).Value = txt_Cliente.Text
    Range("D" & iLastRow).Value = txt_Dia.Text
    Range("H" & iLastRow).Value = txt_Responsavel.Text
    Range("I" & iLastRow).Value = txt_Control1.Text
    Range("J" & iLastRow).Value = txt_Control2.Text
    Range("M" & iLastRow).Value = cboMotivo1.Text
    Range("N" & iLastRow).Value = cboMotivo2.Text
    Range("O" & iLastRow).Value = cboMotivo3.Text
    Range("L" & iLastRow).Value = txt_Nascimento.Text
'-----------

    ActiveWorkbook.Save 'Salva a pasta de trabalho
End Sub

Private Sub cmd_Limpar_Click()
    For Each ctl In Me.Controls 'Para cada objeto de controle
        If TypeName(ctl) = "TextBox" Or _
           TypeName(ctl) = "ComboBox" Then   'Se o tipo for TextBox OU ComboBox (combo de Motivos)
        ctl.Text = vbNullString 'Limpa o conteúdo
        
        End If
    Next ctl 'Próximo objeto de controle
    
    txt_Dia.Text = Format(Now, "dd/mm/yyyy") 'Redefine o dia
End Sub

Private Sub cmd_Pesquisar_Click()
Dim bool As Boolean 'Variável utilizada na Function 'listar' para comparar o retorno da função

    Call listar(txt_NoRegistro.Text, txt_Cliente.Text, bool)
    
    If bool = True Then 'Se ao menos um registro foi encontrado na pesquisa da Function:
        Unload Me
        lista.Show
        Else:
    End If
    
End Sub

Private Sub UserForm_Click()

'Cria as tags para cada campo (a tag será o valor da coluna na linha 1)
'-----------
    txt_Cliente.Tag = "Nome Do Cliente"
    txt_NoRegistro.Tag = "No Registro"
    txt_Dia.Tag = "Dia Do Registro"
    txt_Responsavel.Tag = "Nome Do Responsável"
    txt_Control1.Tag = "Controle 1"
    txt_Control2.Tag = "Controle 2"
    cboMotivo1.Tag = "Motivo 1"
    cboMotivo2.Tag = "Motivo 2"
    cboMotivo3.Tag = "Motivo 3"
    txt_Nascimento.Tag = "Data De Nascimento"
'-----------


End Sub

Private Sub UserForm_Activate()
    txt_Dia.Text = Format(Now, "dd/mm/yyyy")
End Sub


Function listar(no_reg As String, nome_cli As String, bool) As Boolean

Dim celula As Range
Dim achou As Boolean 'Será utilizado para verificar se a macro possuirá ao menos 1 registro na lista

bool = False 'Atualiza o valor de bool para falso

Sheets("Lista").Rows.Clear 'Limpa a Lista que contém os dados da Pesquisa
    Sheets("Dados").Rows("1:1").Copy Sheets("Lista").Rows("1:1") 'Copia o cabeçalho (linha 1) da sheet Dados

    If no_reg = "" And nome_cli = "" Then
        MsgBox "O cliente e/ou nº de registro não foi informado", vbInformation
        Exit Function 'Sai da macro, caso as textbox estejam vazias (não é possível realizar o filtro)
    Else:
    
    achou = False 'Valor da booleana será falso

    iLastRow = Sheets("Dados").UsedRange.Rows.Count 'Conta o número de linhas preenchidas no arquivo

    For Each celula In Sheets("Dados").Range("A2:A" & iLastRow)
        If celula.Value = no_reg Or celula.Offset(0, 2).Value = nome_cli Then 'Compara o valor do textbox com as celulas
            achou = True 'Achou ao menos um registro para a lista
            With Sheets("Lista")
                .Activate 'Seleciona a sheet Lista
                celula.EntireRow.Copy .Rows(.UsedRange.Rows.Count + 1) 'Copia a célula atual do laço para a próxima celula em branco da lista
            End With
        End If
    Next
    
    If achou = False Then 'Se não foram encontrados nenhum registro com o nº de registro e cliente informados:
        MsgBox "Não foram encontrados nenhum registro com o cliente '" & pesquisar.txt_Cliente.Text & _
               "' ou nº de registro '" & pesquisar.txt_NoRegistro.Text & "'"
        bool = False 'False (não continuará a macro de pesquisa, pois não foram encontrados resultados)
        Exit Function 'Sai da Macro
    
    Else:           'Caso a sheet Lista possua ao menos um registro:
        'Unload Me   'Fecha o Form
        bool = True 'Continuará a pesquisa
        Sheets("Dados").Select
    End If
    
End If

End Function

  
 
Postado : 01/05/2014 8:35 am
(@themrl16)
Posts: 60
Trusted Member
 

Boa tarde Fábio!

A macro está trazendo somente os resultados da pesquisa. Se pesquisar pelo nº de registro 1234 por exemplo, só aparecerão na listbox as linhas que contém esse nº de registro, enquanto as outras serão ignoradas. Você deseja que a listbox exiba todo os conteúdo? Mas de que forma isso seria feito?

Eu posso alterar, por exemplo, para: Quando os 2 campos de pesquisa estiverem vazios, ao invés de retornar a mensagem pedindo para informar um registro ou cliente, ele exibe todos os dados da planilha...

 
Postado : 05/05/2014 2:13 pm
(@fabiosp)
Posts: 291
Reputable Member
Topic starter
 

Boa noite Murilo.

Muito obrigado pela resposta.
Eu necessito que quando por exemplo for pesquisado pelo nº de registro 1234 ou pelo nome de cliente apareça na listbox toda a linha (Intervalo A:J) que contem essa informação.
Tipo se procurar pelo nome prof murilo aparecer desta forma na listbox

Ou se procurar por 1234

Desculpe se não estou sendo claro na explicação mas creio que pelo modelo que fica mais fácil entender.
Vou utilizar esta lista para controlar meu estoque de mercadoria conforme cada cliente desta forma necessito saber todo o histórico.
Agradeço mais uma vez sua ajuda.

Abraços.

 
Postado : 05/05/2014 5:42 pm
(@themrl16)
Posts: 60
Trusted Member
 

Boa tarde Fábio!

Então significa que as colunas que estão ocultas na planilha também não deverão aparecer na listbox, correto? Se for este o caso, por favor observe o novo arquivo em anexo, onde eu estou ocultando as colunas Sufixo, Referência, Tipo Ped, Valor e Estoque.
Dessa forma, ficarão na listbox apenas as colunas que vc exibiu na imagem, e as linhas serão exibidas de acordo com o nº de Registro e/ou Nome do Cliente informado.
Observe que na parte inferior da listbox, existe uma barra de rolagem para exibir o restante das colunas... se vc desejar, pode aumentar o tamanho da listbox para reduzir a barra de rolagem ou exibir todas as colunas em uma única visualização

PS: Modifiquei parcialmente o método UserForm_Initialize() e a função listar(no_reg, nome_cli, bool) para atender a nova necessidade.

Abraços,

Murilo.

 
Postado : 06/05/2014 12:07 pm
(@fabiosp)
Posts: 291
Reputable Member
Topic starter
 

Boa noite Murilo.

Muito obrigado pela ajuda e por sua paciência.
Analisei o arquivo e percebi algumas mudanças.
Desculpe o incomodar mais referente a este novo arquivo tenho uma dúvida.
Quando eu pressiono o botão pesquisar e digito o dado a ser pesquisado na listbox só aparece esses itens

Nome Do Cliente Nome Do Responsável Controle 2 Motivo 1 Motivo 2 Motivo 3

Necessito que na listbox apareça os seguintes itens

No Registro Nome Do Cliente Dia Do Registro Nome Do Responsável Controle 1 Controle 2 Data De Nascimento Motivo 1 Motivo 2 Motivo 3

Percebi que você tem a barra de rolagem mas mesmo rolando pra frente não consta os restantes dos resultados.
Mais uma vez peço desculpa pelo incomodo.

Creio que ajustando isso a planilha estará pronta pra uso.
Mais uma obrigado.

Abraços.

Fabio sp

 
Postado : 06/05/2014 4:27 pm
(@themrl16)
Posts: 60
Trusted Member
 

Poxa que estranho, a modificação que eu realizei organiza as colunas da mesma forma que você solicitou (e que também consta nas imagens que você enviou).
Ela está ordenada pelas seguintes colunas na sequência: No Registro Nome Do Cliente Dia Do Registro Nome Do Responsável Controle 1 Controle 2 Data De Nascimento Motivo 1 Motivo 2 Motivo 3

Segue abaixo uma imagem de como ela aparece para mim:

Caso o último arquivo que eu disponibilizei não esteja dessa forma, por favor, realize um novo upload da sua planilha que constam com as colunas desorganizadas na lista para que eu possa dar uma olhada, pois realmente não entendi o que aconteceu rsrs

Abraços,

Murilo.

 
Postado : 07/05/2014 5:04 am
(@fabiosp)
Posts: 291
Reputable Member
Topic starter
 

Bom dia Murilo.

Nossa esta será que esse problema seria algum com a versão do excel ?
Eu uso o Office 2010.
Vou anexar a última planilha que você enviou para analise poderia por gentileza testar?
Desculpe causar tanto incomodo caro colega.

Abraços.

Fabio sp

 
Postado : 07/05/2014 5:15 am
Página 1 / 2