Imprimir por orden de filtro

29/04/2005 - 10:16 por Rafa | Informe spam
Hola:

Necesito imprimir por una especie de filtro. Me explico. Tengo una hoja con
datos en columnas. Referencia, Descripcion, Familia, Proveedor, precio etc...
Pues yo los ordeno por proveedor y quiro imprimir todos los articulos por
provvedores e decir a proveedor por hoja sin que se mezclen en una misma hoja
mas de un proveedor. Yo ahora lo que hago es, filtro, imprimo, filtro e
imprimo, pero necesitaba algo automático si existe claro

Muchas gracias
 

Leer las respuestas

#1 Héctor Miguel
30/04/2005 - 06:06 | Informe spam
hola, Rafa !

... una hoja con datos en columnas. Referencia, Descripcion, Familia, Proveedor, precio etc...
... imprimir... los articulos... a proveedor por hoja sin que se mezclen
... ahora lo que hago es, filtro, imprimo, filtro e imprimo, pero necesitaba algo automatico si existe claro...



una forma 'rapida' y [medio] 'burda' pudiera ser como el ejemplo que te expongo al final ;)
estoy suponiendo que el titulo de: 'Proveedor' esta ubicado en la celda 'D1' de la hoja 'activa'
-> observa que en el codigo hay varias referencias usando la notacion 'abreviada' de: ->[d1]<-
-> cambia la letra 'd' por la letra de la columna 'real' <-
el codigo 'activa' un autofiltro para 'esa' columna [y al final lo 'desaparece']
-> cambia [mientras corres pruebas] la instruccion .PrintOut Copies:=1 a... ->.PrintPreview<-
'recorta' [en pruebas] el alcance del bucle de: For Sig = 2 To Listado.Count a... -> For Sig = 2 To 5
-> si [ademas] requires que la 'impresion' del filtrado salga 'ordenada'... sera necesario cambiar a una matriz
[en lugar de usar un objeto 'Collection'] y otra macro intermedia para hacer el 'ordenamiento'
->ya comentaras si es 'indispensable'<- :))

si cualquier duda... comentas?
saludos,
hector.
en un modulo de codigo 'normal' ==Sub Impresion_Filtrada()
Application.ScreenUpdating = False
Dim Celda As Range, Filtrando As String, _
Listado As New Collection, Sig As Integer
With ActiveSheet
If .[d1].AutoFilter Then .[d1].AutoFilter
Filtrando = .Range(.[d1], .[d65536].End(xlUp)).Address
For Each Celda In .Range(Filtrando)
On Error Resume Next
Listado.Add Celda, CStr(Celda)
Next
For Sig = 2 To Listado.Count
.Range(Filtrando).AutoFilter Field:=1, _
Criteria1:="=" & Listado.Item(Sig)
.PrintOut Copies:=1
Next
.[d1].AutoFilter
End With
End Sub

Preguntas similares