- Este tópico contém 4 respostas, 3 utilizadores e foi actualizado pela última vez há 13 anos, 6 meses por Anónimo.
-
AutorArtigos
-
-
16 de Maio de 2011 às 17:14 #941patropiParticipante
boas
venho mais uma vez solicitar ajuda.
não estou sabendo fazer uma validação de dados que além de impedir que seja digitado um valor acima do permitido, que impeça também de digitar nas outras colunas se já tiver sido digitado em uma delas. (são 3 colunas)
a primeira validação eu consigo fazer mas as duas condições juntas eu não consegui.veja a planilha exemplo com explicações.
obrigado! [file name=exemplo1_validao.zip size=7402]https://www.exceler.org/media/kunena/attachments/legacy/files/exemplo1_validao.zip[/file]
Exemplo1_Validao.zip -
16 de Maio de 2011 às 23:14 #1579jorgerodAdministrador
boas, patropi,
tentando responder à tua questão:
a solução poderá passar por duas vias:
1º – validação de dados, como fizeste, para não permitir inserção de valor superior ao pretendido;
2º – código vba, de modo a não permitir que possa inserir-se valor em mais de uma célula.
aqui vai o prototipo de código vba, para ser melhorado, claro:
private sub worksheet_change(byval target as range)
if target.cells.count > 1 then exit sub
if intersect(target, range(“g10:i10”)) is nothing then exit sub
application.enableevents = false
activesheet.unprotect‘se g10 tiver valor fecha h10
if target.column = 7 and isempty(target) = false then
activesheet.cells(target.row, target.column + 1).locked = true
end if‘se g10 tiver valor fecha i10
if target.column = 7 and isempty(target) = false then
activesheet.cells(target.row, target.column + 2).locked = true
end if‘se g10 não tiver valor abre h10
if target.column = 7 and isempty(target) = true then
activesheet.cells(target.row, target.column + 1).locked = false
end if‘se g10 não tiver valor abre i10
if target.column = 7 and isempty(target) = true then
activesheet.cells(target.row, target.column + 2).locked = false
end if‘se h10 tiver valor fecha g10
if target.column = 8 and isempty(target) = false then
activesheet.cells(target.row, target.column – 1).locked = true
end if‘se h10 tiver valor fecha i10
if target.column = 8 and isempty(target) = false then
activesheet.cells(target.row, target.column + 1).locked = true
end if‘se h10 não tiver valor abre g10
if target.column = 8 and isempty(target) = true then
activesheet.cells(target.row, target.column – 1).locked = false
end if‘se h10 não tiver valor abre i10
if target.column = 8 and isempty(target) = true then
activesheet.cells(target.row, target.column + 1).locked = false
end if‘se i10 tiver valor fecha h10
if target.column = 9 and isempty(target) = false then
activesheet.cells(target.row, target.column – 1).locked = true
end if‘se i10 tiver valor fecha g10
if target.column = 9 and isempty(target) = false then
activesheet.cells(target.row, target.column – 2).locked = true
end if‘se i10 não tiver valor abre h10
if target.column = 9 and isempty(target) = true then
activesheet.cells(target.row, target.column – 1).locked = false
end if‘se i10 não tiver valor abre g10
if target.column = 9 and isempty(target) = true then
activesheet.cells(target.row, target.column – 2).locked = false
end ifapplication.enableevents = true
activesheet.protectend sub
fica bem e diz qq coisa, ok?
-
17 de Maio de 2011 às 23:46 #1580patropiParticipante
viva jorge!
funcionou perfeitamente. ficou ótimo.
como seria se fosse para estenter este código até a linha 100.
em vez de ser só nas células g10, h10 e i10 se estendesse até a célula g100, h100 e i100.
muito obrigado!
um abraço.
-
18 de Maio de 2011 às 11:11 #1581AnónimoInactivo
achei interessante o desafio e decidi contribuir com uma outra solução.
esta solução passa por criar três colunas adicionais que no exemplo que anexo estão do lado esquerdo da tabela mas podem estar em qualquer sitio da planilha inclusivamente ocultas.
cada coluna para cada campo da tabela com a seguinte formula, nesta caso para a primeira coluna =ou(g10>$d$9;g10=h10;i10=g10), esta formula vai dar verdadeiro ou falso, vai der verdadeiro conforme se introduza o valor na tabela e esse valor não é compatível com a condição da formula.
na tabela em cada campo validamos com a seguinte formula para a primeira coluna :
=d10verdadeiro
esta validação compara o valor introduzido com os valores introduzidos nas outras células da mesma linha da tabela em função de verdadeiro ou falso das colunas auxiliares criadas.
para testar abra o ficheiro que anexo e introduza na primeira célula da coluna g o valor de 100 e na célula seguinte já pode testar a validação introduzindo também o valor 100, o resultado será o esperado não deixando introduzir 100 porque já existe a célula ao lado.
os limites da condição nº 1 estão indexados ás células d9,e9 e f9, podendo fazê-los variar a seu gosto.
no exemplo que anexo estão programadas 20 linhas, você pode programar as que quiser não convém é abusar muito sobe pena de engordar demasiado o livro, este tipo de solução é bom para poucas linhas.
[file name=exceler___exemplo1_validao_patropi.zip size=7627]https://www.exceler.org/media/kunena/attachments/legacy/files/exceler___exemplo1_validao_patropi.zip[/file]
Exceler___Exemplo1_Validao_Patropi.zip -
18 de Maio de 2011 às 23:42 #942patropiParticipante
boas
vendo a tua solução, eu novamente tentei fazer com validação de dados e consegui com as seguintes fórmulas em g10, h10 e i10, respectivamente, por meio do menu “dados/validação de dados/tipo: personalizado”:
=e(g10=150;h10:i10=””)
=e(h10=150;g10=””;i10=””)
=e(i10=100;g10:h10=””)agradeço a ajuda.
muito obrigado ao jorge pois aprendi com ele um código que vai ser muito útil.
obrigado!
um abraço!
-
-
AutorArtigos
- Tem de iniciar sessão para responder a este tópico.