locked
Inserção de dados através da função PROCV RRS feed

  • Pergunta

  • Bom dia galera,

     

    Preciso saber de uma ajudinha em como fazer isto:

     

    Em uma planilha (plan1) tenho cpf nome data validade e nota

     

    Quero criar em uma outra planilha uma função que pesquise em plan1 o cpf e retorne os outros dados... ok com procv é facil...

    Porém preciso lançar os dados como data e nota, caso estejam vazio, nesta pesquisa e lançando nela tambér atualize na plan1

     

    Isto é possível???

    sexta-feira, 29 de fevereiro de 2008 14:32

Todas as Respostas

  • Boa tarde, Ricardo.

    Vc poderia esclarecer melhor esta questão? Não entendi direito a parte : "Porém preciso lançar os dados como data e nota, caso estejam vazio, nesta pesquisa e lançando nela tambér atualize na plan1"

    Minha interpretação é que vc quer realizar a pesquisa e caso encontre algum(ns) campos vazios permitam ao usuário realizar a inserção deste(s).

    É isso mesmo?

    PS: Já deu uma olhada nas questões que postei sobre a macro para exportação de planilhas?

    [ ]s

     

    sexta-feira, 29 de fevereiro de 2008 17:26
  • Minha interpretação é que vc quer realizar a pesquisa e caso encontre algum(ns) campos vazios permitam ao usuário realizar a inserção deste(s).

    É exatamente isto....

     

    PS: Já deu uma olhada nas questões que postei sobre a macro para exportação de planilhas?

    Sim dei uma olhada agora, acho que seja pelo texto ser muito longo... estou verificando isto qq cois te aviso!

     

    [ ]'s

     

    sexta-feira, 29 de fevereiro de 2008 18:16
  • Oi, Ricardo.

    Dá uma olhadinha neste arquivo e me avisa se te atende.

    http://www.4shared.com/file/39356899/87ff3012/Pesquisa_CPF.html

    [ ]s

     

    sexta-feira, 29 de fevereiro de 2008 20:21
  • Adilson,

     

    É isto sim... agora tenho q estudar os códigos, pq preciso aumentar os campos de pesquisa, tem mais 6 conjuntos de Data, Validade e Nota, pois são vários treinamentos.

     

    Ah não tem como fazer a pesquisa automática... sem ter q apertar o botão Pesquisar...

    Se após eu digitar o CPF e apertar o enter ele já execute a pesquisa...

     

    Vlw mais uma vez!

    sexta-feira, 29 de fevereiro de 2008 21:32
  • Oi, Ricardo.

    Dê um clique com o botão direito na aba da Plan2 e selecione a opção Exibir código.

    Em seguida coloque o seguinte código.

    Code Snippet
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Not IsEmpty(Application.Intersect(Target, Range("CPF"))) Then Pesquisar_CPF
    End Sub

     

    A explicação é que toda vez que vc digitar alguma coisa alterando valor o Range("CPF") será chamado o procedimento Pesquisar_CPF, o mesmo que é ativado pelo botão Pesquisar

    [ ]s e bom final de semana.

    domingo, 2 de março de 2008 00:16
  •  

    Boa tarde Adilson,

     

    Infelizmente não funcionou, quando termina de digitar o CPF, trava o excel.

     

    Preciso de mais uma implementação aqui. Quando o CPF não for encontrado dar a possibilidade de cadastrar o funcionário.

     

    Será que tem como?

     

    Obrigado

     

     

    PS.: To te mandando o arquivo, com as alterações que fiz... vlw!

    segunda-feira, 3 de março de 2008 17:06
  • Olá, Ricardo.

    Refiz o código para acionamento da macro. Está dando problema devido à mudança na definição no Range("CPF").

    Code Snippet

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$F$3" Then Pesquisar_CPF
    End Sub

     

     

    Quanto ao cadastro quando não encontrar o CPF, poderíamos modificar a MsgBox.

    Minha sugestão:

    1. Se não for encontrado o CPF, apareceria a mensagem: "CPF não encontrado. Deseja cadastrar CPF?", numa MsgBox com as opções SIM e NÂO.

    2. Se o usuário selecionar SIM, o range CPF é selecionado, o usuário preenche as informações que quer inserir e em seguida pressiona o botão atualizar. A macro determina a última linha do banco de dados e insere as informações na próxima linha

    3. Se o usuário selecionar NÃO, o range CPF é selecionado para que seja inserido novo CPF.

    Isso te atenderia?

    [ ]s

    segunda-feira, 3 de março de 2008 20:55
  • Olá Adilson, Atenderia sim!

     

    Acho que assim poderia substituir o controle falho que é utilizado atualmente.

     

    Cara, você tem me ajudado mto. Obrigado mesmo!

     

    Vlw

    terça-feira, 4 de março de 2008 02:49
  • Fiz as alterações no arquivo abaixo:

     

    http://www.4shared.com/file/39726468/57cb7b29/Pesquisa_CPF-2.html

     

    1. Retirei o botão pesquisar e atrelei à digitação do CPF

    2. Se for digitado um CPF não cadastrado, aparece uma mensagem informando o usuário e perguntando se deseja inserir informações para este CPF.

    3. Se escolher SIM, aparece outra mensagem informando que deve digitar as informações para o CPF e pressionar o botão atualizar. Pressionando OK os campos de inserção são limpos e ao pressionar Atualizar é criado um novo registro no final do banco de dados da Plan1

    4. Se escolher NÃO, o número do CPF é apagado, mantendo-se as demais informações.

     

    Veja se podemos considerar o tópico finalizado.

     

    [ ]s

     

    terça-feira, 4 de março de 2008 11:50
  •  

    Estamos quase chegando lá....

     

    No fim tive que inserir mais um treinamento mas tenho problemas neste ponto do script:

     

    Application.WorksheetFunction.VLookup(Range("CPF"), Range("INTERVALO_PESQUISA"), 19, False)

    Até o 18 vai legal mas apartir daí ele da o seguinte erro:

     

    "Erro em tempo de execução '1004':

    Não é possível obter a propriedade VLookup da classe WorksheetFunction"

     

    Utilizei o mesmo processo quando inseri os outros treinamentos que funcionaram legal.... mas agora neste esta dando erro

     

    Nomes das célula DATA6, NOTA6, VALIDADE6, o DATA6 ele puxa mas o resto não...

     

    Ah... este problema é só no Pesquisar_CPF

    Abraços

     

    EDIT: Outro problema depois que lanço um CPF novo... consulto ele blz... o problema é quando vou atualiza-lo ele esta gravando em um registro acima sobrepondo o outro funcionário.

     

    Te mandei o arquivo outra vez....

     

     

     

    terça-feira, 4 de março de 2008 19:15
  • Ricardo,

    Não consegui reproduzir os erros na minha  versão arquivo.

    Poderia enviar-me a tua última versão para que eu possa analisar o que está acontecendo?

    [ ]s

     

    terça-feira, 4 de março de 2008 19:57
  • Ricardo,

    Descobri o que estava dando errado.

    1. Vc precisa modificar a fórmula do Range Dinâmico INTERVALO_PESQUISA (Inserir >> Nomes >> Definir Nomes)

    De: =DESLOC(Plan1!$A$1;1;0;CONT.VALORES(Plan1!$AEmbarrassedA);CONT.VALORES(Plan1!$2Embarrassed2))

    Para: =DESLOC(Plan1!$A$1;1;0;CONT.VALORES(Plan1!$AEmbarrassedA);20)

    Explicação: Quando vc mexeu na estrutura da planilha, a função seperdeu na definição do intervalo, pois só há 18 valores na linha 2. No futuro, se quiser inserir mais colunas, vai ter que mudar o último argumento da função DESLOC de 20 para o nº de colunas correspondentes. A confusão ocorre devido às células mescladas

     

    2. No procedimento Atualizar_Informações vc vai precisar mudar o trecho abaixo:

    De:

       

    Code Snippet
    On Error Resume Next
        Set Dados = Worksheets(2)
        Linha = Application.WorksheetFunction.Match(Range("CPF"), Range("COL_CPF"), 0)

     

     

    Para:

     

    Code Snippet
       On Error Resume Next
        Set Dados = Worksheets(2)
        Linha = Application.WorksheetFunction.Match(Range("CPF"), Range("COL_CPF"), 0) + 1

     

     

    Explicação: o PROCV é realizado sobre o intervalo "COL_CPF" que se iniciava na linha 1. Com as mudanças que vc introduziu o intervalo passou a iniciar-se na linha 2. Por isso é necessário adicionar uma unidade à definição da Linha. Por esta razão é que estava sendo alterado o valor logo acima do CPF escolhido.

     

    Qualquer dúvida, me avisa, hein?

    [ ]s

     

     

    terça-feira, 4 de março de 2008 20:59
  • Bom dia Adilson,

     

    É acho que esta esta resolvida.... mas como sempre falta algo... é o seguinte esta planilha fica em um local do servidor, e existe outra planilha que "puxa" estas informações para serem exibidas pelo excel msmo pela intranet...

     

    Preciso criar um planilha nova (outro arquivo) que busque nesta planilha (pesquisa_cpf) as informações relacionadas ao NOME digitado, agora deve ser pelo nome e não pelo cpf... pois o pessoal da intranet não deve ter informações sobre o CPF do funcionário.

     

    Att,

    quarta-feira, 12 de março de 2008 12:46
  • Deixa eu entender direito.

    Vc precisa que um outro arquivo busque as informações da base de dados que contém os dados sobre os treinamentos e esta busca traga os dados dos funcionário. Confirma?

    Perguntas:

    1. A pesquisa deve trazer os dados de todos os funionários, de um funcionário específico ou de um conjunto de funcionários?

    2. Quais devem ser os dados retornados?

    Dá uma esclarecida nestes pontos, para podermos seguir adiante?

    [ ]s

     

    quarta-feira, 12 de março de 2008 13:16
  • Boa tarde Adilson,

     

    Respostas:

     

    1 - De um funcionário específico;

    2 - Todos os treinamentos com data, nota e validade.

     

    Lembrando, que deverão ser feitas as pesquisas pelo nome e não pelo CPF

     

    Abraços

    sexta-feira, 14 de março de 2008 18:52
  • Olá, meu caro.

    Postei o arquivo no link: http://www.4shared.com/file/40804929/f2ba781c/Pesquisa_Nome.html

    Segue abaixo o código que utilizei.

    Uma observação: o endereço do arquivo a ser aberto, vai depender da tua estrutura de dieretórios.

    O que o procedimento faz é:

    1. Abre o arquivo com as informações de treinamento

    2. Pesquisar as informações do nome informado

    Se o nome existir retorna os resultados numa caixa de diálogo

    Caso não encontre o nome informa que não há dados sobre o funcionário

    3. Fecha o arquivo.

    Qq dúvida, é só avisar

    [ ]s

     

    Code Snippet

    Sub Pesquisar_Nomes()
        Dim i As Integer, N As Integer, k As Integer
        Dim Planilha As Worksheet
        Dim Nome As String
       
       
        Application.ScreenUpdating = False
        Nome = Range("Nome_Pesquisa")
       
        'Este endereço tem que ser modificado de acordo com a tua estrutura de diretórios
        Workbooks.Open Filename:= _
            "D:\User\Adilson Soledade\Excel\Idéias e Projetos\Pesquisa_CPF-2.1.xls"
        Set Planilha = ActiveWorkbook.Sheets("Plan1")
        N = Planilha.Cells(Rows.Count, 2).End(xlUp).Row
        For i = 3 To N
        If UCase(Planilha.Cells(i, 2)) = UCase(Nome) Then
       
        On Error Resume Next
        DataCurso1 = CDate(Cells(i, 3).Value)
        ValidadeCurso1 = CDate(Cells(i, 4).Value)
        NotaCurso1 = CDec(Cells(i, 5))
       
        DataCurso2 = CDate(Cells(i, 6).Value)
        ValidadeCurso2 = CDate(Cells(i, 7).Value)
        NotaCurso2 = CDec(Cells(i, 8))
       
        DataCurso3 = CDate(Cells(i, 9).Value)
        ValidadeCurso3 = CDate(Cells(i, 10).Value)
        NotaCurso3 = CDec(Cells(i, 5))
       
        DataCurso4 = CDate(Cells(i, 12).Value)
        ValidadeCurso4 = CDate(Cells(i, 13).Value)
        NotaCurso4 = CDec(Cells(i, 14))
       
        DataCurso5 = CDate(Cells(i, 15).Value)
        ValidadeCurso5 = CDate(Cells(i, 16).Value)
        NotaCurso5 = CDec(Cells(i, 17))
       
        DataCurso6 = CDate(Cells(i, 18).Value)
        ValidadeCurso6 = CDate(Cells(i, 19).Value)
        NotaCurso6 = CDec(Cells(i, 20))
       
        k = 1
        Exit For
        End If
        Next i
        If k <> 1 Then
        Mensagem = "Não foi possível encontrar o registro do funcionário " & Nome
        Else
        Mensagem = "Os dados referentes ao funcionário " & Nome & " são:" & vbLf
        Mensagem = Mensagem & vbLf
        Mensagem = Mensagem & "Data do Curso1: " & DataCurso1 & vbLf
        Mensagem = Mensagem & "Validade do Curso1: " & ValidadeCurso1 & vbLf
        Mensagem = Mensagem & "Nota do Curso1: " & NotaCurso1 & vbLf
        Mensagem = Mensagem & vbLf
        Mensagem = Mensagem & "Data do Curso2: " & DataCurso2 & vbLf
        Mensagem = Mensagem & "Validade do Curso2: " & ValidadeCurso2 & vbLf
        Mensagem = Mensagem & "Nota do Curso2: " & NotaCurso2 & vbLf
        Mensagem = Mensagem & vbLf
        Mensagem = Mensagem & "Data do Curso3: " & DataCurso3 & vbLf
        Mensagem = Mensagem & "Validade do Curso3: " & ValidadeCurso3 & vbLf
        Mensagem = Mensagem & "Nota do Curso3: " & NotaCurso3 & vbLf
        Mensagem = Mensagem & vbLf
        Mensagem = Mensagem & "Data do Curso4: " & DataCurso4 & vbLf
        Mensagem = Mensagem & "Validade do Curso4: " & ValidadeCurso4 & vbLf
        Mensagem = Mensagem & "Nota do Curso4: " & NotaCurso4 & vbLf
        Mensagem = Mensagem & vbLf
        Mensagem = Mensagem & "Data do Curso5: " & DataCurso5 & vbLf
        Mensagem = Mensagem & "Validade do Curso5: " & ValidadeCurso5 & vbLf
        Mensagem = Mensagem & "Nota do Curso5: " & NotaCurso5 & vbLf
        Mensagem = Mensagem & vbLf
        Mensagem = Mensagem & "Data do Curso6: " & DataCurso6 & vbLf
        Mensagem = Mensagem & "Validade do Curso6: " & ValidadeCurso6 & vbLf
        Mensagem = Mensagem & "Nota do Curso6: " & NotaCurso6 & vbLf
       
        End If
       
        ActiveWindow.Close (False)
        Application.ScreenUpdating = True
       
        MsgBox Mensagem, vbOKOnly + vbInformation, "Resultado da busca"
       
    End Sub

     

     

    sexta-feira, 14 de março de 2008 20:33