Página 1 de 1

Combobox em Cascata (sem dados repetidos)

Enviado: 31 Jan 2018 às 00:29
por victormonfort
Pessoal, boa noite

Estou desenvolvendo um projeto para um amigo e me deparei na seguinte dúvida:

Como fazer um "simples" grupo de 3 combobox em cascata? Já tentei diversas formas, mas nunca cheguei no objetivo. Nessa última tentativa, até consegui, mas ficou com os dados repetidos. Alguem pode me ajudar? Muito obrigado!!



Imagem

Re: Combobox em Cascata (sem dados repetidos)

Enviado: 31 Jan 2018 às 08:08
por Basole
Eu só fiz para o combobox natureza.
Veja se é isso.

Re: Combobox em Cascata (sem dados repetidos)

Enviado: 31 Jan 2018 às 21:51
por victormonfort
Basole escreveu:Eu só fiz para o combobox natureza.
Veja se é isso.
Basole, boa noite

Exatamente isso, muito obrigado. Porém, tentei implementar utilizando o mesmo código para a terceira combobox e não deu certo. Apenas mudei o nome das variáveis e a célula que se referenciam. Pode me ajudar? Onde errei?
Código: Selecionar todos
Private Sub cbo_natureza_Change()

    Dim linnat As Integer
    Dim Dic2 As Object
    
    Set Dic2 = CreateObject("Scripting.Dictionary")
    
    linnat = 2
    
    cbo_desc.Clear
    
    With Sheets("Atividade")
        
        Do Until Sheets("Atividade").Range("B" & linnat).Value = ""
            
            If .Range("B" & linnat).Value = cbo_natureza.Text Then
                
                If Not Dic2.Exists(LCase(.Range("C" & linnat).Value)) Then
                    Dic2.Add LCase(.Range("C" & linnat).Value), Nothing
                End If
                
            End If
            
            linnat = linnat + 1
            
        Loop
        
        For Each Key In Dic2
            Me.cbo_desc.AddItem Key
        Next
    End With
    

End Sub

Re: Combobox em Cascata (sem dados repetidos)

Enviado: 31 Jan 2018 às 22:32
por Basole
O problema é que os dados do combobox natureza estão com letras minusculas.
Acrescente o 'Lcase' na linha de comparação com os dados da planilha, que estão com a 1ª letra maiuscula.
Código: Selecionar todos
If LCase(.Range("B" & linnat).Value) = LCase(cbo_natureza.Text) Then

Re: Combobox em Cascata (sem dados repetidos)

Enviado: 01 Fev 2018 às 00:04
por victormonfort
Basole escreveu:O problema é que os dados do combobox natureza estão com letras minusculas.
Acrescente o 'Lcase' na linha de comparação com os dados da planilha, que estão com a 1ª letra maiuscula.
Código: Selecionar todos
If LCase(.Range("B" & linnat).Value) = LCase(cbo_natureza.Text) Then
Amigo, funcionou perfeitamente, muito obrigado.

Teria alguma forma para os dados do combobox não serem carregados em LCase e sim igual à tabela?

Re: Combobox em Cascata (sem dados repetidos)

Enviado: 01 Fev 2018 às 07:54
por Basole
Sim meu amigo, elimine o Lcase.

Veja este exemplo que incluir o "*" (asterisco), caso o usuário queira recarregar os dados s/ os filtros e também a classificação dos dados em ordem alfabética, dentro da combobox:
Código: Selecionar todos
Dim linnat  As Integer
Dim Dic2 As Object
Dim a As Long
Dim b As Long
Dim c As Variant
    
    Set Dic2 = CreateObject("Scripting.Dictionary")
    
    Dic2.Add "*", Nothing
    
    linnat = 2
    
    cbo_desc.Clear
    
    With Sheets("Atividade")
        
        Do Until Sheets("Atividade").Range("B" & linnat).Value = ""
            
            If (.Range("B" & linnat).Value) = (cbo_natureza.Text) Then
                
                If Not Dic2.Exists(.Range("C" & linnat).Value) Then
                    Dic2.Add .Range("C" & linnat).Value, Nothing
                End If
                
            End If
            
            linnat = linnat + 1
            
        Loop
    End With
    
    With Me.cbo_desc
        
        .List = Dic2.keys
        
' *** Classif. Ordem Alfabética ***
        
        For a = 0 To .ListCount - 1
            For b = a To .ListCount - 1
                If .List(b) < .List(a) Then
                    c = .List(a)
                    .List(a) = .List(b)
                    .List(b) = c
                End If
            Next
        Next
        
        Set Dic2 = Nothing
        
    End With

Re: Combobox em Cascata (sem dados repetidos)

Enviado: 01 Fev 2018 às 23:48
por victormonfort
Obrigado por tudo, amigo Basole. Ficou perfeito. Forte abraço!!