Macro: Copiar y pegar de una hoja a otra

11/06/2007 - 00:28 por Bucanero | Informe spam
Hola,
Tengo un problemilla, y es que tengo una hoja en la que estan los datos
globales que obtengo todas las semanas, de los cuales al aplicales una serie
de filtros, voy obteniendo unos datos que copio y pego en otra hoja
manualmente. Esto lo quiero hacer con una macro, con la cual al aplicar el
primer filtro lo copia y lo pega en la otra hoja, pero al aplicar el
siguiente filtro lo copia y lo pega encima del anterior. lo que necesito es
saber como puedo identificar la primera celda de la fila que está vacía
despues de pegar la primera serie de filas obtenidas con el primer filtro
(utilizo 11 filtros y 20 columnas ).
Muchas gracia de antemano por vuestra ayuda.

Preguntas similare

Leer las respuestas

#6 Ivan
13/06/2007 - 01:40 | Informe spam
hola,

aunque ahora no tengo mucho tiempo (hasta dentro de un ratillo, je,
je..) prueba una cosa:

en =>> Set BD = .Worksheets("lanorf")

reescribe el nombre de la hoja (entre las comillas) y prueba de
nuevo . El rror nueve suele querer decir que no se encuentra el
elemento mencionado, y puede que aunque no lo parezca, el nombre de la
hoja este mal escrito. Escribe el que pone en la pestalña de la hoja y
tal y como este (copialo si quieres y pegalo entre las comillas)

tambien asegurate de que las ref esten en la columna C y los
intervalos numericos en la E. El resto, creo, deberia dar lo mismo.

si pruebas, si quieres comentas. En un rato volvere ante el trasto
este y le echo un ojo con mas calma.

un saludo
Ivan

PD:
1- Salta de la primera linea de tu código a la quinta sin leer las
intermedias, es decir de Sub FiltrarPorRefYCantidad()

a With ThisWorkbook



no te preocupes, (creo que) es normal, pues las lineas intermedias es
la declaracion de variables
Respuesta Responder a este mensaje
#7 Bucanero
13/06/2007 - 23:26 | Informe spam
Hola, ya estoy aquí, soy el pesado de siempre.

He probado lo que me has dicho y sigo igual. No obstante creo que también se
podria filtar por la columna "E" que es la que tiene más criterios de
filtrado y luego por la columna "C" que son criterios fijos y quizas más
facil de copiar y pegar en las otras hojas.

Seguiré intentandolo y te lo comento.

Si quieres que te envie el famoso fichero dimelo. Mi correo es:



Gracias.

"Ivan" escribió:

hola,

aunque ahora no tengo mucho tiempo (hasta dentro de un ratillo, je,
je..) prueba una cosa:

en =>> Set BD = .Worksheets("lanorf")

reescribe el nombre de la hoja (entre las comillas) y prueba de
nuevo . El rror nueve suele querer decir que no se encuentra el
elemento mencionado, y puede que aunque no lo parezca, el nombre de la
hoja este mal escrito. Escribe el que pone en la pestalña de la hoja y
tal y como este (copialo si quieres y pegalo entre las comillas)

tambien asegurate de que las ref esten en la columna C y los
intervalos numericos en la E. El resto, creo, deberia dar lo mismo.

si pruebas, si quieres comentas. En un rato volvere ante el trasto
este y le echo un ojo con mas calma.

un saludo
Ivan

PD:
> 1- Salta de la primera linea de tu código a la quinta sin leer las
> intermedias, es decir de Sub FiltrarPorRefYCantidad()
>
> a With ThisWorkbook

no te preocupes, (creo que) es normal, pues las lineas intermedias es
la declaracion de variables



Respuesta Responder a este mensaje
#8 Ivan
14/06/2007 - 00:29 | Informe spam
On 13 jun, 23:26, Bucanero wrote:
Hola, ya estoy aquí, soy el pesado de siempre.

He probado lo que me has dicho y sigo igual. No obstante creo que también se
podria filtar por la columna "E" que es la que tiene más criterios de
filtrado y luego por la columna "C" que son criterios fijos y quizas más
facil de copiar y pegar en las otras hojas.

Seguiré intentandolo y te lo comento.

Si quieres que te envie el famoso fichero dimelo. Mi correo es:



Gracias.

"Ivan" escribió:



> hola,

> aunque ahora no tengo mucho tiempo (hasta dentro de un ratillo, je,
> je..) prueba una cosa:

> en =>> Set BD = .Worksheets("lanorf")

> reescribe el nombre de la hoja (entre las comillas) y prueba de
> nuevo . El rror nueve suele querer decir que no se encuentra el
> elemento mencionado, y puede que aunque no lo parezca, el nombre de la
> hoja este mal escrito. Escribe el que pone en la pestalña de la hoja y
> tal y como este (copialo si quieres y pegalo entre las comillas)

> tambien asegurate de que las ref esten en la columna C y los
> intervalos numericos en la E. El resto, creo, deberia dar lo mismo.

> si pruebas, si quieres comentas. En un rato volvere ante el trasto
> este y le echo un ojo con mas calma.

> un saludo
> Ivan

> PD:
> > 1- Salta de la primera linea de tu código a la quinta sin leer las
> > intermedias, es decir de Sub FiltrarPorRefYCantidad()

> > a With ThisWorkbook

> no te preocupes, (creo que) es normal, pues las lineas intermedias es
> la declaracion de variables- Ocultar texto de la cita -

- Mostrar texto de la cita -



hola,

es extraño que te siga dando el error 9 en ese punto, sobre todo si te
has asegurado de volver a escribir el nombre de la hoja. Solo un par
de pruebas/preguntas/comentarios antes de buscar otras vias:

1ª) el libro en que has pegado la macro se supone que es el mismo que
el que contiene la hoja ("lanorf").

De no ser asi, deberias cambiar esto=>>

With ThisWorkbook

por algo parecido a esto=>>

With Workbooks("<aqui_nombre_del_libro_que_contiene_la_lista>")

2ª)tienes en uso el nombre BD en alguna otra parte del archivo? y el
de 'Ianorf'?

3º) aunque no se hasta que punto podria influir ¿tienes algun objeto
(graficos, etc) incrustado en la hoja?


4ª ¿donde has pegado el codigo? debe (o al menos creo que seria mejor)
de ir en un modulo 'normal'. Si no lo tienes claro ve al menu insertar
del editor de VBA y elige Modulo a secas (o no se si existe la
posibilidad de que ponga Modulo Standard, normal, etc, ¡¡¡ pero NO
'Modulo de clase'!!!) y traslada el codigo a este nuevo modulo.

Nota: los modulos Thisworkbook, Hoja1, Hoja2, etc, NO son normales,
son modulos de clase

.en fin, el problema es que, si el error te lo diera en algun
sitio posterior, habria bastantes posibilidades de error, pero en este
punto, y que yo sepa, ese error lo que viene a decir es que no existe
una hoja con ese nombre en el libro que tiene el codigo.

de todas formas, y aunque no creo que cambie la cosa, prueba a cambiar
la expresion Worksheets por Sheets a secas (con el punto delante)

bueno, si ves que siguen los errores tras +/- comprobar estos puntos,
comentas

un saludo
Ivan

PD: en cuanto a esto:

. No obstante creo que también se
podria filtar por la columna "E" que es la que tiene más criterios de
filtrado y luego por la columna "C" que son criterios fijos



aunque no estoy del todo seguro, la verdad es que en este ejemplo el
filtro es 'unico', por decirlo de alguna manera e implica el
cumplimiento de todas las condiciones a la vez, aunque es cierto que a
lo mejor se deberia poner 1º el que menos posibilidades tenga de
coincidir para asi ir descartando al no cumplirse la primera parte de
la funcion 'Y'. en estre caso seria cuestion de ir probando cambiando
el orden de los criterios a ver cual es mas rapido, pero si no son
exageradamente muchos registros, no creo que la diferencia fuera
significativamente perceptible


PPD: > Si quieres que te envie el famoso fichero dimelo. Mi correo es:

aunque no te puedo asegurar que te responda y tampoco soy ningun
experto si ves que no encuentras la solucion, quita lo evidente de mi
correo y le echo un ojo
Respuesta Responder a este mensaje
#9 Bucanero
15/06/2007 - 10:33 | Informe spam
Buenos dias,

Siento no harberte dicho nada ayer, pero salí de cdasa a las 5:30 am y
regresé a las 22:30, (me super explotaron en el curro). En fin, he probado a
copiar la macro en el mismo libro, y empieza afuncionar pues ya no me dá el
error 9, pero al porer todos los elementos de filtrado, me dice: "Se ha
producido el error 13 en tienpo de ejecución. No coinciden los tipos."

Esto me aparece al llegar a la línea que te indico a continuación:

Sub FiltrarPorRefYCantidad()
Dim hj As Worksheet, BD As Worksheet, criterio As String, _
ultF As Long, ultF_BD As Long, rngDestino As String, _
matrizCriterios, n As Integer
With ThisWorkbook
Set BD = .Worksheets("lanorf")
With BD
If .AutoFilterMode Then .AutoFilterMode = False
On Error Resume Next
.ShowAllData
On Error GoTo 0
.[v1:v2].ClearContents
End With
For Each hj In .Worksheets
With hj
If .Name <> "lanorf" Then
BD.[a1:t1].Copy .[a1]
If .Name = "A-320" Then _
matrizCriterios = Array(",e2>!5000,e2<!6100)", _
",e2>!3100,e2<!3900) ", _
",e2$2100)", _
",e2&1200)", _
",e2(4200)", _
",e2>61100,e261200)", _
",e262200)", _
",e2&1300)", _
",e2>I0000,e2<I9000)", _
",e2>p0000,e2<y0000)")

**==> For n = LBound(matrizCriterios) To UBound(matrizCriterios)
<==**

ultF = .[c65536].End(xlUp).Row + 1
rngDestino = "a" & ultF & ":t" & ultF
criterio = "=and(c2=""" & .Name & """" & matrizCriterios(n)
With BD
.[v2].Formula = criterio
ultF_BD = .[c65536].End(xlUp).Row
.Range("a1:t" & ultF_BD).AdvancedFilter _
action:=xlFilterCopy, _
criteriarange:=.[v1:v2], _
copytorange:=hj.Range(rngDestino), _
unique:=False
.[v2].Clear
End With
.Rows(ultF).Delete
Next
.Columns.AutoFit
End If
End With
Next
End With
Set BD = Nothing
End Sub

Te la he copiado completa por si tu ves alguna que otra metedura de pata que
haya podido cometer (cosa muy normal en mi).

En fin, no puedo continuar en este momento pues tengo que seguir currando.

Gracias otra vez.

"Ivan" escribió:

On 13 jun, 23:26, Bucanero wrote:
> Hola, ya estoy aquí, soy el pesado de siempre.
>
> He probado lo que me has dicho y sigo igual. No obstante creo que también se
> podria filtar por la columna "E" que es la que tiene más criterios de
> filtrado y luego por la columna "C" que son criterios fijos y quizas más
> facil de copiar y pegar en las otras hojas.
>
> Seguiré intentandolo y te lo comento.
>
> Si quieres que te envie el famoso fichero dimelo. Mi correo es:
>
>
>
> Gracias.
>
> "Ivan" escribió:
>
>
>
> > hola,
>
> > aunque ahora no tengo mucho tiempo (hasta dentro de un ratillo, je,
> > je..) prueba una cosa:
>
> > en =>> Set BD = .Worksheets("lanorf")
>
> > reescribe el nombre de la hoja (entre las comillas) y prueba de
> > nuevo . El rror nueve suele querer decir que no se encuentra el
> > elemento mencionado, y puede que aunque no lo parezca, el nombre de la
> > hoja este mal escrito. Escribe el que pone en la pestalña de la hoja y
> > tal y como este (copialo si quieres y pegalo entre las comillas)
>
> > tambien asegurate de que las ref esten en la columna C y los
> > intervalos numericos en la E. El resto, creo, deberia dar lo mismo.
>
> > si pruebas, si quieres comentas. En un rato volvere ante el trasto
> > este y le echo un ojo con mas calma.
>
> > un saludo
> > Ivan
>
> > PD:
> > > 1- Salta de la primera linea de tu código a la quinta sin leer las
> > > intermedias, es decir de Sub FiltrarPorRefYCantidad()
>
> > > a With ThisWorkbook
>
> > no te preocupes, (creo que) es normal, pues las lineas intermedias es
> > la declaracion de variables- Ocultar texto de la cita -
>
> - Mostrar texto de la cita -

hola,

es extraño que te siga dando el error 9 en ese punto, sobre todo si te
has asegurado de volver a escribir el nombre de la hoja. Solo un par
de pruebas/preguntas/comentarios antes de buscar otras vias:

1ª) el libro en que has pegado la macro se supone que es el mismo que
el que contiene la hoja ("lanorf").

De no ser asi, deberias cambiar esto=>>

With ThisWorkbook

por algo parecido a esto=>>

With Workbooks("<aqui_nombre_del_libro_que_contiene_la_lista>")

2ª)tienes en uso el nombre BD en alguna otra parte del archivo? y el
de 'Ianorf'?

3º) aunque no se hasta que punto podria influir ¿tienes algun objeto
(graficos, etc) incrustado en la hoja?


4ª ¿donde has pegado el codigo? debe (o al menos creo que seria mejor)
de ir en un modulo 'normal'. Si no lo tienes claro ve al menu insertar
del editor de VBA y elige Modulo a secas (o no se si existe la
posibilidad de que ponga Modulo Standard, normal, etc, ¡¡¡ pero NO
'Modulo de clase'!!!) y traslada el codigo a este nuevo modulo.

Nota: los modulos Thisworkbook, Hoja1, Hoja2, etc, NO son normales,
son modulos de clase

..en fin, el problema es que, si el error te lo diera en algun
sitio posterior, habria bastantes posibilidades de error, pero en este
punto, y que yo sepa, ese error lo que viene a decir es que no existe
una hoja con ese nombre en el libro que tiene el codigo.

de todas formas, y aunque no creo que cambie la cosa, prueba a cambiar
la expresion Worksheets por Sheets a secas (con el punto delante)

bueno, si ves que siguen los errores tras +/- comprobar estos puntos,
comentas

un saludo
Ivan

PD: en cuanto a esto:

>. No obstante creo que también se
> podria filtar por la columna "E" que es la que tiene más criterios de
> filtrado y luego por la columna "C" que son criterios fijos

aunque no estoy del todo seguro, la verdad es que en este ejemplo el
filtro es 'unico', por decirlo de alguna manera e implica el
cumplimiento de todas las condiciones a la vez, aunque es cierto que a
lo mejor se deberia poner 1º el que menos posibilidades tenga de
coincidir para asi ir descartando al no cumplirse la primera parte de
la funcion 'Y'. en estre caso seria cuestion de ir probando cambiando
el orden de los criterios a ver cual es mas rapido, pero si no son
exageradamente muchos registros, no creo que la diferencia fuera
significativamente perceptible


PPD: > Si quieres que te envie el famoso fichero dimelo. Mi correo es:

aunque no te puedo asegurar que te responda y tampoco soy ningun
experto si ves que no encuentras la solucion, quita lo evidente de mi
correo y le echo un ojo


Respuesta Responder a este mensaje
#10 Ivan
15/06/2007 - 16:27 | Informe spam
hola de nuevo,

Siento no harberte dicho nada ayer, pero salí de cdasa a las 5:30 am y
regresé a las 22:30



no te preocupes, cada cual tenemos nuestra vida, aparte de que lo que comentas me suena bastante.

vamos al meollo, ahora que, al menos, parece que empezamos a movernos

el unico motivo que a 1ª vista le encuentro al error 13 en el punto que comentas es que, al no incluir una
inicializacion de la variable 'matrizCriterios' en el caso de que la hoja no se llame "A-320" la matriz no existe (al
menos si la 1ª hoja no es esta, aunque si lo fuera, seguramente no te daria el error 13, pero habria otros
'inconvenientes'), con lo que (y si no me equivoco) estas intentando contar uvas en un desierto (por decirlo de alguna
manera) y vba te dice que las uvas no nacen en el desierto (no me hagas mucho caso, pues, aparte de horterada, lo mismo
acabo de decir una tontuna, aunque algo de esto si debe haber)

prueba a incluir la mtriz criterios en el caso de que la hoja no sea "A-320" mas o menos asi:=>

If .Name = "A-320" Then _
matrizCriterios = Array(",e2>!5000,e2<!6100)", _
",e2>!3100,e2<!3900) ", _
",e2$2100)", _
",e2&1200)", _
",e2(4200)", _
",e2>61100,e261200)", _
",e262200)", _
",e2&1300)", _
",e2>I0000,e2<I9000)", _
",e2>p0000,e2<y0000)") _


else _
matrizCriterios = Array(<aqui los criterios si es otra referencia>)

fijate que seguimos con guiones de continuacion de linea, por lo que no es necesario incluir un End If

bueno, a ver si con suerte damos otro paso, porque de momento no se me ocurre otra posibilidad para el error y el punto
que comentas

un saludo y cuando puedas comentas como vamos (sin prisas)

Ivan

PD: solo por tranquilizarte, a mi me funciona perfectamente desde el principio, asi que supongo que lograremos que a ti
tambien.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida