Ir ao conteúdo
  • Cadastre-se

Excel VBA EXCEL - Listbox condicionada


Ir à solução Resolvido por Basole,

Posts recomendados

Olá!
Preciso de uma grande ajuda.
Nem sei por onde começo. Já pesquisei e, infelizmente, não consegui chegar no que preciso.

 

Tenho duas listbox. Será que é possível quando eu clicar em algum item da primeira lista, aparecer somente os itens relacionados a este item na segunda lista?

Por exemplo:

Tenho 5 grupos: A,B,C,D,E

Cada grupo tem alguns itens relacionados a ele. Eu queria que quando clicasse em algum item do grupo A, por exemplo, aparecesse na listbox2 somente os itens desse grupo.

Não sei se deu pra entender. No arquivo anexo tem uma aba chamada "sugestão para condicional" que já tem os grupos relacionados com cada item.

 

Muito obrigada, caso alguém consiga me dar uma luz.

CADASTRO.zip

Link para o comentário
Compartilhar em outros sites

  • Solução

@Luciana Goes veja a sugestão: 

 

Private Sub ListBox1_Click()
    Dim rng         As Range
    Dim r           As Range
    Dim shSg        As Worksheet

    Set shSg = ThisWorkbook.Worksheets("SUGESTÃO PARA CONDICIONAL")
    Set rng = shSg.Range("A1").Resize(1, shSg.Cells(1, Columns.Count).End(xlToLeft).Column).Find(Me.ListBox1.Text, _
            LookIn:=xlValues, lookat:=xlWhole)
    If Not rng Is Nothing Then
        Set r = shSg.Cells(2, rng.Column).Resize(shSg.Cells(Rows.Count, rng.Column).End(xlUp).Row, _
                rng.Column)
        With ListBox2
            .Clear
            .RowSource = ""
            .List = r.Value
        End With

    End If
End Sub

 

O codigo atende de forma dinamica, ou seja se acrescentar mais dados em colunas e/ou linhas não precisa ser ajustado.

 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

@Luciana Goes Já está resolvido, mas como eu tinha começado vou postar o que fiz,

 

Function AreaGrupoMateriais(Codigo As String) As String
    Dim Plan    As Worksheet
    
    Set Plan = ThisWorkbook.Sheets("SUGESTÃO PARA CONDICIONAL")
    
    If WorksheetFunction.CountIf(Plan.[1:1], Codigo) <> 0 Then
        Dim Coluna  As Integer
        Dim Linha   As Long
        Coluna = WorksheetFunction.Match(Codigo, Plan.[1:1], 0)
        Linha = WorksheetFunction.CountA(Plan.Columns(Coluna)) - 1
        If Linha > 0 Then
            AreaGrupoMateriais = Plan.Cells(2, Coluna).Resize(Linha).Address
            AreaGrupoMateriais = "'" & Plan.Name & "'!" & AreaGrupoMateriais
        End If
    End If
End Function

Private Sub ListBox1_Click()
    ListBox2.RowSource = AreaGrupoMateriais(ListBox1.Value)
End Sub

 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!