Notifications
Clear all

LISTA CONDICIONAL

13 Posts
5 Usuários
0 Reactions
2,117 Visualizações
(@gfsouza86)
Posts: 0
Trusted Member
Topic starter
 

Boa tarde galera tudo bem?
Como faço para ao preencher a minha txtdepartamento na txtproduto aparecer somente os produtos referentes a esse departamento?
Por exemplo:
Coloco a letra A na txtdepartamento e na txtproduto aparece somente os itens que começam com a letra A

Ou seria mais facil realizar isso com a lista suspensa?
Se for mais facil como fazer ela ser condicionada tambem?

G@b®!eL

Se a resposta foi útil para você, por gentileza, clique na mãozinha ao lado direito da sua tela no canto superior.

 
Postado : 13/03/2018 2:57 pm
(@srobles)
Posts: 231
Estimable Member
 

gfsouza86,

Veja se é isso o que busca amigo.

Abs

Espero ter ajudado.

Abs.

Saulo Robles

 
Postado : 13/03/2018 6:43 pm
(@mprudencio)
Posts: 2749
Famed Member
 

Não entendi vc vai preencher a textbox ou escolher na combobox?

Sugestão Crie listas em separado uma para cada depertamento assim vc pode carregar a combobox1 com os departamentos e o na combobox2 vai carregar os produtos de acordo com o departamento.

Marcelo Prudencio
Microsoft Excel Brasil no Facebook

"Começar já é a metade do caminho."
Autor Desconhecido

Simplifica que simples fica.
Nicole Tomazella.

"O Simples é Sempre Melhor Que o Complicado"
Jorge Paulo Lemann.

 
Postado : 13/03/2018 6:58 pm
(@gfsouza86)
Posts: 0
Trusted Member
Topic starter
 

srolbes seria quase isso
funcionou perfeitamente seu exemplo, porem nao gostaria que aparecesse as duas opções de uma unica vez
MPrudencio vou tentar explicar melhor abaixo

Gostaria que ao digitar na txtdepartamento na listbox aparecesse somente as opções referentes a esse departamento

G@b®!eL

Se a resposta foi útil para você, por gentileza, clique na mãozinha ao lado direito da sua tela no canto superior.

 
Postado : 14/03/2018 5:41 am
gfranco
(@wzxnet7)
Posts: 653
Honorable Member
 

Boa tarde.
Veja se o que fiz te ajuda.

Resposta útil? Clique na mãozinha ao lado do botão Citar.

 
Postado : 14/03/2018 2:31 pm
gfranco
(@wzxnet7)
Posts: 653
Honorable Member
 

Boa tarde.
Respondendo à MP enviada pelo autor do tópico onde solicitou a identação do código existente na minha sugestão:

Dim matrizPrincipal() As Variant
Dim matrizGeral() As Variant

'As variáveis acima (declaradas fora dos procedimentos) são globais e permanecem ativas _
durante todo o processo.....


Private Sub txtdepartamento_AfterUpdate()

Dim matrizFiltrada() As Variant 'declara uma variável de matriz para receber os dados filtados
Dim tamanho As Long, linmatriz As Long 'variáveis de controle
Dim procurado As String 'variável de texto para receber o item procurado
Dim i As Long ' variável de Loop

tamanho = 0 'iniciando a variável em zero
linmatriz = 0 'iniciando a variável em zero
procurado = VBA.UCase(Me.txtdepartamento.Text) 'setando a variável no item procurado
Me.cboProduto.Value = "" 'limpando a combobox
If VBA.Len(VBA.Trim(procurado)) = 0 Then ' se a variável for vazia (para o caso de apagar o textbox) todos os itens são _
mostrados na combobox
Me.cboProduto.List = matrizGeral
Exit Sub
End If


    For i = 1 To UBound(matrizPrincipal, 1) 'eu geralmente trabalho com 2 loops (um para definir o tamanho do array e outro para _
    preecher o array
    
        If VBA.UCase(matrizPrincipal(i, 1)) = procurado Then
            tamanho = tamanho + 1
        End If
    
    Next i


If tamanho = 0 Then 'se o que for digitado não corresponder à nenhum dos departamentos, limpa a combo e deixa ela sem valores
Me.cboProduto.Clear
Exit Sub
End If


ReDim matrizFiltrada(1 To tamanho) ' mas se passar pelo passo acima (significa que encontrou pelo menos 01 departamento), então preenche a matriz....

For i = 1 To UBound(matrizPrincipal, 1) 'repetindo o Loop... mas agora preenchendo o array.....
    
        If VBA.UCase(matrizPrincipal(i, 1)) = procurado Then ' se os itens baterem, incrementa a variável linha de matriz e coloca nela _
        o item....
            linmatriz = linmatriz + 1
            
           matrizFiltrada(linmatriz) = matrizPrincipal(i, 2)
            
            
        End If
    
    Next i




Me.cboProduto.List = matrizFiltrada 'descarrega a matriz filtrada na propriedade "List" da combobox....






End Sub



Private Sub UserForm_Activate()

Dim ulinha As Long 'variável de controle da última linha

Dim i As Long
ulinha = WsBase.Cells(WsBase.Rows.Count, 2).End(3).Row 'calculando a variável....

If ulinha < 3 Then Exit Sub ' impondo condição para o menor valor admissível....

matrizPrincipal = WsBase.Range("b3:c" & ulinha).Value ' se passar pelo passo anterior... carrega a matriz....

ReDim matrizGeral(1 To UBound(matrizPrincipal)) ' redimensiona a matriz que receberá os itens....

    For i = LBound(matrizPrincipal, 1) To UBound(matrizPrincipal, 1) ' carrega a matriz com os dados....
        matrizGeral(i) = matrizPrincipal(i, 2)
    
    Next i


Me.cboProduto.List = matrizGeral

End Sub

Resposta útil? Clique na mãozinha ao lado do botão Citar.

 
Postado : 15/03/2018 1:27 pm
(@gfsouza86)
Posts: 0
Trusted Member
Topic starter
 

Boa tarde
Obrigado pela resposta wzxnet7 porem nao entendi aonde ele vai buscar os dados

Por exemplo

Meus dados estao na coluna H2 para baixo e quero mostrar o que esta em I2 para baixo

G@b®!eL

Se a resposta foi útil para você, por gentileza, clique na mãozinha ao lado direito da sua tela no canto superior.

 
Postado : 16/03/2018 9:36 am
gfranco
(@wzxnet7)
Posts: 653
Honorable Member
 

Boa tarde.
Os dados são buscados na matriz que é carregada quando o userform é ativado.

Nesta aula o tema de arrays é abordado...

https://www.youtube.com/watch?v=rFXaGqtHalI&t=2395s

Resposta útil? Clique na mãozinha ao lado do botão Citar.

 
Postado : 16/03/2018 9:41 am
(@gfsouza86)
Posts: 0
Trusted Member
Topic starter
 

Boa noite
Desculpe minha ignorância.... :cry:

Assisti o video porem nao consegui alterar aonde ele busca as informações! :|

Poderia me ajudar?

G@b®!eL

Se a resposta foi útil para você, por gentileza, clique na mãozinha ao lado direito da sua tela no canto superior.

 
Postado : 16/03/2018 9:42 pm
(@klarc28)
Posts: 971
Prominent Member
 

Alterei esta linha:

matrizPrincipal = WsBase.Range("h2:i" & ulinha).Value

E esta:

ulinha = WsBase.Cells(WsBase.Rows.Count, 8).End(3).Row

O número 8 é referência à coluna H.

Confira o anexo:

 
Postado : 17/03/2018 6:25 pm
(@gfsouza86)
Posts: 0
Trusted Member
Topic starter
 

Bom dia
klarc28 entendi as alterações, porem fui fazer um teste inserindo uma coluna e alterei a linha de código abaixo para:

matrizPrincipal = WsBase.Range("h2:j" & ulinha).Value

porem não funcionou?
Porque?

Outra pergunta

E se eu quisesse exibir o valor referente a letra em uma txt como faria?

G@b®!eL

Se a resposta foi útil para você, por gentileza, clique na mãozinha ao lado direito da sua tela no canto superior.

 
Postado : 19/03/2018 8:07 am
(@klarc28)
Posts: 971
Prominent Member
 

ANEXOS

 
Postado : 19/03/2018 9:40 am
(@gfsouza86)
Posts: 0
Trusted Member
Topic starter
 

Muito obrigado klarc28

G@b®!eL

Se a resposta foi útil para você, por gentileza, clique na mãozinha ao lado direito da sua tela no canto superior.

 
Postado : 20/03/2018 9:02 am