Inquiridor
Inserção de dados através da função PROCV

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 SnippetPrivate Sub Worksheet_Change(ByVal Target As Range)
If Not IsEmpty(Application.Intersect(Target, Range("CPF"))) Then Pesquisar_CPF
End SubA 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 SnippetPrivate Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$F$3" Then Pesquisar_CPF
End SubQuanto 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!$A
A);CONT.VALORES(Plan1!$2
2))
Para: =DESLOC(Plan1!$A$1;1;0;CONT.VALORES(Plan1!$A
A);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 SnippetOn Error Resume Next
Set Dados = Worksheets(2)
Linha = Application.WorksheetFunction.Match(Range("CPF"), Range("COL_CPF"), 0)Para:
Code SnippetOn Error Resume Next
Set Dados = Worksheets(2)
Linha = Application.WorksheetFunction.Match(Range("CPF"), Range("COL_CPF"), 0) + 1Explicaçã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 SnippetSub 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 Subsexta-feira, 14 de março de 2008 20:33