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

#1 Manuel Maza
05/07/2006 - 17:36 | Informe spam
Hola,

solamente tienes que selecionar la hoja de calculo por completo
seleccionando CTRL y A al mismo tiempo

despues elige la opcion edit\copiar
eEn la hoja donde quieres pasar los datos elige la opcion edit\pegado
especial

selecciona pegar vinculo
Click en OK .
"Zatid" wrote in message
news:
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

Respuesta Responder a este mensaje
#2 Zatid
05/07/2006 - 19:30 | Informe spam
Gracias Manuel, pero esa opción no me sirve, por que si alguién llega a
insertar nuevas filas todo se daña, yo tengo pensado hacerlo mediante VBA,
la verdad estoy intentando hacer un ciclo más o menos como este:

For j = 1 To filastabla2

For i = 1 To filastabla1

documeto = Worksheets("Hoja2").Cells(j, 1)
base = Worksheets("Hoja1").Cells(i, 1)

If base <> documento Then

i = i + 0

Else
j = j + 1


End If

Next

Worksheets("Hoja2").Cells(j, 1).Copy
rango_tabla1.End(xlDown).Select
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.PasteSpecial xlPasteValues

Next

El problema es que si encuentra por ejemplo un valor igual en los primeros
lugares del ciclo j y el ciclo i ya va a terminar entonces con la en la
condición si ni se cumple a j le umenta uno, pues luego en la parte que
realiza la copia, copia es el valor siguiente de j más no el que interesaba,
no sé como solucionar este problema.




"Manuel Maza" escribió en el mensaje
news:%
Hola,

solamente tienes que selecionar la hoja de calculo por completo
seleccionando CTRL y A al mismo tiempo

despues elige la opcion edit\copiar
eEn la hoja donde quieres pasar los datos elige la opcion edit\pegado
especial

selecciona pegar vinculo
Click en OK .
"Zatid" wrote in message
news:
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





Respuesta Responder a este mensaje
#3 Juan M
06/07/2006 - 15:30 | Informe spam
hola

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.








por los datos que has facilitado la impresion de lo que estas haciendo es
juntar los clientes con sus datos,
para eso funcionan muy bien los autofiltros, o bien, ordenar la hoja por el
id del cliente.

si de todas formas lo que quieres hacer es copiar los datos de los clientes
y llevarlos a otra hoja prueba con esta macro

un saludo
juan

PD: Lo mismo he simplificado demasiado la tarea, si despues de ver el
resultado no es lo que quieres comentas.
Tambien seria bueno conocer los 'arreglos' de las hojas que estas
empleando, para no tener 'desagradables' efectos al ejecutar los
procedimientos.

=Inicio Codigo

Sub CopiaOrdena()
Dim MiRango As Range

'Copia
With Worksheets("Hoja1")
Set MiRango = .Range(.Range("A2"), .Range("B" &
.Rows.Count).End(xlUp))
MiRango.Copy Destination:=Worksheets("Hoja3").Range("A1")
End With
'Ordena
With Worksheets("Hoja2")
Set MiRango = .Range(.Range("A1"), .Range("B" &
.Rows.Count).End(xlUp))
MiRango.Sort key1:=.Range("A1"), order1:=xlAscending,
header:=xlGuess
End With
Set MiRango = Nothing

End Sub

=Fin Codigo


"Zatid" escribió en el mensaje
news:
Gracias Manuel, pero esa opción no me sirve, por que si alguién llega a
insertar nuevas filas todo se daña, yo tengo pensado hacerlo mediante VBA,
la verdad estoy intentando hacer un ciclo más o menos como este:

For j = 1 To filastabla2

For i = 1 To filastabla1

documeto = Worksheets("Hoja2").Cells(j, 1)
base = Worksheets("Hoja1").Cells(i, 1)

If base <> documento Then

i = i + 0

Else
j = j + 1


End If

Next

Worksheets("Hoja2").Cells(j, 1).Copy
rango_tabla1.End(xlDown).Select
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.PasteSpecial xlPasteValues

Next

El problema es que si encuentra por ejemplo un valor igual en los primeros
lugares del ciclo j y el ciclo i ya va a terminar entonces con la en la
condición si ni se cumple a j le umenta uno, pues luego en la parte que
realiza la copia, copia es el valor siguiente de j más no el que
interesaba, no sé como solucionar este problema.




"Manuel Maza" escribió en el mensaje
news:%
Hola,

solamente tienes que selecionar la hoja de calculo por completo
seleccionando CTRL y A al mismo tiempo

despues elige la opcion edit\copiar
eEn la hoja donde quieres pasar los datos elige la opcion edit\pegado
especial

selecciona pegar vinculo
Click en OK .
"Zatid" wrote in message
news:
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









Respuesta Responder a este mensaje
#4 Zatid
06/07/2006 - 18:01 | Informe spam
Mil gracias por responder Juan, lo que sucede es que con tu macro me copia
todo el rango y va y lo pega en la otra hoja, listo hasta hay no hay
problemas, pero lo que pasa es que yo necesito que si por ejemplo el próximo
mes ya no existe un ID de cliente que si estaba el mes anterior no me queda
constancia ya que el copia y pega todo, es por eso que quiero hacer una
macro que me copie y me pege solamente las diferencias entre las dos hojas.

Cordial saludo,



"Juan M" escribió en el mensaje
news:
hola

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.








por los datos que has facilitado la impresion de lo que estas haciendo es
juntar los clientes con sus datos,
para eso funcionan muy bien los autofiltros, o bien, ordenar la hoja por
el id del cliente.

si de todas formas lo que quieres hacer es copiar los datos de los
clientes y llevarlos a otra hoja prueba con esta macro

un saludo
juan

PD: Lo mismo he simplificado demasiado la tarea, si despues de ver el
resultado no es lo que quieres comentas.
Tambien seria bueno conocer los 'arreglos' de las hojas que estas
empleando, para no tener 'desagradables' efectos al ejecutar los
procedimientos.

=Inicio Codigo

Sub CopiaOrdena()
Dim MiRango As Range

'Copia
With Worksheets("Hoja1")
Set MiRango = .Range(.Range("A2"), .Range("B" &
.Rows.Count).End(xlUp))
MiRango.Copy Destination:=Worksheets("Hoja3").Range("A1")
End With
'Ordena
With Worksheets("Hoja2")
Set MiRango = .Range(.Range("A1"), .Range("B" &
.Rows.Count).End(xlUp))
MiRango.Sort key1:=.Range("A1"), order1:=xlAscending,
header:=xlGuess
End With
Set MiRango = Nothing

End Sub

=Fin Codigo


"Zatid" escribió en el mensaje
news:
Gracias Manuel, pero esa opción no me sirve, por que si alguién llega a
insertar nuevas filas todo se daña, yo tengo pensado hacerlo mediante
VBA, la verdad estoy intentando hacer un ciclo más o menos como este:

For j = 1 To filastabla2

For i = 1 To filastabla1

documeto = Worksheets("Hoja2").Cells(j, 1)
base = Worksheets("Hoja1").Cells(i, 1)

If base <> documento Then

i = i + 0

Else
j = j + 1


End If

Next

Worksheets("Hoja2").Cells(j, 1).Copy
rango_tabla1.End(xlDown).Select
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.PasteSpecial xlPasteValues

Next

El problema es que si encuentra por ejemplo un valor igual en los
primeros lugares del ciclo j y el ciclo i ya va a terminar entonces con
la en la condición si ni se cumple a j le umenta uno, pues luego en la
parte que realiza la copia, copia es el valor siguiente de j más no el
que interesaba, no sé como solucionar este problema.




"Manuel Maza" escribió en el mensaje
news:%
Hola,

solamente tienes que selecionar la hoja de calculo por completo
seleccionando CTRL y A al mismo tiempo

despues elige la opcion edit\copiar
eEn la hoja donde quieres pasar los datos elige la opcion edit\pegado
especial

selecciona pegar vinculo
Click en OK .
"Zatid" wrote in message
news:
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













Respuesta Responder a este mensaje
#5 Juan M
06/07/2006 - 18:54 | Informe spam
hola zatid

creo que deberias dar algun dato mas, porque me parece que una macro
planteada de esa forma a base de bucles que recorren los dos rangos es una
temeridad.

si tienes 10000 registros en una hoja y en la otra 100 deberias recorrerla
1000000 de veces lo cual me parece que es excesivo aunque lo haga el
ordenador, ademas que cada vez iria aumentando su tama#o.

por otro lado si dentro de tus datos estan las fechas se puede arreglar para
no tener que realizar las busquedas entre todos los datos, o indicarle desde
que fecha debe añadir al final de la otra serie de datos.

otra cuestion seria saber como vas agregando los datos a la primera hoja, si
partes de una hoja que cada mes limpias y empiezas de cero o si va a ser un
conjunto, en cuyo caso te vuelvo a sugerir el empleo de autofiltros (por
cierto, por que esta solucion no te gusta?) . Por lo que has comentado me
parece que si lo limpias pero me gustaria la confirmacion.

un arreglo para la macro que te propuse es la que te indico al final

a la espera de tu informacion o comentarios

un saludo
juan

=Inicio Codigo

Sub CopiaOrdena()
Dim MiRango As Range

'Copia y pega a partir de la ultima fila con valor
With Worksheets("Hoja1")
Set MiRango = .Range(.Range("A2"), .Range("B" &
.Rows.Count).End(xlUp))
MiRango.Copy Destination:=Worksheets("Hoja3").Range("A" &
.Rows.Count).End(xlUp).Offset(1)
End With
'Ordena
With Worksheets("Hoja3")
Set MiRango = .Range(.Range("A1"), .Range("B" &
.Rows.Count).End(xlUp))
MiRango.Sort key1:=.Range("A1"), order1:=xlAscending,
header:=xlGuess
End With
Set MiRango = Nothing

End Sub

=Fin Codigo

"Zatid" escribió en el mensaje
news:%
Mil gracias por responder Juan, lo que sucede es que con tu macro me copia
todo el rango y va y lo pega en la otra hoja, listo hasta hay no hay
problemas, pero lo que pasa es que yo necesito que si por ejemplo el
próximo mes ya no existe un ID de cliente que si estaba el mes anterior no
me queda constancia ya que el copia y pega todo, es por eso que quiero
hacer una macro que me copie y me pege solamente las diferencias entre las
dos hojas.

Cordial saludo,

Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida