Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
  • Avatar do usuário
  • Avatar do usuário
#6748
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
#6749
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...
#6750
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.
Você não está autorizado a ver ou baixar esse anexo.
#6803
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
#6804
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
#6805
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?
#6810
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
#6932
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.
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord