Notifications
Clear all

Como Não Duplicar as gravações?

9 Posts
2 Usuários
0 Reactions
1,309 Visualizações
(@adailtonfg)
Posts: 0
New Member
Topic starter
 

Preciso cadastrar diariamente várias pessoas, algumas delas com os nomes iguais e o que diferenciam elas é o CPF.

Como posso montar uma regra que busca pelo nome e se estiver o CPF igual ela barra o cadastro e informa o dia que foi cadastrado e se não continua o cadastro.

tentei fazer com a Vlookup dentro de IF, SELECT CASE sem SUCESSO.

 
Postado : 20/06/2014 1:36 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Vc precisa usar uma validação para impedir a inclusão do CPF já existente...
Outra opção é usar um procv q vc já tentou, ou um corresp, buscando o CPF digitado na célula ao lado olhando pras células acima dela..
Coloque um modelo compactado q eu monto pra vc...

 
Postado : 20/06/2014 1:52 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Um exemplo para que você possa tentar adaptar.

Private Sub cmdAdd_Click()
    Dim iRow As Long
    Dim ws As Worksheet
    Set ws = Worksheets("MinhaGuia")
    
     'Encontra a 1º linha vazia na Base de Dados
    iRow = ws.Cells(Rows.Count, 1) _
    .End(xlUp).Offset(1, 0).Row
     
    If WorksheetFunction.CountIf(ws.Range("A2", ws.Cells(iRow, 1)), Me.txtPart.Value) > 0 Then
        MsgBox "Duplicidade encontrada", vbCritical
        Exit Sub
    End If
     
     
     'Verifica a entrada de numero
    If Trim(Me.txtPart.Value) = "" Then
        Me.txtPart.SetFocus
        MsgBox "Por favor digite o código"
        Exit Sub
    End If
     
     'Copia os dados para a Base de Dados
    ws.Cells(iRow, 1).Value = Me.txtPart.Value
    ws.Cells(iRow, 2).Value = Me.txtLoc.Value
    ws.Cells(iRow, 3).Value = Me.txtDate.Value
    ws.Cells(iRow, 4).Value = Me.txtQty.Value
     
     'Limpa os dados
    Me.txtPart.Value = ""
    Me.txtLoc.Value = ""
    Me.txtDate.Value = ""
    Me.txtQty.Value = ""
    Me.txtPart.SetFocus
     
End Sub

Att

 
Postado : 20/06/2014 2:42 pm
(@adailtonfg)
Posts: 0
New Member
Topic starter
 

planilha em anexo!

 
Postado : 20/06/2014 2:45 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Nem olhei pro formulário, pq ele tá longe de ficar completo ...

Usei:
- formatar como tabela, para garantir as fórmulas e formataç~ies e validações para todas as linhas, sempre...
- validação de dados para impedir a entrada de cpf repetido
- formatação condicional, para caso vc escreva um CPF via VBA (sim o VBA ignora a validação), ele fique pintado de vermelho, a partir do segundo digitado.

Incluí uma coluna de data, pois vc mencionou que queria ver a data do cadastro.... o recurso de tabela permitirá filtrar o cpf repetido, e assim vc verá a(s) data(s) em que ele foi cadastrado...

Segue o modelo...

 
Postado : 20/06/2014 4:29 pm
(@adailtonfg)
Posts: 0
New Member
Topic starter
 

criei o código, porem não estou conseguindo montar a validação.

 
Postado : 23/06/2014 11:05 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Não conseguiu adaptar?
Tente se basear na ideia abaixo.

If WorksheetFunction.CountIf(ws.Range("A2", ws.Cells(iRow, 1)), Me.txtPart.Value) > 0 Then
        MsgBox "Duplicidade encontrada", vbCritical
        Exit Sub
    End If

Att

 
Postado : 24/06/2014 12:22 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Experimente:

Dim rowcount As Long
Dim clt As Control
rowcount = Cells(Cells.Rows.Count, "A").End(xlUp).Row
If VBA.IsNumeric(Application.Match(Bcpf.Text, Sheets("plan1").Range("F1:f" & rowcount), 0)) Then
    MsgBox "CPF já cadastrado dia - " & Cells(Application.Match(Bcpf.Text, Sheets("plan1").Range("F1:f" & rowcount), 0), "H")
    Exit Sub
End If
With Worksheets("Plan1").Range("a3")
    .Offset(rowcount, 0).Value = Me.Bnome.Value
    .Offset(rowcount, 1).Value = Me.BSbrNome
    .Offset(rowcount, 2).Value = Me.Bendr.Value
    .Offset(rowcount, 3).Value = Me.Bcidade.Value
    .Offset(rowcount, 4).Value = Me.Btel.Value
    .Offset(rowcount, 5).Value = Me.Bcpf.Value
    .Offset(rowcount, 6).Value = Me.Brg.Value
    .Offset(rowcount, 7).Value = Format(Now, "dd/mm/yyyy")  
End With
 
Postado : 24/06/2014 1:02 pm
(@adailtonfg)
Posts: 0
New Member
Topic starter
 

Muito obrigado, Resolvido! Esta Funcionando corretamente!

 
Postado : 26/06/2014 6:06 am