Página 1 de 1

Lista Drop Down, Rango dinâmico, com Find to add a lista

Enviado: 08 Mar 2019 às 17:56
por jaimerodrigues
Ola Pessoal, estou com um erro que não consigo resolver.

Tenho uma lista drop down (nomes) que vem de uma lista dinâmica de outra folha.
Esta lista dinamica tem um nome e é criada a partir de um filtro avancado e ordenada alfabeticamente.

Ate aqui tudo bem a lista funciona na segunda tabela.
Mas quero associar o comando procurar "Find" para procurar nessa lista dinamica o "nome"
Caso encontre ele ja fica registado.
caso o nome nao esteja na lista ele adiciona a lista..

Segue em anexo um bocado do código vba:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
Dim RequestRng, FoundRequest As Range
Dim Resp As Integer
Dim ItemRow, ItemCol, FirstAvailRow As Long


If Not Intersect(Target, Range("D4:S4")) Is Nothing And Range("B4").Value = False And Range("B5").Value = False Then
ItemRow = Range("B3").Value
ItemCol = Cells(11, Target.Column).Value
Cells(ItemRow, ItemCol).Value = Target.Value
End If

FirstAvailRow = Folha4.Range("F9999").End(xlUp).Row + 1 'Primeira linha disponivel
If Not Intersect(Target, Folha9.Range("I4")) Is Nothing And Folha9.Range("B5").Value = False Then
If Target.Value <> Empty Then
On Error Resume Next 'Previne erro quando nao encontra a lista Request
Set RequestRng = Folha4.Range("Request")
Set FoundRequest = RequestList.Find(What:=Target.Value, LookAt:=xlWhole, LookIn:=xlValues)
If FoundRequest Is Nothing _
Then Resp = MsgBox(Target.Value & " Is Not Currently a Request." & vbCrLf & "Would you like to add it now?", vbYesNo, "Request Not Found")
If Resp = vbYes Then Folha4.Range("F" & FirstAvailRow).Value = Target.Value
End If
GetRequest
End If
End Sub

Não consigo saber se o foundrequest não esta na lista Dropdown
Na tabela 9 ao mudar para um dos elementos da lista ele muda.
mas se escrevo um que nao esteja na lista da o seguinte erro:
Este valor não corresponde às restrições de validação de dados definidas para esta célula.

Re: Lista Drop Down, Rango dinâmico, com Find to add a lista

Enviado: 09 Mar 2019 às 09:15
por osvaldomp
Sugestão: disponibilize uma amostra do seu arquivo Excel com o código completo instalado.
Informe na própria planilha em qual intervalo está a lista dinâmica que serve de base para a Validação, informe o intervalo em que está aplicada a Validação e informe onde você está tentando inserir o novo nome.

Re: Lista Drop Down, Rango dinâmico, com Find to add a lista

Enviado: 10 Mar 2019 às 18:56
por jaimerodrigues
Boa noite, desde ja agradeço pela resposta, segue em anexo o ficheiro de excell com as tabelas e codigos.

É a primeira vez que estou entrar neste mundo do VBA, tenho algumas ideias que estou atentar por em pratica.
Pelo que este projecto ainda está no inicio. :)
Obrigado

Atentamente
Jaime Rodrigues

Re: Lista Drop Down, Rango dinâmico, com Find to add a lista

Enviado: 10 Mar 2019 às 19:22
por osvaldomp
Não encontrei nas planilhas do seu arquivo qualquer esclarecimento quanto às dúvidas que coloquei na minha mensagem anterior. :?:

Lista Drop Down, Rango dinâmico, com Find to add a lista

Enviado: 10 Mar 2019 às 19:27
por jaimerodrigues
PS:
Folha "Listas" coluna F (Lista Base)
Folha "Listas" coluna H (Lista Dinamica ordenada)
Folha "Embarcaciones" célula i4 (lista dropdown) ao inserir um nome que não esteja na lista coluna F deveria perguntar se o quero adicionar..

Obrigado

Re: Lista Drop Down, Rango dinâmico, com Find to add a lista

Enviado: 11 Mar 2019 às 12:10
por osvaldomp
jaimerodrigues escreveu: Folha "Embarcaciones" célula i4 (lista dropdown) ao inserir um nome que não esteja na lista coluna F deveria perguntar se o quero adicionar..

... mas se escrevo um que nao esteja na lista da o seguinte erro:
Este valor não corresponde às restrições de validação de dados definidas para esta célula.
Para fazer o que você quer, ao invés de escrever um novo nome diretamente em I4 faça um Copiar/Colar Valores, assim você poderá burlar a Validação aplicada em I4.

Escreva o novo nome em uma célula vazia, por exemplo em B15 / com B15 selecionada ~~~> Copiar / selecione I4 ~~~> Colar Valores.

Assim os códigos já existentes irão acrescentar o novo nome à lista que serve de base para a Validação de I4.

Lista Drop Down, Rango dinâmico, com Find to add a lista

Enviado: 11 Mar 2019 às 16:23
por jaimerodrigues
Olá Osvaldo, desde ja obrigado pela sua resposta.
Por acaso não tinha sequer tentado essa hipotese.
Experimentei e desse jeito funciona. Mas a ideia não seria essa. porque tenho de andar a colar e copiar. Quero tornar tudo automático de modo a que ao clicar em nova tarefa ele introduza os dados principais e eu so tenha de completar o vazio.

Existe alguma forma de contornar a validação? tera alguma coisa a ver com a ordem de execução da macro.?
Pois se eu introduzir um nome na coluna F da folha Listas. Só me aparece em I4 depois de por exemplo ter executado um outro nome da lista e alterado os valores na linha correspondente. Espero ter-me explicado bem.

Re: Lista Drop Down, Rango dinâmico, com Find to add a lista

Enviado: 11 Mar 2019 às 16:47
por osvaldomp
jaimerodrigues escreveu:Quero tornar tudo automático ...
Veja uma ideia abaixo.

Existe alguma forma de contornar a validação?
Eu só conheço via copiar/colar.
Já que obrigatoriamente o novo nome precisará ser inserido em alguma célula, uma ideia seria inseri-lo em uma célula vazia da planilha Embarcaciones, por exemplo em A14, e via um código Worksheet_Change capturar o nome inserido, acrescentá-lo nas listas das colunas F e H da planilha Listas, ordenar a lista resultante em H e por último inseri-lo em I4 e limpar A14.

Lista Drop Down, Rango dinâmico, com Find to add a lista

Enviado: 11 Mar 2019 às 17:13
por jaimerodrigues
Obrigado Malta, Já descobri. :)

Apaguei sem querer o código que tinha no woorkbook geral, quando queria utilizar a tecla Tab ou enter para saltar entre as celulas que defini.

PS: entretanto alterei o nome da folha para embarcaciones

Option Explicit

Private Sub Workbook_Activate()
If ActiveSheet.Name = "Embarcaciones" Then SetOnkey (True)
End Sub

Private Sub Workbook_Deactivate()
SetOnkey (False)
End Sub

Private Sub Workbook_Open()

End Sub