Página 1 de 1

Código para evitar lançamentos dobrados com 2 critérios

Enviado: 22 Jan 2016 às 09:04
por LuizPitrez
Acabei de me cadastrar nesse forum e antecipadamente gostaria de agradecer pela ajuda desta minha dificuldade.
De uns meses para cá me interessei mais pelas funções do excel, passei a pesquisar e aplicar algumas dessas funções que como usuário de muitos anos não sabia que existiam, isso me atraiu para o desenvolvimento de macros e outros recursos, comecei com umas bem simples e fui complicando, e já estou atualmente parado a dias em um código que não consigo localizar solução, conforme a seguir:
Criei um formulário de controle de algumas operações administrativas/financeiras e precisava que os dados fossem inibidos de lançamento (por duplicidade) quando um conjunto de informações relacionadas entre elas fossem digitadas, a principio seria "O código do cliente" e a "data de competência do lançamento" gostaria de saber como evitar o cadastro quando houver a coincidência desses 2 itens combinados, como posso fazer isso.
Grato

Código para evitar lançamentos dobrados com 2 critérios

Enviado: 22 Jan 2016 às 09:25
por Parkeless
Olá Luiz!

Se fosse só um critério, dava para fazer com uma validação simples... mas, com mais critérios, bom,

Você pode criar uma macro Worksheet_Change, ou seja, que rode toda vez que um dado seja modificado.

Esse código verificaria todas as células preenchidas e, se a informação se repetisse em "x" critérios, acusa erro e apaga o conteúdo da linha.

Se você não souber fazer, posta um modelo, fica mais fácil de bolar alguma coisa...

Re: Código para evitar lançamentos dobrados com 2 critérios

Enviado: 22 Jan 2016 às 09:34
por laennder
Fiz utilizando o recurso de validação de dados do Excel. Usei a seguinte fórmula.
Código: Selecionar todos
=SOMARPRODUTO(--((codigo&"-"&competencia)=($A2&"-"&$B2)))<2
onde codigo e competencia são os intervalos das colunas onde serão lançados os dados. Utilizei o gerenciador de nomes para definir.

Se precisar de mais critérios, é só aumentar as concatenações dentro dos parênteses

Segue a planilha em anexo.

Re: Código para evitar lançamentos dobrados com 2 critérios

Enviado: 22 Jan 2016 às 22:17
por LuizPitrez
Agradeço Parkeless, mas não consegui criar essa macro que você propôs, minhas orientações não foram o suficiente para que você pudesse responder de modo que eu conseguisse resolver a questão, eu tinha esse código:

'Código para evitar lançamento em duplicidade (competencia e codigo cliente)
If shtCadastro.Range("Cad_1") = shtDados.Cells(linha, "B") Or shtCadastro.Range("Cad_2") = shtDados.Cells(linha, "C") Then
MsgBox "Já Existe Lançamento Nesta Competência Para Este Cliente", vbInformation, "Verifique a Competência do Lançamento"
Call Cancelar
Range("Cad_0").Select
Exit Sub
End If

Ele só está funcionando para primeira linha e não deixa cadastrar, as demais linhas cadastram sem restrição alguma, não sei mais o que tentar.

Grato pela mão e abraço

Re: Código para evitar lançamentos dobrados com 2 critérios

Enviado: 22 Jan 2016 às 22:21
por LuizPitrez
Caro Laeender,

Quando vi sua resposta achei que tinha matado a questão, mas não funcionou, talvez tenha feito algo errado (o que não seria de grande espanto), acima na resposta para o Parkeless eu copie o código até onde consegui chegar, se você tiver outra sugestão ou puder "fazer um desenho" para que eu entenda, agradeço muito.
Abraço

Código para evitar lançamentos dobrados com 2 critérios

Enviado: 22 Jan 2016 às 22:33
por laennder
Eu baixei a planilha que eu enviei, e qnd eu tento fazer um lançamento repetido (codigo e competência) aparece uma mensagem de erro da validação. Não é isso?

Então eu entendi errado o que você quer.

O que você digitou na colunas, que permitiu o lançamento?

Código para evitar lançamentos dobrados com 2 critérios

Enviado: 23 Jan 2016 às 10:54
por LuizPitrez
Olá Laennder
Sim é isso, vi sua planilha de demonstração e realmente quando tentamos fazer um lançamento que já existe é dado a mensagem de erro, mas tenho 2 planilhas uma de lançamento (que chamei de shtCadastro e outra que é o BD que chamei de shtDados, tentei aplicar a validação primeiro em uma depois na outra e não funcionou, e possível que não esteja executando o procedimento corretamente.
Mas com base no código que estava usando para efetuar essa ação mencionado anteriormente em que ela executa com êxito apenas para primeira linha, tem como otimizar para as demais da Tabela de Dados? Informo que Cad_0 e outras são células que nomeie e estas são da planilha de cadastro (entrada de dados).
Obrigado pela ajuda

Código para evitar lançamentos dobrados com 2 critérios

Enviado: 26 Jan 2016 às 13:09
por LuizPitrez
Agradeço a ajuda, mas acabei resolvendo a questão, quando da minha ultima argumentação, me ocorreu a resposta que agora me parece obvia, se o código conseguia ler a primeira linha corretamente, faltava apenas o incremento : linha = linha + 1, usando isso e separando as condições a operação está funcionando bem.
Mais uma vez muito obrigado a vocês.