Notifications
Clear all

Ordenar Combobox

12 Posts
2 Usuários
0 Reactions
3,509 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Pessoal Boa noite, estou querendo ordenar uma combobox de um userform q estou fazendo, pesquisando
por alguns forums consegui achar um codigo, porém ele não esta ordenando os numeros em ordem crescente como eu queria
então queria saber se estou fazendo algo errado ou alguém mais sabe de outro jeito de se fazer essa programação!

Seguem os códigos:

'Carrega os dados na minha combobox1
Private Sub UserForm_activate()

j = Range("A3").End(xlDown).Row

For i = 3 To j

ComboBox1.AddItem Range("A" & i).Value

Next

For Each obj In UserForm1.Controls

If TypeOf obj Is ComboBox Then

Call Ordenar(obj)

End If

Next


End Sub
' Função que deveria colocar os valores em ordem crescente
Function Ordenar(ByVal Combo As ComboBox)
    Dim contA As Integer
    Dim contP As Integer
    Dim menor   As String
    Dim Elem As Integer
    
    Elem = Combo.ListCount
    
    For contA = 0 To Elem - 2
    
        For contP = contA + 1 To Elem - 1
        
                If Combo.List(contA) > Combo.List(contP) Then
                
                menor = Combo.List(contP)
                Combo.List(contP) = Combo.List(contA)
                Combo.List(contA) = menor
                
                End If
                
        Next contP
    
    Next contA
End Function

Desde já agradeço!

Att,

Ricardo

 
Postado : 03/09/2013 8:08 pm
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

ricardorezende,

Bom Dia!

Veja, no arquivo anexo, um exemplo que faz a ordenação de valores.

 
Postado : 04/09/2013 4:41 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Wagner obrigado pela resposta, mas no meu caso são numeros, e a macro acima fiz baseado em sua macro postada na biblioteca aqui do forum.
Não estou conseguindo ver o que esta de errado na macro pois ela esta rodando normalmente, só que não ordena as combobox numericamente em
ordem crescente como eu queria! Alguma ideia do que esteja errado?

Att,

 
Postado : 04/09/2013 5:15 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Wagner, percebi que este seu arquivo tambem ordena numeros,
porém se estes forem de 1 a 9, pois se colocar até 10 já ficaria 1, 10,2,3,4 ...
no meu caso os numeros são todos grande Ex: 22456,34578,64335!
Talvez seja por isso que não esta dando certo?

 
Postado : 04/09/2013 5:24 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Ricardo, de uma olhada no exemplo no Tópico abaixo, é mostrado varias formas de se classificar um listbox por tipos de dados e colunas.

Classificar Listbox por tipos de dados
viewtopic.php?f=21&t=3980

Qualquer duvida retorne

[]s

 
Postado : 04/09/2013 6:43 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Muito obrigado Wagner e Mauro pela ajuda, as duas contribuições deram certo,
o problema é que estou trabalhando com uma quantidade de dados ilimitada, ou seja,

quantidade de dados = Range("A3").end(xldown).row

neste caso ´os codigos não conseguem ordenar.

Porém quando se define o numero de dados, ex: i = 3 to 100 ae o código da certo!

Att,

Ricardo

 
Postado : 06/09/2013 10:03 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

o problema é que estou trabalhando com uma quantidade de dados ilimitada

Ricardo, não sei ao certo se temos alguma limitação, mas com uma lista de quantidade de itens realmente grande o processo da rotina será bem mais demorado tambem, pois é analisado e comparado item a item, neste caso eu sugiro que se for possivel realizar primeiro a classificação dos itens na aba e depois carregar o combo, será bem mais rápido.

[]s

 
Postado : 06/09/2013 11:50 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Mauro pelo menos nas minhas tentativas houve essa limitação, pois quando defini um range o codigo deu certo
e quando estava com um range ilimitado a classificação não era feita.

O problema de organizar na planilha é os dados podem ser cadastrados sem ser em sequencia por exemplo: cadastra-se o 62001 depois 27232 ... etc
para coloca-los em ordem crescente na planilha existem outras colunas dependentes desses.

Ex

colunas A B C D
msm linha 27232 7 12 45
62001 5 10 30

Logo eu não sei se haveria jeito de colocar em ordem a coluna A e os dados referentes a ela (das outras colunas) tambem acompanhassem essa ordenação!

 
Postado : 07/09/2013 8:10 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Ricardo, se for possível anexe seu modelo, se tiver dados confidenciais troque por fictícios e se o tamanho do arquivo exceder ao permitido no forum coloque em algum drive virtual e depois cole o link aqui, ficará mais fácil para se analisar e ver o que da para se fazer.

Quanto a ordenação na planilha, geralmente as outras colunas acompanham, o único problema que geralmente acontece é que se tivermos em outras abas formulas, ai podem perder a referencia.

[]s

 
Postado : 07/09/2013 9:24 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Mauro, realmente a planilha é meio que restrita então enviei para seu email "[email protected]"
posteriormente podemos postar a solução aqui!

Att,

 
Postado : 07/09/2013 10:16 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Rivardo, dei uma olhada no seu arquivo e não encontrei nehuma das duas rotinas que você postou acima, vi que só no Userform1 tem um ComboBox e ele é carregado com a lista de numeros que estão na coluna A, porem os dados ma planilha já estão classificados.
Então fiquei sem entender que combo e dados quer carregar e classificar.

[]s

 
Postado : 14/09/2013 5:02 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Mauro desculpe a demora, acabei conseguindo o que queria jogando os dados para outra aba da planilha e
nela faço a classificação em ordem crescente e elimino os valores repetidos se houver!

Na que te mandei, talvez estivesse um pouco diferente do que descrevi devido as inumeras tentativas que havia feito!

Sub organiza_dados()

    Sheets("Organizar").Visible = True
    
    Sheets("plan1").Select
    
    Dim intervalo As Range
    Dim intervalo2 As Range
    
    Dim linha As Double
    
    linha = 3
    
    Do Until Sheets("plan1").Cells(linha, 1) = ""
    linha = linha + 1
    Loop
    
    Set intervalo = ActiveSheet.Range(Cells(3, 1), Cells(linha, 1))
    intervalo.Select
    Selection.Copy
    
    Sheets("Organizar").Select
    Range("A1").Select
    ActiveSheet.Paste
    
    Set intervalo2 = ActiveSheet.Range(Cells(1, 1), Cells(linha, 1))
    intervalo2.RemoveDuplicates Columns:=1, Header:=xlNo
    
    'ordem numerica 
    intervalo2.Select
    Application.CutCopyMode = False
    ActiveWorkbook.Worksheets("Organizar").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Organizar").Sort.SortFields.Add Key:=ActiveCell, _
    SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Organizar").Sort
        .SetRange intervalo2
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
       .Apply
    End With
        
    Sheets("plan1").Select
End Sub

Att,

Ricardo

 
Postado : 02/10/2013 9:24 am