Ayuda con VBA

04/07/2006 - 16:27 por Zatid | Informe spam
Apreciado foro:

Resulta que tengo una hoja de excel base que contiene un ID y un nombre de
cliente, y desde otra hoja quiero traer dichos datos y que las demás veces
que lo haga simplemente me actualice los que se hayan agregado
posteriormente no importa si el dato nuevo lo deja al final de la tabla,
luego me encargaré de crear un procedimiento para ordenarla.

Agradezco de antemano cualquier ayuda

Preguntas similare

Leer las respuestas

#11 Juan M
09/07/2006 - 11:20 | Informe spam
hola zatid

hay una forma bastante rapida de ordenarlo, pero es a costa de 'sacrificar'
dos columnas
no es necesario hacerlo por codigo pero si te interesa lo pongo al final.

te explico el metodo
añade una columna A donde insertarasla formula =IZQUIERDA(C1,1)
añade otra columna B con la formula =LARGO(C1)
emplea la ordenacion avanzada y elige las tres condiciones
la primera la de la columna A ascendente la segunda la B y por ultimo la
tercera la C
luego se pueden eliminar si no son necesarias

inicio codigo
Sub Prepara()
Dim Celda As Range

Range("A:B").EntireColumn.Insert

For Each Celda In Range(Range("C1"), Range("C" & Rows.Count).End(xlUp))
Celda.Offset(0, -2) = Val(Left(Celda.Value, 1))
Celda.Offset(0, -1) = Len(Celda.Value)
Next Celda
End Sub
Sub ordenarango()
Range(Range("A1"), Range("E" & Rows.Count).End(xlUp)).Sort
Key1:=Range("A1"), Order1:=xlAscending, _
Key2:=Range("B1"), Order2:=xlAscending, Key3:=Range("C1"),
Order3:=xlAscending, _
Header:=xlNo
End Sub
fin codigo
#12 Zatid
10/07/2006 - 22:25 | Informe spam
Una vez más gracias Juan, el procedimiento que enviaste tampoco me sirve,
por que el orden es muy estricto, sin embargo intentaré con el que que
enviste anteriormenta haber como me va.

Cualquier cosa te estaré escribiendo.

Mil gracias y un beso



"Juan M" escribió en el mensaje
news:
Mostrar la cita
#13 Juan M
11/07/2006 - 08:10 | Informe spam
Hola Zatid

Mostrar la cita
quiza no me explique bien este ultimo proceso, porque realmente hace lo
mismo que el otro lo que pasa es que utilizando las caracteristicas de excel
para ordenar por varios criterios, lo unico es que hay que ejecutar los dos
procedimientos por orden primero el de preparacion de la lista y luego el de
la ordenacion del rango.

con el fichero que enviaste el otro dia, a mi los resultados obtenidos son
identicos, este ultimo practicamente instantaneo y el otro es demasiado
largo (lo probe con 2000 registros y casi lo dejo por imposible)

un error que puede producirse con este codigo es que tengas todas las
columnas utilizadas y no deje crear las dos nuevas columnas

te envio el codigo todo en un procedimineto comentado, si de todas formas no
te funciona de esta forma, comentas a ver que se puede hacer

un detalle es que los codigos deben estar en la columna A

un saludo
juan

inicio codigo
Sub Ordena()
Dim Celda As Range
'elimina el refresco de pantalla
Application.ScreenUpdating = False
'inserta dos columnas
Range("A:B").EntireColumn.Insert
'escribe el primer numero y la longitud de la cadena
For Each Celda In Range(Range("C1"), Range("C" & Rows.Count).End(xlUp))
Celda.Offset(0, -2) = Val(Left(Celda.Value, 1))
Celda.Offset(0, -1) = Len(Celda.Value)
Next Celda
'ordena por las tres condiciones
Range(Range("A1"), Range("E" & Rows.Count).End(xlUp)).Sort
Key1:=Range("A1"), Order1:=xlAscending, _
Key2:=Range("B1"), Order2:=xlAscending, Key3:=Range("C1"),
Order3:=xlAscending, _
Header:=xlNo
'elimina las columnas añadidas
Range("A:B").EntireColumn.Delete
End Sub
fin codigo
#14 Juan M
11/07/2006 - 18:29 | Informe spam
Hola Zatid

No se que pasa con tus archivos pero llegan un poco 'descompuestos', no se
ven comentarios, ni cosas parecidas quiza perdio formatos.
Si lo consideras oportuno me lo puedes enviar a mi direccion, es la que
aparece quitando el NOSPAM.

Creo que ahora si he entendido la forma como quieres ordenar.
Se trata de ordenar esos numeros como si fuesen texto, asi el 111 se
colocaria encima del 12.

Probemos el siguiente codigo a ver si esta vez hemos acertado.

Un saludo
juan

inicio codigo
Sub OrdenaTexto()
Dim celda As Range
'Insertamos el apostrofo para que se convierta en texto
'Comilla simple
For Each celda In Range(Range("A1"), Range("A" & Rows.Count).End(xlUp))
celda = "'" & celda.Value
Next celda
'Ordenamos el rango
Range(Range("A1"), Range("C" & Rows.Count).End(xlUp)).Sort
key1:=Range("A1"), order1:=xlAscending, header:=xlNo
End Sub
Fin codigo
#15 Juan M
12/07/2006 - 11:29 | Informe spam
Hola Zatid
Revisa tu correo

Creo que este es el codigo final

un saludo

juan



Inicio Codigo
Sub OrdenaLista()

Dim Celda As Range

'en esta linea inserta un caracter cualquiera delante del numero
For Each Celda In Range(Range("A1"), Range("A" & Rows.Count).End(xlUp))
' aqui puedes colocar cualquier valor no numerico
' en el codogo del for marque el la coma simple
'celda = "'" & celda.Value
Celda = "A" & Celda.Value
Next Celda

' Ordena el rango
Range(Range("A1"), Range("C" & Rows.Count).End(xlUp)).Sort
key1:=Range("A1"), order1:=xlAscending, header:=xlNo

' quita el caracter que hemos añadido antes
Columns("A").Replace what:="A", replacement:=""

' esto hace lo mismo pero con un bucle
'For Each Celda In Range(Range("A1"), Range("A" & Rows.Count).End(xlUp))
' Celda = Val(Mid$(Celda.Value, 2))
'Next Celda

End Sub

Fin Codigo
Ads by Google
Search Busqueda sugerida