Validar e Conferir ...
 
Notifications
Clear all

Validar e Conferir CPF ou CNPJ

15 Posts
1 Usuários
0 Reactions
3,000 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Pessoal,
Uso a função abaixo para máscara de CPF ou CNPJ, no formulário frmLocatario:

Private Sub txtCPFCNPJ_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'formata cnpj ou cpf
'digite sem pontos sem barras sem traços somente números

txtCPFCNPJ.MaxLength = 14
If Len(txtCPFCNPJ) = 11 Then
txtCPFCNPJ = Format(txtCPFCNPJ, "000"".""000"".""000-00")
Else
txtCPFCNPJ = Format(txtCPFCNPJ, "00"".""000"".""000""/""0000-00")
End If
End Sub

Gostaria de aproveitar a função para:

a) Impedir a Impostação de CPF ou CNPJ repetidos, emitindo MsgBox “Dado já cadastrado”;
b) Conferir o CPF ou CNPJ, emitindo MsgBox “Dígito não confere”.

Os dados ficam na Coluna F da Planilha Locatario, a partir da célula F2.

Obs: Não consegui adaptar post similares que encontrei no fórum.

Grato,
Pedro

 
Postado : 18/04/2014 11:27 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa tarde!!

Tente algo.

If WorksheetFunction.CountIf(ws.Range("A2", ws.Cells(iRow, 1)), Me.txtCPFCNPJ.Value) > 0 Then
        MsgBox "Esse dado já contém na base", vbCritical
        Exit Sub
    End If
 
Postado : 18/04/2014 1:13 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Alexandre,
Não consegui.
Segue anexo.
Ao incluir Novo registro, o campo CPF/CNPJ aceita dados repetidos.
Além disso, gostaria de fazer a conferência dos dígitos.

Grato,
Pedro

 
Postado : 18/04/2014 1:59 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Chegou a ver estes tópicos se ajudam ?

Validar ou mostrar dígitos
viewtopic.php?f=21&t=2791

Verificar CPF - Planilha Pronta
viewtopic.php?f=21&t=2407

Se utilizar a pesquisa do Forum pelo texto CPF - CNPJ encontrara vários outros tópicos.

[]s

 
Postado : 18/04/2014 7:34 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Mauro,
Obrigado por ajudar.
Como eu disse, não consegui adaptar os posts relacionados a Cpf e Cnpj em minha TextBox.
Além disso, também não consegui Impedir a Impostação de CPF ou CNPJ repetidos, emitindo MsgBox “Dado já cadastrado”;
Aguardo ajuda para o modelo anexo, para:
a) Impedir a Impostação de CPF ou CNPJ repetidos, emitindo MsgBox “Dado já cadastrado”;
b) Conferir o CPF ou CNPJ, emitindo MsgBox “Dígito não confere”.
Grato,
Pedro

 
Postado : 18/04/2014 8:30 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Segue uma possibilidade, veja se auxilia

 
Postado : 19/04/2014 7:23 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Reinaldo, Mil vezes obrigado.
A validação de CPF e CNPJ tá belezinha.

Percebi 2 detalhes que não entendi:

- Ao inserir um registro, ele foi para a linha 198. Por que Não Preencheu a primeira Linha Vazia (que é a linha 2)?

- Tá aceitando CPF e CNPJ repetidos, apesar do código que você colocou. Por que?

Pedro

 
Postado : 19/04/2014 8:20 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Pedro para que o lançamento se de na linha correta, você tem de Reexibir todas as colunas, depois teclar CTRL+SHIT+END será selecionada todas as celulas que o excel está enxergando como preenchidas apesar de estarem vazias, isto se dá pelo fato destas celulas ja terem em algum momento terem recebidos alguma informação e foi somente deletado os valores mantendo-se a formatação, e para o excel é como se estas scelulas tivessem algum dado.
Apos pressionar as teclas, acione o menu Editar / Limpar / Tudo, Salve, e tecle novamente CTRL+SHIT+END e verá que o cursor estara na primeira linha.

Não cheguei a adaptar o seu modelo, estou de saida, mas de uma olhada no modelo anexo se ajuda, e se consegue fazer as adaptações.
Uma obs, o ideal para se evitar de termos mais rotinas, é lançarmos sempre o CPF sem os pontos e barra, fica mais fácil para conferencia e verificação.

Verifica existência e valida CPF

Mais tarde se der procuro adaptar o seu modelo.

[]s

 
Postado : 19/04/2014 8:32 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

A sua planilha, apesar de não ter registros, tem um usedrange (range utilizada) que vai até a linha 198, isso acontece quando se inclui/exclui vários registros, e o Excel mantem "uma lembrança" dessa utilização. Então é necessário deletar essas linhas e salvar a planilha, só assim se atualiza erra range.
Quanto a comparação, como não testei em sua planilha, "pensei" que seria gravado em arquivo o numero sem os pontos; o ideal seria sem, porem como está gravando assim, então mova a comparação para depois da validação do digito.
Seria algo assim:

Private Sub txtCPFCNPJ_Exit(ByVal Cancel As MSForms.ReturnBoolean)
txtCPFCNPJ.MaxLength = 14
Dim sTem As Variant
        
    If Len(txtCPFCNPJ) = 11 Then
        If ValidarCPF(txtCPFCNPJ) = True Then
            txtCPFCNPJ = Format(txtCPFCNPJ, "000"".""000"".""000-00")
        Else
            MsgBox "CPF informado está incorreto"
        End If
    Else
        If ValidarCNPJ(txtCPFCNPJ) = True Then
            txtCPFCNPJ = Format(txtCPFCNPJ, "00"".""000"".""000""/""0000-00")
        Else
            MsgBox "CNPJ informado está incorreto"
        End If
    End If
    sTem = Application.Match(txtCPFCNPJ, Sheets("Locatario").Range("F2:F1000"), 0)
    If Not IsError(sTem) Then
        MsgBox "CPFCNPJ já cadstrado"
    End If
End Sub
 
Postado : 19/04/2014 9:16 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Mauro,
Valeu as dicas do Ctrl+Shift+End e a Limpeza.
Obrigado.

Reinaldo,
Agora tá show de bola.
Para finalizar o tópico, gostaria que o cursor voltasse quando detectado dado já cadastrado
ou quando o cpf ou cnpj estiver inválido.
Tentei o óbvio:
txtCPFCNPJ.Value = ""
txtCPFCNPJ.SetFocus

Mas o cursor vai para a próxima TextBox.
Por que?

 
Postado : 19/04/2014 9:59 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Pessoal,
Graças ao Professor Reinaldo, tá quase finalizando o projeto.
Já fiz diversas tentativas e não consegui.
Por mais incrível que pareça, quando False para Validação do CPF/CNPJ ou
quando CPF/CNPJ já está Cadastrado, o cursor não pára na txtCPFCNPJ.
Conto com ajuda.
Segue o anexo.
Grato,
Pedro

 
Postado : 19/04/2014 5:00 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

.
Pessoal,
Nos casos de CPF/CNPJ incorretos ou Já Cadastrados, o cursor deve parar na txtCPFCNPJ.text.
Como o SetFocus não funcionou, será que existe algum outro comando para focar o cursor?

 
Postado : 22/04/2014 4:29 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

.
Pessoal,
Nos casos de CPF/CNPJ incorretos ou Já Cadastrados, o cursor deve parar na txtCPFCNPJ.text.
Como o SetFocus não funcionou, será que existe algum outro comando para focar o cursor?

A propriedade SetFocus perde a funcionalidade dependendo de como está sendo utilizada, e isto devido aos Eventos que estiver sendo acionados.

Veja alguns tópicos localizados utilizando a pesquisa do forum sobre esta questão :
Set.Focus perde o foco [Resolvido]
viewtopic.php?f=10&t=5292

Problemas com SetFocus [Resolvido]
viewtopic.php?f=10&t=8560

selecionar um textbox especifico
viewtopic.php?p=25995

 
Postado : 22/04/2014 5:15 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Mauro,
Grato pelas dicas.
Mas eu resolvi com cancel = true.

Agora o tá dando o erro: Erro em tempo de execução '13': Tipos incompatíveis. FIM ou DEPURAR.
Ocorre ao fechar o formulário.
Ao depurar, mostra a linha: total = total + Mid(Numero, i, 1) * fator, da função calculadigito.

Espero ajuda,
Pedro

 
Postado : 23/04/2014 8:27 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Recebi a sugestão de Rafael Monteiro, que funcionou:

On Error GoTo Tratar_erro_fechar:
'A Rotina deve estar aqui
Tratar_erro_fechar:
If Err.Number = 13 Then
MsgBox "O foco está em outra planilha"
Exit Sub
End If

 
Postado : 28/04/2014 6:41 pm