Ordenar manteniendo los ID

31/08/2006 - 01:11 por Esteban Dido | Informe spam
Hola,

Estoy armando una lista de precios con una fórmula para generar un ID
(código de identificación de cada artículo).
Quiero ordenarla alfabéticamente, pero al hacerlo se cambian los ID, es
decir, la columna descripción se ordena pero la columna ID genera nuevos
códigos.
Además, cada vez que se ingrese un nuevo artículo a la lista sucederá lo
mismo.
No sé cómo solucionarlo.

Preguntas similare

Leer las respuestas

#11 Héctor Miguel
01/09/2006 - 05:53 | Informe spam
hola, Esteban !

... ese es el problema... Cuando agrego un articulo nuevo a la lista naturalmente que se escribe al final y genera su ID.
... quiero ordenar... alfabetico y ese articulo se cambia a la fila que le corresponde... y cambia todos los codigos... incluyendo el propio
... Tal vez haya una mejor forma de generar los codigos. Cualquier sugerencia es bienvenida.
Se pueden cambiar a valores constantes los codigos ya generados y mantener las formulas para... la generacion del codigo [...]



te propongo el siguiente procedimiento con los siguientes 'supuestos':

1) ELIMINA la fila 2 [que tienes con un alto de 0.5] y dejas los titulos en la fila 1 [en las 10 columnas]

2) en el 'entendido' que PRIMERO se pone el dato del grupo al que pertenece el articulo [en la columna A]
se deja en blanco la columna 'B' [pondremos al codigo a generar el codigo]
y escribes la descripcion del articulo en la columna 'C'

luego pones las siguientes lineas en el modulo de codigo de 'esa' hoja:

Private Const Titulos As Byte = 1 ' el numero de fila donde estan los titulos '
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 3 Then Exit Sub
If Target.Row <> Range("a" & Rows.Count).End(xlUp).Row Then Exit Sub
Dim Reciente As String
With Target: .Offset(, -1) = _
UCase(Left(.Value, 3)) & .Offset(, -2) & Format(.Row - Titulos, "000")
Reciente = .Offset(, -1)
With .CurrentRegion
.Sort Key1:=.Cells(1), Order1:=xlAscending, Header:=xlYes
.Find(What:=Reciente).Offset(, 2).Select
End With
End With
End Sub

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#12 Esteban Dido
02/09/2006 - 21:05 | Informe spam
Hola, Héctor,

Gracias por la ayuda. Tu propuesta es interesante, la estoy estudiando.
Cambié en el código .Sort Key1:=.Cells(1), ... por .Sort Key1:=.Cells(3),
... ya que ordenaba por código de grupo en lugar de ordenar por descripción.
Y claro, tiene para el usuario el inconveniente de que no puede deshacer.
Voy a seguir pensando. No quiero llegar a hacer un copy de la hoja a otra
hoja pegando valores y luego ordenar, porque habría que repetir manualmente
el procedimiento cada vez que se ingrese un nuevo artículo a la lista.
Saludos
E.D.


"Héctor Miguel" escribió en el mensaje
news:
hola, Esteban !

> ... ese es el problema... Cuando agrego un articulo nuevo a la lista


naturalmente que se escribe al final y genera su ID.
> ... quiero ordenar... alfabetico y ese articulo se cambia a la fila que


le corresponde... y cambia todos los codigos... incluyendo el propio
> ... Tal vez haya una mejor forma de generar los codigos. Cualquier


sugerencia es bienvenida.
> Se pueden cambiar a valores constantes los codigos ya generados y


mantener las formulas para... la generacion del codigo [...]

te propongo el siguiente procedimiento con los siguientes 'supuestos':

1) ELIMINA la fila 2 [que tienes con un alto de 0.5] y dejas los titulos


en la fila 1 [en las 10 columnas]

2) en el 'entendido' que PRIMERO se pone el dato del grupo al que


pertenece el articulo [en la columna A]
se deja en blanco la columna 'B' [pondremos al codigo a generar el


codigo]
y escribes la descripcion del articulo en la columna 'C'

luego pones las siguientes lineas en el modulo de codigo de 'esa' hoja:

Private Const Titulos As Byte = 1 ' el numero de fila donde estan los


titulos '
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 3 Then Exit Sub
If Target.Row <> Range("a" & Rows.Count).End(xlUp).Row Then Exit Sub
Dim Reciente As String
With Target: .Offset(, -1) = _
UCase(Left(.Value, 3)) & .Offset(, -2) & Format(.Row - Titulos, "000")
Reciente = .Offset(, -1)
With .CurrentRegion
.Sort Key1:=.Cells(1), Order1:=xlAscending, Header:=xlYes
.Find(What:=Reciente).Offset(, 2).Select
End With
End With
End Sub

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.


Respuesta Responder a este mensaje
#13 Esteban Dido
07/09/2006 - 17:28 | Informe spam
Hola Héctor,

Finalmente opté por modificar parte de tu código para generar y escribir el
ID como yo lo tenía definido y ordenar manualmente cuando sea necesario.
Como los ID así ingresados son valores y no fórmulas, al ordenar según
artículos se mantienen inalterables. Todo eso gracias, naturalmente, a tu
generosa ayuda dándome la idea y el código de VBA.

Un saludo
E.D.


"Héctor Miguel" escribió en el mensaje
news:
hola, Esteban !

> ... ese es el problema... Cuando agrego un articulo nuevo a la lista


naturalmente que se escribe al final y genera su ID.
> ... quiero ordenar... alfabetico y ese articulo se cambia a la fila que


le corresponde... y cambia todos los codigos... incluyendo el propio
> ... Tal vez haya una mejor forma de generar los codigos. Cualquier


sugerencia es bienvenida.
> Se pueden cambiar a valores constantes los codigos ya generados y


mantener las formulas para... la generacion del codigo [...]

te propongo el siguiente procedimiento con los siguientes 'supuestos':

1) ELIMINA la fila 2 [que tienes con un alto de 0.5] y dejas los titulos


en la fila 1 [en las 10 columnas]

2) en el 'entendido' que PRIMERO se pone el dato del grupo al que


pertenece el articulo [en la columna A]
se deja en blanco la columna 'B' [pondremos al codigo a generar el


codigo]
y escribes la descripcion del articulo en la columna 'C'

luego pones las siguientes lineas en el modulo de codigo de 'esa' hoja:

Private Const Titulos As Byte = 1 ' el numero de fila donde estan los


titulos '
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 3 Then Exit Sub
If Target.Row <> Range("a" & Rows.Count).End(xlUp).Row Then Exit Sub
Dim Reciente As String
With Target: .Offset(, -1) = _
UCase(Left(.Value, 3)) & .Offset(, -2) & Format(.Row - Titulos, "000")
Reciente = .Offset(, -1)
With .CurrentRegion
.Sort Key1:=.Cells(1), Order1:=xlAscending, Header:=xlYes
.Find(What:=Reciente).Offset(, 2).Select
End With
End With
End Sub

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.


Respuesta Responder a este mensaje
#14 Gabriel Raigosa
30/09/2006 - 18:35 | Informe spam
Carpeta
Descripción
Dirección

1
** Microsoft Excel *
http://esnips.com/web/GabrielRaigosa

2
Archivos para usar en clase
http://esnips.com/web/RaigosaClase

3
Fechas y Horas
http://esnips.com/web/RaigosaFechasHoras

4
Formato y Formato Condicional
http://esnips.com/web/RaigosaFormatos

5
Foro Excel
http://esnips.com/web/ForoExcel

6
Funciones de Busqueda
http://esnips.com/web/RaigosaBusqueda

7
Funciones de Texto
http://esnips.com/web/RaigosaTexto

8
Funciones Financieras
http://esnips.com/web/RaigosaFinancieras

9
Funciones Logicas
http://esnips.com/web/RaigosaLogicas

10
Graficos con Excel
http://esnips.com/web/RaigosaGraficos

11
Grupo (Sabados)
Privado

12
Grupo (Viernes)
Privado

13
Grupo Excel Septiembre
Privado

14
Juegos con Excel
http://esnips.com/web/RaigosaJuegosExcel

15
Macros con Excel
http://esnips.com/web/Macros-con-Excel

16
Manuales Excel
http://esnips.com/web/RaigosaManuales

17
Paginas WEB
http://esnips.com/web/RaigosaPaginasExcel

18
Practicas - XLS
http://esnips.com/web/RaigosaPracticasXLS

19
Tablas Dinámicas
http://esnips.com/web/RaigosaTablasDinamicas

20
TEST
http://esnips.com/web/GabrielRaigosa-test

21
Validación
http://esnips.com/web/RaigosaValidacion

22
Varios
http://esnips.com/web/RaigosaVarios

23
VBA - Visual Basic para Aplicaciones
http://esnips.com/web/RaigosaVBA



Gabriel Raigosa
http://esnips.com/web/Raigosa
http://esnips.com/web/ForoExcel
"Esteban Dido" escribió en el mensaje
news:
| Hola Héctor,
|
| Finalmente opté por modificar parte de tu código para generar y escribir
el
| ID como yo lo tenía definido y ordenar manualmente cuando sea necesario.
| Como los ID así ingresados son valores y no fórmulas, al ordenar según
| artículos se mantienen inalterables. Todo eso gracias, naturalmente, a tu
| generosa ayuda dándome la idea y el código de VBA.
|
| Un saludo
| E.D.
|
|
| "Héctor Miguel" escribió en el mensaje
| news:
| > hola, Esteban !
| >
| > > ... ese es el problema... Cuando agrego un articulo nuevo a la lista
| naturalmente que se escribe al final y genera su ID.
| > > ... quiero ordenar... alfabetico y ese articulo se cambia a la fila
que
| le corresponde... y cambia todos los codigos... incluyendo el propio
| > > ... Tal vez haya una mejor forma de generar los codigos. Cualquier
| sugerencia es bienvenida.
| > > Se pueden cambiar a valores constantes los codigos ya generados y
| mantener las formulas para... la generacion del codigo [...]
| >
| > te propongo el siguiente procedimiento con los siguientes 'supuestos':
| >
| > 1) ELIMINA la fila 2 [que tienes con un alto de 0.5] y dejas los titulos
| en la fila 1 [en las 10 columnas]
| >
| > 2) en el 'entendido' que PRIMERO se pone el dato del grupo al que
| pertenece el articulo [en la columna A]
| > se deja en blanco la columna 'B' [pondremos al codigo a generar el
| codigo]
| > y escribes la descripcion del articulo en la columna 'C'
| >
| > luego pones las siguientes lineas en el modulo de codigo de 'esa' hoja:
| >
| > Private Const Titulos As Byte = 1 ' el numero de fila donde estan los
| titulos '
| > Private Sub Worksheet_Change(ByVal Target As Range)
| > If Target.Column <> 3 Then Exit Sub
| > If Target.Row <> Range("a" & Rows.Count).End(xlUp).Row Then Exit Sub
| > Dim Reciente As String
| > With Target: .Offset(, -1) = _
| > UCase(Left(.Value, 3)) & .Offset(, -2) & Format(.Row - Titulos,
"000")
| > Reciente = .Offset(, -1)
| > With .CurrentRegion
| > .Sort Key1:=.Cells(1), Order1:=xlAscending, Header:=xlYes
| > .Find(What:=Reciente).Offset(, 2).Select
| > End With
| > End With
| > End Sub
| >
| > si cualquier duda [o informacion adicional]... comentas ?
| > saludos,
| > hector.
| >
| >
|
|
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida