Ordenar Productos por orden Alfabético

Tengo un libro con un formulario en el cual aparecen en un combo box un listado de artículos, y quisiera que aparecieran por orden alfabético, pero no se como hacerlo, os pongo la macro del formulario a ver si se puede modificar de alguna forma, para que los productos aparezcan por orden alfabético.

Private Sub ComboBox1_Change()'Por.Dante Amor    Set h1 = Sheets("Hoja1")    Set h2 = Sheets("Hoja2")    h2.Cells.ClearContents    If ComboBox1.ListIndex > -1 Then        f = ComboBox1.ListIndex + 6        uc = h1.Cells(4, Columns.Count).End(xlToLeft).Column        i = 1        For j = 3 To uc            If h1.Cells(f, j) <> "" Then                h2.Cells(i, "A") = h1.Cells(4, j)                h2.Cells(i, "B") = h1.Cells(f, j)                i = i + 1            End If        Next        '        u = h2.Range("A" & Rows.Count).End(xlUp).Row        With h2.Sort         .SortFields.Clear: .SortFields.Add Key:=h1.Range("B1:B" & u)         .SetRange h1.Range("A1:B" & u): .Header = xlGuess: .Apply        End With        ListBox1.RowSource = h2.Name & "!A1:B" & u    End IfEnd Sub'Private Sub UserForm_Activate()'Por.Dante Amor    Set h1 = Sheets("Hoja1")    Set h2 = Sheets("Hoja2")    ComboBox1.RowSource = h1.Name & "!A6:A" & h1.Range("A" & Rows.Count).End(xlUp).Row    ListBox1.ColumnCount = 2    ListBox1.ColumnWidths = 300 & ";" & 50End Sub'Private Sub CommandButton1_Click()'Por.Dante Amor    Unload MeEnd Sub

1 respuesta

Respuesta
1

Antes de abrir el formulario puedes ordenar los datos de la hoja1 por la columna A y con eso aparecerán los datos en el combo en orden alfabético.

Hola, los artículos están en la columna B y los selecciono todos hasta el 300, y le doy a ordenar de la A a la Z, pero me da un error, que dice es necesario que todas las celdas combinadas tengan el mismo tamaño. Además no solo debe ordenar la columna B si no todas las demás para que coincidan los precios de cada proveedor con el articulo al que corresponde. Quizás no te haya entendido con lo ordenar los datos de la hoja1 por la columna A.

Cuando tengas tiempo me lo explicas.

Gracias Dante.

Selecciona todo tu rango de datos, desde la columna A hasta la última columna que tengas con datos, revisa que todos tus artículos tengan la celda combinada.

O por última quita la combinación de celdas de la A a la B, como la columna B va a quedar en blanco, eliminas la columna B

Hola Dante , he hecho lo de buscar en todas la celdas estan combinadas. He quitado la combinacion de las columnas A y B y tambien de las demas y en vez de Terminar el Rango de celdas en Q6 llega hasta I6 , entonces le doy a ordenar y hay dos articulos que no empiezan A y me aparecen arriba del todo y muchos articulos me aparecen sin precio .Hay que modificar el codigo del formulario ?

Envíame tu archivo para revisarlo.

Mi correo [email protected]
En el asunto del correo escribe tu nombre de usuario "navara10" y el título de esta pregunta.

Buenos días Dante, te acabo de enviar el archivo .

Un saludo

Te anexo la macro para que ahora lea desde la columna B.

No combines las celdas, lo que tienes es una base de datos, no combines las celdas ya que te va a dificultar la consulta a tu base de datos. Para presentaciones o para llenar algún formato en especial, ahí sí puedes combinar las celdas, mientras, si requieres que al columna esté más ancha no la combines, simplemente haz más ancha la columna; lo mismo para las filas.

Private Sub ComboBox1_Change()
'Por.Dante Amor
    Set h1 = Sheets("Hoja1")
    Set h2 = Sheets("Hoja2")
    h2.Cells.ClearContents
    If ComboBox1.ListIndex > -1 Then
        f = ComboBox1.ListIndex + 6
        uc = h1.Cells(4, Columns.Count).End(xlToLeft).Column
        i = 1
        For j = 2 To uc
            If h1.Cells(f, j) <> "" Then
                h2.Cells(i, "A") = h1.Cells(4, j)
                h2.Cells(i, "B") = h1.Cells(f, j)
                i = i + 1
            End If
        Next
        '
        u = h2.Range("A" & Rows.Count).End(xlUp).Row
        With h2.Sort
         .SortFields.Clear: .SortFields.Add Key:=h1.Range("B1:B" & u)
         .SetRange h1.Range("A1:B" & u): .Header = xlGuess: .Apply
        End With
        ListBox1.RowSource = h2.Name & "!A1:B" & u
    End If
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas