none
Filtrar Grupos e subgrupos excel/vba RRS feed

  • Discussão Geral

  • Boa Tarde Pessoal

    Preciso de uma ajuda com Excel + vba.

    Estou montando uma planilha de orçamentos na minha área (Automação Industrial) onde possuo um banco de dados e em outra aba monto o escopo do fornecimento cm as quantidades dos itens e carrego os valores e demais informações dessa base de dados que esta em outra aba para Formar o preço de custo e depois o preço de venda ao cliente com todas as margens.

    O que travei foi justamente em fazer uma interface para o usuário filtrar essa base que será grande e sofrerá sempre modificações, podendo criar/editar/excluir grupos e subgrupos.

    Possuo uma base de Dados com algo dese tipo:

    -----------------------------------------------------------

    Item         |       Grupo         |        Subgrupo

    Robo01     |     Grupo1         |       Subgrupo1

    Robo02     |     Grupo1         |       Subgrupo2

    Robo03     |     Grupo1         |       Subgrupo3

    Robo04     |     Grupo2         |       Subgrupo1

    Robo05     |     Grupo3         |       Subgrupo20

    Robo06     |     Grupo2         |       Subgrupo4

    Robo07     |     Grupo1         |       Subgrupo10

    -------------------------------------------------------

    e por ai vai...

    1° Encrenca - Estou montando um form onde tenho filtros que devem listar todos os grupos e subgrupos sem repetições 

    2° Encrenca - Conforme o usuário seleciona o grupo  o filtro de subgrupo tem que atualizar todos os subgrupos apenas do grupo escolhido.

    3° Encrenca -  Conforme o usuário vai selecionando os filtros um listbox ou algo do tipo iria preenchendo os Items conforme os filtros.

    Obs. Os grupos e subgrupos são dinâmicos, então não consigo montar uma estrutura fechada. Teria que verificar sempre na Base de Dados  os grupos e subgrupos e Items.

    Alguém poderia me dar uma ideia de como posso fazer iso?

    Obrigado



    • Editado TManzano sexta-feira, 6 de abril de 2018 13:43
    quinta-feira, 5 de abril de 2018 17:27

Todas as Respostas

  • Talvez possas receber ajuda se pelo menos colocares o problema de forma que alguém entenda os teus propósitos.

    M_A_S_L

    sexta-feira, 6 de abril de 2018 00:34
  • Bom Dia.

    Estou montando uma planilha de orçamentos na minha área (Automação Industrial) onde possuo um banco de dados e em outra aba monto o escopo do fornecimento cm as quantidades dos itens e carrego os valores e demais informações dessa base de dados que esta em outra aba para Formar o preço de custo e depois o preço de venda ao cliente com todas as margens.

    O que travei foi justamente em como fazer o filtro de grupo e subgrupo dessa base que será grande e sofrerá sempre modificações, podendo criar/editar/excluir grupos e subgrupos.



    • Editado TManzano sexta-feira, 6 de abril de 2018 14:53
    sexta-feira, 6 de abril de 2018 13:42
  • Bom Dia.

    ...

    O que travei foi justamente em como fazer o filtro de grupo e subgrupo dessa base que será grande e sofrerá sempre modificações, podendo criar/editar/excluir grupos e subgrupos.



    E o que travou uma eventual ajuda, é provávelmente o facto de ninguém ter percebido o que pretendes com o filtro de Grupos e Subgrupos.


    M_A_S_L

    sexta-feira, 6 de abril de 2018 22:36
  • Boa Tarde MASL.

    O que estou tentando dizer é que terei uma lista imensa que teria algumas categorias (que chamei de grupos) e desejo em outra aba dar a opção do usuário filtrar isso, por exemplo terei um banco de dados da seguinte forma:

    ############### Base de Dados ################

    ID              Item                               | Grupo                       | Subgrupo

     01             Robô 01                            Robôs

     02             Painel de Robô                   Robôs                         Paineis de Robôs

     03             Pinça de Solda Pequena      Solda                          Pinças

     04             Pinça de Solda Média          Solda                          Pinças

     05             Pinça de Solda Grande        Solda                          Pinças

     06             Comando de Solda AC         Solda                         Comando de Solda

     07             Comando de Solda DC         Solda                         Comando de Solda

    ##########################################

    Em outra aba o usuario tem que inserir alguns itens dessa tabela, porem por ela ser muito grande imaginei colocar uma opçao de filtro que conforme ele vai selecionando ela vai filtrando e preenchendo uma tabla com os itens desse filtro. por exemplo:

    Filtro Item                           | Filtro Grupo                                                       | Filtro subgrupo

    ___________                        se o operador selecionar Solda nesse grupo

    irá exibir numa tabela apenas os itens daquele grupo

    ID              Item                               | Grupo                       | Subgrupo

     03             Pinça de Solda Pequena      Solda                          Pinças

     04             Pinça de Solda Média          Solda                          Pinças

     05             Pinça de Solda Grande        Solda                          Pinças

     06             Comando de Solda AC         Solda                         Comando de Solda

     07             Comando de Solda DC         Solda                         Comando de Solda

    e se selecionar Pinça no filtro subgrupo apareceria apenas:

    D              Item                               | Grupo                       | Subgrupo

     03             Pinça de Solda Pequena      Solda                          Pinças

     04             Pinça de Solda Média          Solda                          Pinças

     05             Pinça de Solda Grande        Solda                          Pinças

    Obrigado


    • Editado TManzano terça-feira, 10 de abril de 2018 17:25
    terça-feira, 10 de abril de 2018 17:20
  • Então é assim.

    Montei uma folha com parte do teu exemplo (Fig. 1)

    Figura 1:


    Estruturei um Userform de exemplo conforme a Figura 2.

    Figura 2:


    Depois de digitar na Caixa de pesquisa o termo Solda, obtem-se o resultado da Figura 3. Lista grupos e subgrupos do item que digitares na Caixa de texto.

    Figura 3:


    Selecionando o grupo Solda no Listbox1, são exibidos no listbox2 as informações do artigo e no listbox3 os subgrupos permanecem listados. Selecionando o subgrupo Pinças, são mostradas as informações ficando o Userform conforme mostra a Figura 4.

    Figura 4:


    Os nomes dos Grupos e Subgrupos são carragados tanto nos Listbox 1 e 3, como nas Combobox 1 e 2.

    Analisa das duas formas e opta pela que te for mais interessante.

    Procede às alterações necessárias ao código que segue abaixo e não esqueças que a caixa de pesquisa responde exatamente à grafia dos grupos. Se a primeira letra for Maiúscula é assim que a pesquisa tem que ser feita. Qualquer grupo que inicie em minúsculas à partida é ignorado.

    Segue o código para tua análise.

    Dim mwksDados As Excel.Worksheet
    Dim mclcNomes As VBA.Collection
    Dim mclcNomes1 As VBA.Collection
    Dim str As String, str1 As String
    
    Private Sub ListBox1_Click()
    
      Dim lngRow As Long
      Dim X As Integer
      Dim s As String
    
    '  Me.ListBox3.Clear
      Me.ListBox2.Clear
      If Me.ListBox1.ListIndex = -1 Then Exit Sub
      
      With mwksDados
        For lngRow = 2 To .Cells(.Rows.Count, "C").End(xlUp).Row
          If .Cells(lngRow, "C").Value = Me.ListBox1.Value Then
          
            With Me.ListBox2
            .ColumnWidths = "40;150;120;120"
            .AddItem
            ListBox2.ForeColor = &HFF0000
            .List(.ListCount - 1, 0) = Sheets("Folha1").Range("A" & lngRow)
            .List(.ListCount - 1, 1) = Sheets("Folha1").Range("B" & lngRow)
            .List(.ListCount - 1, 2) = Sheets("Folha1").Range("C" & lngRow)
            .List(.ListCount - 1, 3) = Sheets("Folha1").Range("D" & lngRow)
    
            End With
                    
          End If
        Next lngRow
      End With
    
    End Sub
    
    Private Sub ListBox3_Click()
    
      Dim lngRow As Long
    
    '  Me.ListBox3.Clear
      Me.ListBox2.Clear
      If Me.ListBox3.ListIndex = -1 Then Exit Sub
      
      Set mwksDados = ThisWorkbook.Worksheets("Folha1")
      
      With mwksDados
        For lngRow = 2 To .Cells(.Rows.Count, "D").End(xlUp).Row
          If .Cells(lngRow, "D").Value = Me.ListBox3.Value Then
          
            With Me.ListBox2
    
            .ColumnWidths = "60;160;130;100"
            .AddItem
            .List(.ListCount - 1, 0) = Sheets("Folha1").Range("A" & lngRow)
            .List(.ListCount - 1, 1) = Sheets("Folha1").Range("B" & lngRow)
            .List(.ListCount - 1, 2) = Sheets("Folha1").Range("C" & lngRow)
            .List(.ListCount - 1, 3) = Sheets("Folha1").Range("D" & lngRow)
    
            End With
                    
          End If
        Next lngRow
      End With
    
    End Sub
    
    Private Sub TextBox1_Change()
      Dim lng As Long, lng1 As String
      Dim str As String, str1 As String
      
      Me.ListBox1.Clear
      Me.ListBox2.Clear
      Me.ListBox3.Clear
      
      For lng = 1 To mclcNomes.Count
        str = mclcNomes(lng)
        If str Like "*" & (Me.TextBox1.Value) & "*" Then
          Me.ListBox1.AddItem str
        End If
      Next lng
    Me.ComboBox1.Clear
      For lng = 1 To mclcNomes.Count
        str = mclcNomes(lng)
        If str Like "*" & (Me.TextBox1.Value) & "*" Then
          Me.ComboBox1.AddItem str
        End If
      Next lng
      
      For lng = 1 To mclcNomes1.Count
        str1 = mclcNomes1(lng)
        If str Like "*" & (Me.TextBox1.Value) & "*" Then
          Me.ListBox3.AddItem str1
        End If
      Next lng
    Me.ComboBox2.Clear
      For lng = 1 To mclcNomes1.Count
        str1 = mclcNomes1(lng)
        If str Like "*" & (Me.TextBox1.Value) & "*" Then
          Me.ComboBox2.AddItem str1
        End If
      Next lng
      
    End Sub
    
    Private Sub UserForm_Initialize()
    
      Dim lng As Long
      Dim str As String, str1 As String
      
      Set mwksDados = ThisWorkbook.Worksheets("Folha1")
      Set mclcNomes = New Collection
      Set mclcNomes1 = New Collection
      
      With mwksDados
        On Error Resume Next
        For lng = 2 To .Cells(.Rows.Count, "C").End(xlUp).Row
          str = .Cells(lng, "C").Value
          mclcNomes.Add str, str
       TotNomes = mclcNomes.Count
        Next lng
        On Error GoTo 0
      End With
      
        With mwksDados
        On Error Resume Next
        For lng = 2 To .Cells(.Rows.Count, "D").End(xlUp).Row
          str1 = .Cells(lng, "D").Value
          mclcNomes1.Add str1, str1
       TotNomes = mclcNomes1.Count
        Next lng
        On Error GoTo 0
      End With
    
    End Sub

    Acrescenta outros Itens na folha e verifica o comportamento das rotinas.

    Para alterar Grupos, basta selecionar novo texto no Listbox.

    Não esqueças de dar o tópico como respondido se a ajuda resolveu o teu problema.


    M_A_S_L




    • Editado M_A_S_L terça-feira, 10 de abril de 2018 23:34
    terça-feira, 10 de abril de 2018 20:34
  • Muito Obrigado M_A_S_L é isso mesmo vou estudar o código e alterar para minha necessidade.

    Obrigado Novamente 

    Abraços

    quarta-feira, 11 de abril de 2018 13:41