UniversoExcelForo

Respuesta a consultas.
Fecha de creación: 09.Abril.2012

Fundadores: Wibly,Tyno,Servando,Sakkar,Rosendo2,RMaximo,Railar,Mcoronel,Ioyama,Igtelo,Hugotron,Drochar,Dedos,Alberto,Adolfo

No se pueden hacer consultas de Excel o VBA por mensaje privado.
Utiliza el botón buscar del foro y te ahorras tiempo para obtener "ayuda".

No estás conectado. Conéctate o registrate

Ver el tema anterior Ver el tema siguiente Ir abajo  Mensaje [Página 1 de 1.]

1RESUELTO Ordenar el Id sin saltos el 06/04/14, 07:20 pm

JoaoM


Tengo varia informacio nen el libro el cual en las hojas Prod_Entrada y Proveedor, en la columna A el ID.
Este Id al mandar eliminar cualquier dato (línea) al eliminar la línea elimina también el ID, LOGICO pero queda salteado el numero.

Si elimino la línea referente al Id 7 luego no actualisa el ID para que el numero sea seguido y queda el 6 y pasa al 8, no es eguido.
Se puede hacer algo para que al eliminar algún dato el Id se ordene tal como se hace alfabéticamente? seguido.
Gracias
Archivos
2- Proyecto_Stock con Factura_para edicion.zip
No tienes los permisos para descargar los archivos.
(257 KB)

2RESUELTO Re: Ordenar el Id sin saltos el 08/04/14, 12:37 pm

wibly


Hola JoaoM,

Trata de comenzar con un saludo, así es más agradable.

Intenta con la fórmula
Código:
=FILA()-1

El "-1" es para restar la fila de encabezados.

Saludos

Adrián

3RESUELTO Re: Ordenar el Id sin saltos el 08/04/14, 06:24 pm

JoaoM


Caray Sr., mis respectos y saludos


Agradezco su respuesta pero tengo que decirle que el Id es introducido desde un formulario el cual un TextBox capta el ultimo número de la columna (la A) y otro capta el ultimo y adiciona +1

Este + 1 es el que va a entrar.
Pero vea usted, tengo 20, del 1 al 20, elimino desde formulario la línea referente al 5 (ejemplo) entonces en la hoja veo que queda del 1 al 4 y salta al 6, 7 ect.
Lo que pretendía yo es que me ordene también la columna A pero numeración seguida al eliminar alguna línea y que no me afecte a partir de la columna B
Una de las macros, la cual ordena alfabéticamente a partir de la B.
Porque no la pongo desde la A? porque al ordenarme desde la columna A, me quedaria la B un salteado casi igual que no aparecerían alfabéticamente ordenados. La ordenación de la A seria con nueva(s) línea(s) de código para SOLAMENTE para la columna A

si sirve de algo, si no tendré que subir el libro a una web porque acá no me deja por el peso.

Código:
 'INGRESO PRODUCTO
Private Sub btncliAC_Click()
Dim strfila$
Application.ScreenUpdating = False
Hoja2.Activate
Dim fila As String
    'ActiveSheet.Unprotect "123" 'Cambiar 123 por la que convenga
[A65536].End(xlUp).Offset(1, 0).Select
If Modificar = True Then
   Range("A" & FilaModificacion).Activate
   strfila$ = FilaModificacion
Else
   strfila$ = ActiveCell.Row
   ActiveCell = Val(lblregcli)
End If
If Application.CountIf(ActiveSheet.Range("b2:b10000"), txtcli2.value) Then 'Busca en la columna A si existe el contacto
Rem Si existe la rutina llega solo al If mensage. si no existe, brinca después de Else para insertar los datos.
        Mensage = MsgBox("El producto " & txtcli2.Text & " ya existe en lista." & vbCrLf & vbCrLf & _
    "Puede editarlo manteniendo el mismo code y hacer cambio a lo demas.", vbInformation + vbOKOnly, "CONTACTO EXISTENTE")
    btncliBO_Click 'Si te dá mensage, Limpia el formulario
       ' ActiveSheet.Protect "123"
    If Mensage = vbOK Then Exit Sub 'Del mensage presionas OK y hasta el Exit Sub llega la rutina
Else
Range("A" + strfila$) = CDbl(txtcli1)
Range("B" + strfila$) = txtcli2
Range("C" + strfila$) = txtcli3
Range("D" + strfila$) = CDbl(txtcli4)
Range("E" + strfila$) = txtcli5
Range("F" + strfila$) = CCur(txtcli6)
Range("G" + strfila$) = CDbl(txtcli7)
Range("I" + strfila$) = txtcli8
txtcli1 = "": txtcli2 = "": txtcli3 = "": txtcli4 = "": txtcli5 = "": _
txtcli6 = "": txtcli7 = "": txtcli8 = "": txtcli9 = ""
'zzz
Rem Ordena la columna NOMBRE (B) alfabeticamente (A a Z)
x = ActiveSheet.Range("B" & Rows.Count).End(xlUp).Row
Set myrange = ActiveSheet.Range("B2:J" & x) 'ordena hasta la columna J
myrange.Sort Key1:=ActiveSheet.Range("B1")
'zzz
Range("A1").End(xlDown).Select 'Deja seleccionada la última celda ocupada
lblregcli = ActiveCell.value ' + 1 'Capta la celda seleccionada
txtcli1 = ActiveCell.value + 1
txtcli9 = ActiveCell.value
If Modificar = True Then
   Modificar = False
'   Unload Me
End If
End If
    'ActiveSheet.Protect "123"
txtcli2.SetFocus
Application.ScreenUpdating = True
End Sub

Desde ya muchas gracias, estaré pendiente e alguna solución para adicionarlña a esta macro y otras mas que tengo en el libro

4RESUELTO Re: Ordenar el Id sin saltos el 09/04/14, 09:22 am

wibly


Ok, en ese caso no sé como ayudarte y además no entiendo del todo tu explicación... veremos si alguien puede ayudar.

Saludos

Adrián

5RESUELTO Re: Ordenar el Id sin saltos el 09/04/14, 05:48 pm

tyno


Hola Joao, saludos Wibly.

Modifica el código del botón ELIMINAR de la pestaña Edición del Producto con este otro código (lo que esta en azul es lo que agregué):

Private Sub btnElimi_Click()
Application.ScreenUpdating = False
    'ActiveSheet.Unprotect "By Jot@"
'WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
    Dim fCliente As Integer
    fCliente = nCliente(cmbEdProd.Text)
    
    If fCliente = 0 Then
        MsgBox "El producto que quiere eliminar no existe", vbInformation + vbOKOnly
        cmbEdProd.SetFocus 'nombre ComboBox
        Exit Sub
    End If
    
    If MsgBox("¿Seguro que quiere eliminar este producto?", vbQuestion + vbYesNo) = vbYes Then
        
        Cells(fCliente, 1).Select
        
        ActiveCell.EntireRow.Delete
        
        CargarLista
    cmbEdProd = "": txtcli10 = "": txtcli20 = "": txtcli30 = "": txtcli40 = "": txtcli50 = "": _
    txtcli60 = "": txtcli70 = "": txtcli80 = ""
    
    
    Range("a2:a1000000") = ""
    Range("b2:i" & Range("b1000000").End(xlUp).Row).Sort key1:=Range("b2"),       order1:=xlAscending
   
    For a = 1 To Range("b1000000").End(xlUp).Row - 1
    Cells(a + 1, 1) = a
    Next a
        
        MsgBox "Producto eliminado", vbInformation + vbOKOnly
        cmbEdProd.SetFocus
        
   End If
    'ActiveSheet.Protect "By Jot@"
    Application.ScreenUpdating = True

End Sub

Por lo que entiendo quieres eliminar un item, ordenar los registros por columna B y asignar nuevamente el numero de item de manera correlativa.


Saludos

6RESUELTO Re: Ordenar el Id sin saltos el 09/04/14, 08:57 pm

JoaoM


Hola tyno, como estas? espero bien

Pues déjame llegar a casa y lo hare, En este momento estoy en consulta medica externa en una clínica (el almanaque me esta afectando jejejejejje) y demorare talves un par de días, luego te dire algo.
Gracias por responder

7RESUELTO Re: Ordenar el Id sin saltos el 11/04/14, 05:49 pm

JoaoM


Hola tyno, hola wibly

Volvi del cementerio jejejejejjeej, aun vivo

Quiero decirte tyno que tus lines de código si funcionan, solo tengo que pedirte si puedes comentarme esas líneas de código para yo mejor entenderlas;

Corrige las que este mal comentadas por favor


Código:
Range("a2:a10000") = "" 'Coloca desde A2 hasta A10000 en blanco
    Range("b2:i" & Range("b10000").End(xlUp).Row).Sort key1:=Range("b2"),       order1:=xlAscending 'Recorre desde B10000 hasta encontrar la primera ocupada y ordena la Columna B
'Coloca la numeración nueva en la columna A
 For a = 1 To Range("b10000").End(xlUp).Row - 1
'Me parece ser: recorre desde B10000 hasta encontrar B1 y baja a B2
 Cells(a + 1, 1) = a 'Aquí que
 Next a

Tengo estas líneas en el botón Validar de las pestañas Ingresar. Cual la diferencia con el tuyo? hace lo mismo pero no es, no actua igual

Código:
Rem Ordena la columna NOMBRE (B) alfabeticamente (A a Z)
X = ActiveSheet.Range("B" & Rows.Count).End(xlUp).Row
Set myrange = ActiveSheet.Range("B2:J" & X) 'ordena hasta la columna J
myrange.Sort key1:=ActiveSheet.Range("B1")

creo que eliminando tu 2 línea, según mi prueba

Pregunto si es posible que me des solo para ordenar la columna A, solo la A, olvidando a partir de la B hacia adelante, porque en el botón validar de las pestañas Edición, no necesito ordenar desde la columna B hasta la J porque al editar no edito nombres, en el Combo ya aparece todo ordenado porque ya en la hoja están ordenados por el botón Validar del ingreso.

Si necesito para el botón Eliminar el ordenar la columna A, solo la A. Cual de tu recomendado (azul) agrego al código para SOLO ordenar la columna A?
De todos modos te agradezco el adicional para ordenar desde la A hasta la J

8RESUELTO Re: Ordenar el Id sin saltos el 12/04/14, 12:49 am

tyno


Hola Joao.

Range("a2:a10000") = "" 'Coloca desde A2 hasta A10000 en blanco
Esto es correcto, aunque en realidad sería que borra el rango A2:A10000, por eso la instrucción dice Range("a2:a10000") = "", estas dobles comillas sin ningun contenido es igual a "nada" 

Range("b2:i" & Range("b10000").End(xlUp).Row).Sort key1:=Range("b2"), order1:=xlAscending 'Recorre desde B10000 hasta encontrar la primera  ocupada y ordena la Columna B
Bueno, esta instrucción creo que se entiende es para ordenar un rango, aqui B2:I + la ultima fila con datos (no solo la columna B)
En particular "Range("b10000").End(xlUp).Row " lo que se hace es buscar es el valor de la primer fila (row) con datos desde una celda como punto de partida, en este caso desde  B10000 hacia arriba End(xlUp).

'Coloca la numeración nueva en la columna A
 For a = 1 To Range("b10000").End(xlUp).Row - 1
'Me parece ser: recorre desde B10000 hasta encontrar B1 y baja a B2
 Cells(a + 1, 1) = a 'Aquí que
 Next a
Esto también es correcto, aquí se inserta  la numeración y nuevamente se utiliza la instrucción  Range("b10000").End(xlUp).Row a la cual se le resta 1 para determinar el limite del bucle For Next.
En estos casos utilice la celda B10000, o una celda de la columna B porque en esta columna siempre va a existir algún dato con el cual se pueda establecer cual es la ultima fila con datos justamente, se podía elegir otra columna que no se la columna A, ya que en esta se borran los datos al principio.


Con respecto a este código:
Rem Ordena la columna NOMBRE (B) alfabeticamente (A a Z)
X = ActiveSheet.Range("B" & Rows.Count).End(xlUp).Row
Set myrange = ActiveSheet.Range("B2:J" & X) 'ordena hasta la columna J
myrange.Sort key1:=ActiveSheet.Range("B1")

Bueno, la diferencia primero es que ordena el rango B:J, en lo que yo hice ordena el rango B:I y lo otro que veo es que no se ha determinado el tipo de orden Order1:=xlAscending (o Descending), la verdad que no he probado si omitiendo este argumento por defecto un rango se ordena de forma ascendente. También veo que se ha determinado la celda B1 como referencia de orden lo cual no creo que sea correcto ya que los datos a ordenar están a partir de la fila 2 por eso yo establecí key1:=Range("b2") y aquí dice key1:=ActiveSheet.Range("B1")

Para ordenar solo la columna A:

 Range("a2:a" & Range("b1000000").End(xlUp).Row).Sort key1:=Range("a2"), order1:=xlAscending

Saludos

9RESUELTO Re: Ordenar el Id sin saltos el 13/04/14, 05:05 pm

JoaoM


Hola tyno, muchas gracis por responderme y sobretodo ayudarme. Gracias también por tus comentarios
Range("a2:a10000") = "" 'Coloca desde A2 hasta A10000 en blanco

tyno escribió:Esto es correcto, aunque en realidad sería que borra el rango A2:A10000, por eso la instrucción dice Range("a2:a10000") = "", estas dobles comillas sin ningun contenido es igual a "nada" 
Lo sabia

JoaoM escribió:Range("b2:i" & Range("b10000").End(xlUp).Row).Sort key1:=Range("b2"), order1:=xlAscending 'Recorre desde B10000 hasta encontrar la primera  ocupada y ordena la Columna B
Aquí lo sabia, mi error fue no mencionar desde B hasta I

Si, borra la A pero luego toma por referencia la B, la referencia es la linea  Cells(a + 1, 1) = a ¿cierto? creo ser así.

El ordenar hasta I o J es cosa de modificar letra final
Lo que si tengo algunas otras planillas que uso ese ordenamiento de A a Z y no me falla. Mi pregunta fue porque veo que tu ordenamiento es mas corto en tamaño texto y el que te mutre es un poco mas largo y a mi me gustan los cortos con la misma efectividad.
Mensionas la columna B1, B1 porque este código l oquite de una plantilla que tenia A1 y como yo quise aplicarlo en este, tuve que cambiarle a B1, pero que ordena bien, ordena desde B hasta la I. Por eso mi pedido SOLO para la A que borre y vuelva a colocar los numeros ordenados desde 1 hasta la que corresponda para agregarlo a esta mia.
La tuya esta completa, borra y coloc ordfenados en la columna A y ordena dede la A hasta la I pero, la mia? ¿agrego la tuya Range("a2:a10000") = "" 'Coloca desde A2 hasta A10000 en blanco  y que mas?

¿Así seria?
Código:
Range("a2:a10000") = "" 'Blanquea la column A

'Ordena la columna NOMBRE (B) alfabeticamente (A a Z)
X = ActiveSheet.Range("B" & Rows.Count).End(xlUp).Row
Set myrange = ActiveSheet.Range("B2:J" & X) 'ordena hasta la columna J
myrange.Sort key1:=ActiveSheet.Range("B1")

'Coloca la numeración nueva en la columna A
 For a = 1 To Range("b10000").End(xlUp).Row - 1 'recorre desde B10000 hasta encontrar B1 y baja a B2
 Cells(a + 1, 1) = a 'A como Referencia
 Next a
Una ves mas, Gracias.

Tengo un nuevo tema por acá http://www.universoexcelforo.com/t746-copia-de-hoja-factura-a-hoja-copia_factura#4220
Podrias leerlo tyno?

Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje [Página 1 de 1.]

Permisos de este foro:
No puedes responder a temas en este foro.