Ayuda con código

05/09/2008 - 14:30 por José Rafael | Informe spam
Buenos díasa todos
Necesito completar el código grabado que expongo de acuerdo con los
comentarios añadidos.
Se trata de que en un mismo libro donde existen las hojas que figuran en el
código expuesto, se extraigan de un determinado rango (paginaxreferencia) en
la hoja "Listado definitivo" mediante el autofiltro las referencias
correspondientes a una hoja del catalogo y pegarlas (trasponiendolas) en la
otra hoja "Hojas catálogo definitivo" en la misma fila de donde se ha
extraido el valor para el "criterial" del autofiltro de la primera hoja
inidicada. Tengo Windows XP y Excel 2003. Por si sirve de algo la base de
datos de la hoja "Listado definitivo" comprende las columnas A (referencia
de articulo) y B (página del catálogo) el rango se llama paginaxreferencia y
comprende A2:B15410.
El código:
Sub ponereferenciasporpaginadelcatalogo()
'
' ponereferenciasporpaginadelcatalogo Macro
' Macro grabada el 05/09/2008 por hes040
'
' Acceso directo: CTRL+r
Dim pagina As String
Dim referencias As Range

Sheets("Hojas catálogo definitivo").Select
'Aqui debería empezar un bucle que fuera desde A2 hasta A??? = (última
celda escrita)
referencias = Range("A2").Select ' esta es la primera página
pagina = ActiveCell.Value

Sheets("Listado definitivo").Select
Range("A2").Select
Selection.AutoFilter
Selection.AutoFilter Field:=2, Criteria1:="1.10" ' el valor de criterial
deberia ser como el valor de pagina
Range("A2:A200").Select
Selection.Copy
Sheets("Hojas catálogo definitivo").Select
Range("B2").Select ' misma fila pero en columna B que el rango de
referencias
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=True

Sheets("Listado definitivo").Select

Selection.AutoFilter

Sheets("Hojas catálogo definitivo").Select
'final del bucle
End Sub

Saludos

Jose Rafael de Valencia (España)

Preguntas similare

Leer las respuestas

#1 José Rafael
10/09/2008 - 12:15 | Informe spam
Por favor, ¿alguien me puede ayudar?.
Saludos
José Rafael



"José Rafael" escribió en el mensaje
news:
Buenos díasa todos
Necesito completar el código grabado que expongo de acuerdo con los
comentarios añadidos.
Se trata de que en un mismo libro donde existen las hojas que figuran en
el código expuesto, se extraigan de un determinado rango
(paginaxreferencia) en la hoja "Listado definitivo" mediante el autofiltro
las referencias correspondientes a una hoja del catalogo y pegarlas
(trasponiendolas) en la otra hoja "Hojas catálogo definitivo" en la misma
fila de donde se ha extraido el valor para el "criterial" del autofiltro
de la primera hoja inidicada. Tengo Windows XP y Excel 2003. Por si sirve
de algo la base de datos de la hoja "Listado definitivo" comprende las
columnas A (referencia de articulo) y B (página del catálogo) el rango se
llama paginaxreferencia y comprende A2:B15410.
El código:
Sub ponereferenciasporpaginadelcatalogo()
'
' ponereferenciasporpaginadelcatalogo Macro
' Macro grabada el 05/09/2008 por hes040
'
' Acceso directo: CTRL+r
Dim pagina As String
Dim referencias As Range

Sheets("Hojas catálogo definitivo").Select
'Aqui debería empezar un bucle que fuera desde A2 hasta A??? = (última
celda escrita)
referencias = Range("A2").Select ' esta es la primera página
pagina = ActiveCell.Value

Sheets("Listado definitivo").Select
Range("A2").Select
Selection.AutoFilter
Selection.AutoFilter Field:=2, Criteria1:="1.10" ' el valor de
criterial deberia ser como el valor de pagina
Range("A2:A200").Select
Selection.Copy
Sheets("Hojas catálogo definitivo").Select
Range("B2").Select ' misma fila pero en columna B que el rango de
referencias
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=True

Sheets("Listado definitivo").Select

Selection.AutoFilter

Sheets("Hojas catálogo definitivo").Select
'final del bucle
End Sub

Saludos

Jose Rafael de Valencia (España)



Respuesta Responder a este mensaje
#2 Héctor Miguel
11/09/2008 - 00:18 | Informe spam
hola, José Rafael !

Por favor, alguien me puede ayudar?...



(segun yo) tu consulta no es muy clara y los detalles que expones mezclados con los comentarios son confusos :((

no tengo "armado" (y a la vista) un arreglo exactamente igual al que pudieran contener "tus" hoja en la realidad -?-
pero creo que podemos empezar con un acercamiento +/- como el siguiente:

el codigo "asume" que los datos en la hoja "listado definitivo" estan SOLO en las columnas A y B
por lo que tienes libres a partir de la columna C, y estoy usando las columnas D y E para usar los filtros avanzados

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

Sub PonReferenciasPorPaginaDelCatalogo()
Dim Pagina As Range
With Worksheets("hojas catálogo definitivo)
For Each Pagina In .Range(.Range("a2"), .Range("a65536").End(xlUp))
With Wotksheets("listado definitivo").Range("a1").CurrentRegion
.Parent.Range("d1:e1").Value = .Cells(1, 2).Value: .Parent.Range("d2").Value = Celda.Value
.AdvancedFilter xlFilterCopy, .Parent.Range("d1:d2"), .Parent.Range("e1"), False
With .Parent.Range(.Parent.Range("e1"), .Parent.Range("e65536").End(xlUp))
Celda.Offset(, 1).Resize(, .Rows.Count).Value = Application.Transpose(.Value)
End With
End With
Next
End With
End Sub
Respuesta Responder a este mensaje
#3 José Rafael
12/09/2008 - 09:54 | Informe spam
Buenos días:
Hola Héctor, muchas gracias por la ayuda.
En primer término, no funciona el código porque se queda parado en la línea
6:

.Parent.Range("d1:e1").Value = .Cells(1, 2).Value: AQUI ->
.Parent.Range("d2").Value = Celda.Value

No entiendo lo que pueda ser, pero si ves el código que pasé, se trata de
que al hacer un autofiltro en la hoja "Listado definitivo" ... en la columna
B fila 2 (y siguentes filas) está el dato de la página del catálogo
(criterial) que te permite cada vez extraer en la columna A las referencias
que tiene esa página para trasladarlas a la otra hoja "Hojas catálogo
definitivo" pegandolas trasponiendolas (es decir, en la misma fila).
Francamente no he entendido para que necesitas las otras columnas que
figuran en tu código debe ser porque yo no sé "leer" el código... a no
ser que tenga algo que ver con la cantidad de datos expuestos en un
autofilter (creo que máximo 1.000 aprox.)... en fin ... si puedes seguir
ayudandome te lo agradecería...
Datos:
Hoja "Listado definitivo" -
Columna A son referencias de ocho digitos en el formato xxx.xx.xxx. (no hay
ninguna referencia repetida)
Columna B son las páginas de catálogo en el formato -> 1.1 hasta 15.300,
donde el primer número corresponde al grupo de articulos (1 a 15) y despues
del punto la página que puede ser desde la 1 a la 300 en esta columna
existen repeticiones de las páginas (por eso el autofilter que las saca
únicas).

Hoja "Hojas catálogo definitivo" -
Columna A son las páginas del catálogo sin repeticiones y en la columna B y
sucesivas quiero que se peguen trasponiendo, las distintas referencias
copiadas de la otra hoja "Listado definitivo" columna A, cuando se hayan
copiado despues de hacer un autofilter de una sola página y sucesivamente de
las siguientes páginas mediante un loop como el que has hecho.
Espero que me haya podido hacer comprender...



Saludos cordiales
José Rafael




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

Por favor, alguien me puede ayudar?...



(segun yo) tu consulta no es muy clara y los detalles que expones
mezclados con los comentarios son confusos :((

no tengo "armado" (y a la vista) un arreglo exactamente igual al que
pudieran contener "tus" hoja en la realidad -?-
pero creo que podemos empezar con un acercamiento +/- como el siguiente:

el codigo "asume" que los datos en la hoja "listado definitivo" estan SOLO
en las columnas A y B
por lo que tienes libres a partir de la columna C, y estoy usando las
columnas D y E para usar los filtros avanzados

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

Sub PonReferenciasPorPaginaDelCatalogo()
Dim Pagina As Range
With Worksheets("hojas catálogo definitivo)
For Each Pagina In .Range(.Range("a2"), .Range("a65536").End(xlUp))
With Wotksheets("listado definitivo").Range("a1").CurrentRegion
.Parent.Range("d1:e1").Value = .Cells(1, 2).Value:
.Parent.Range("d2").Value = Celda.Value
.AdvancedFilter xlFilterCopy, .Parent.Range("d1:d2"),
.Parent.Range("e1"), False
With .Parent.Range(.Parent.Range("e1"),
.Parent.Range("e65536").End(xlUp))
Celda.Offset(, 1).Resize(, .Rows.Count).Value =
Application.Transpose(.Value)
End With
End With
Next
End With
End Sub

Respuesta Responder a este mensaje
#4 Héctor Miguel
12/09/2008 - 14:30 | Informe spam
hola, José Rafael !

... no funciona el codigo porque se queda parado en la linea 6:

.Parent.Range("d1:e1").Value = .Cells(1, 2).Value: AQUI -> .Parent.Range("d2").Value = Celda.Value
(...)



creo que pudiera ser ocasionado por "saltos de linea" al copiar/pegar desde el mensaje -?-
prueba con el siguiente "arreglo" (menos largo) en cada linea...

si cualquier duda... comentas ?
saludos,
hector.

Sub PonReferenciasPorPaginaDelCatalogo()
Dim Pagina As Range
With Worksheets("hojas catálogo definitivo)
For Each Pagina In .Range(.Range("a2"), _
.Range("a65536").End(xlUp))
With Wotksheets("listado definitivo").Range("a1").CurrentRegion
.Parent.Range("d1:e1").Value = .Cells(1, 2).Value
.Parent.Range("d2").Value = Celda.Value
.AdvancedFilter xlFilterCopy, _
.Parent.Range("d1:d2"), .Parent.Range("e1"), False
With .Parent.Range(.Parent.Range("e1"), _
.Parent.Range("e65536").End(xlUp))
Celda.Offset(, 1).Resize(, .Rows.Count).Value = _
Application.Transpose(.Value)
End With
End With
Next
End With
End Sub
Respuesta Responder a este mensaje
#5 Héctor Miguel
13/09/2008 - 05:51 | Informe spam
hola (de nuevo) José Rafael !

... no funciona el codigo porque se queda parado en la linea 6:

.Parent.Range("d1:e1").Value = .Cells(1, 2).Value: AQUI -> .Parent.Range("d2").Value = Celda.Value
(...)





re/re/visando el codigo de la propuesta, acabo de percatarme del error...
la costumbre de hacer bucles cuando hago referencia a rangos usando una variable llamada "Celda" :-((

en la propuesta, trate de adaptarla a la variable de tu codigo (Pagina) pero cai en la inercia en su segunda y tercera llamada
(precisamente en la linea donde se presenta el error) donde la vuelvo a "llamar" con el nombre acostumbrado (Celda) :(

prueba ahora cambiando las llamadas a la variable "Celda" por la variable "Pagina"...
si cualquier duda... comentas ?
saludos,
hector.

Sub PonReferenciasPorPaginaDelCatalogo()
Dim Pagina As Range
With Worksheets("hojas catálogo definitivo)
For Each Pagina In .Range(.Range("a2"), _
.Range("a65536").End(xlUp))
With Wotksheets("listado definitivo").Range("a1").CurrentRegion
.Parent.Range("d1:e1").Value = .Cells(1, 2).Value
.Parent.Range("d2").Value = Pagina.Value
.AdvancedFilter xlFilterCopy, _
.Parent.Range("d1:d2"), .Parent.Range("e1"), False
With .Parent.Range(.Parent.Range("e2"), _
.Parent.Range("e65536").End(xlUp))
Pagina.Offset(, 1).Resize(, .Rows.Count).Value = _
Application.Transpose(.Value)
End With
End With
Next
End With
End Sub
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida