Excel - IMPRIMIR SERIES DESDE EXCEL

 
Vista:
sin imagen de perfil

IMPRIMIR SERIES DESDE EXCEL

Publicado por Diego (41 intervenciones) el 21/09/2021 19:15:57
Buenos días, estimados amigos del foro, de antemano gracias por leer mi inquietud
espero me puedan ayudar.....tengo 4 columnas con información (series, pedido, código y cliente ) y deseo imprimir por cada pedido todas las series que contiene ese pedido valga la redundancia. Además que nos despliegue el código y el numero de pedido que estamos imprimiendo....adjunto el archivo q utilizo actualmente pero al momento lo hago casi manual....espero me puedan ayudar.....En la pestaña "imprimir" se encuentra el formato que debo imprimir, en la pestaña series pego las series y el la pestaña BASE pego la base de datos con numero de cliente y numero de pedido.....gracias espero me haya dado a entender ...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

IMPRIMIR SERIES DESDE EXCEL

Publicado por tpa10 (6 intervenciones) el 22/09/2021 14:06:30
Hola

He creado una macro que hace aproximadamente lo que quieres, solo que NO lo imprime cada vez,
sino que genera unas nuevas hojas con el numero del pedido en el libro excel para que tu la puedas imprimir individualmente.
Se respetan las hojas "IMPRIMIR", "SERIES", "BASE".
Se borran el resto de hojas cada vez que se ejecuta.
En la hoja SERIES hay que poner cabecera en la fila 1... "SERIE" y "PEDIDO".
Se verifica que la estructura de las hojas del libro sea la adecuada y sino... se finaliza.
Se ordenan las hojas ascendentemente.
No se alteran ni modifican las hojas originales.

Y creo que he hecho aprox lo que solicitabas... y no me he dejado nada...
Espero que te sirva como base para modificarla a tu gusto.
A la macro la he llamado "A_IMPRIMIR_SERIES_BASE".

Sal-u2 by TPA
BYE



Option Explicit
Option Base 1 'para que los arrays empiecen por 1

Sub MacrosRapidasInicio(valor As Integer)
Application.ScreenUpdating = False
' Application.Calculation = xlCalculationManual
Application.EnableEvents = False
ActiveSheet.DisplayPageBreaks = False
End Sub

Sub MacrosRapidasFin(valor As Integer)
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
' ActiveSheet.DisplayPageBreaks=True
Application.CutCopyMode = False
End Sub


'-----------------------------------------------------------------------
'-----------------------------------------------------------------------
'-----------------------------------------------------------------------

Sub A_IMPRIMIR_SERIES_BASE()
'
Dim Hoja As Worksheet
Dim estaHojaBASE As Integer
Dim estaHojaSERIES As Integer
Dim estaHojaIMPRIMIR As Integer
Dim filas_BASE As Integer
Dim filas_SERIES As Integer

Dim numero_PEDIDO As String
Dim conta_CODIGOS As Integer
Dim conta_SERIES As Integer
Dim filas1, filas2 As Long
Dim fila, columna As Integer

Call MacrosRapidasInicio(1)

'Borrar hojas que se usan
Application.DisplayAlerts = False
estaHojaBASE = 0
estaHojaSERIES = 0
estaHojaIMPRIMIR = 0
For Each Hoja In Worksheets
Select Case Hoja.Name
Case "BASE"
estaHojaBASE = 1
Case "SERIES"
estaHojaSERIES = 1
Case "IMPRIMIR"
estaHojaIMPRIMIR = 1
Case Else
Hoja.Delete
End Select
Next Hoja
Application.DisplayAlerts = True
'comprobamos que existan las tres hojas necesarias
If estaHojaBASE = 0 _
Or estaHojaSERIES = 0 _
Or estaHojaIMPRIMIR = 0 _
Then
Exit Sub
End If

'comprobamos que la estructuras de las hojas sean correctas...
Sheets("BASE").Select
If Range("A1").Value = "PEDIDO" _
And Range("B1").Value = "CODIGO" _
And Range("C1").Value = "CLIENTE" _
Then
filas_BASE = Range("A" & Rows.Count).End(xlUp).Row
' ordenar ascendentemente por A=PEDIDO, B=CODIGO, C=CLIENTE
Cells.Select
ActiveWorkbook.Worksheets("BASE").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("BASE").Sort.SortFields. _
Add Key:=Range("A2:A" & filas_BASE), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("BASE").Sort.SortFields. _
Add Key:=Range("B2:B" & filas_BASE), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("BASE").Sort.SortFields. _
Add Key:=Range("C2:C" & filas_BASE), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("BASE").Sort
.SetRange Range("A1:C" & filas_BASE)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Else
Exit Sub
End If
Sheets("SERIES").Select
If Range("A1").Value = "SERIE" _
And Range("B1").Value = "PEDIDO" _
Then
filas_SERIES = Range("A" & Rows.Count).End(xlUp).Row
' ordenar ascendentemente por B=PEDIDO, A=SERIE
Cells.Select
ActiveWorkbook.Worksheets("SERIES").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("SERIES").Sort.SortFields. _
Add Key:=Range("B2:B" & filas_SERIES), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("SERIES").Sort.SortFields. _
Add Key:=Range("A2:A" & filas_SERIES), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("SERIES").Sort
.SetRange Range("A1:B" & filas_SERIES)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Else
Exit Sub
End If
Sheets("IMPRIMIR").Select
If Range("D2").Value = "PEDIDO " _
And Range("D4").Value = "CLIENTE" _
And Range("A6").Value = "CODIGOS" _
Then
' Ya de paso limpiamos el contenido de la hoja de impresion
Range("B11:I110").Select
Selection.ClearContents
Range("C7:I8").Select
Selection.ClearContents
Else
Exit Sub
End If

' procesamos la hoja BASE
numero_PEDIDO = ""
Sheets("BASE").Select
For filas1 = 2 To filas_BASE
If Range("BASE!A" & filas1).Value <> numero_PEDIDO _
Then
numero_PEDIDO = Range("BASE!A" & filas1).Value

Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Select ' La selecciona
ActiveSheet.Name = numero_PEDIDO ' le cambia el nombre

Sheets("IMPRIMIR").Select
Range("A1:I121").Select
Selection.Copy
Sheets(numero_PEDIDO).Select
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Range("E2").Value = Range("BASE!A" & filas1).Value
Range("E4").Value = Range("BASE!C" & filas1).Value
Range("C6").Value = Range("BASE!B" & filas1).Value

conta_SERIES = 0
For filas2 = 2 To filas_SERIES
If Range("SERIES!B" & filas2).Value = numero_PEDIDO _
Then
conta_SERIES = conta_SERIES + 1
fila = 11 + ((conta_SERIES - 1) \ 8)
columna = 2 + ((conta_SERIES - 1) Mod 8)
Cells(fila, columna).Value = "'" & Range("SERIES!A" & filas2).Value
End If
Next filas2
Else
Range("C6").Value = Range("C6").Value & " " & Range("BASE!B" & filas1).Value
End If
Next filas1

'Y volvemos a la hoja de Notas inicial
Call MacrosRapidasFin(1)

Sheets("BASE").Select
Range("A1").Select
End Sub

Sub SERIES()

End Sub

Sub LIMPIAR()
'
' LIMPIAR Macro
'

'
Sheet("IMPRIMIR").Select
Range("B11:I110").Select
Selection.ClearContents
Sheets("SERIES").Select
Columns("A:A").Select
Selection.ClearContents
Range("A1").Select
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

IMPRIMIR SERIES DESDE EXCEL

Publicado por Diego (41 intervenciones) el 22/09/2021 19:06:15
Buen día, Tpa10.....mil gracias me sirvió muchísimo. Y si es correcto el código se acerca a lo q necesito.......lo probé y me sirvió mucho,,,, gracias infinitas.....una ultima cosa en caso de ser factible, bueno en realidad son 3 cosas jeje( disculpe el abuso) 1.-en que parte del código puedo aumentar a 10 columnas en la plantilla (al momento tengo 8, es decir 800 series x hoja, quisiera q fuera 1000 por hoja)intenté pero no pude...2.- me puede ayudar a poner en cualquier campo la cantidad de series q estamos por imprimir?....y la 3era...puedo poner un formato de firma al final de cada documento?? (es decir al final de cada documento que diga "firma de recepción, fecha y cedula")....si no se puede de antemano muchísimas gracias...por todo...me han ayudado demasiado. Y he aprendido más todavía
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

IMPRIMIR SERIES DESDE EXCEL

Publicado por tpa10 (6 intervenciones) el 23/09/2021 04:07:13
No problem.

1.-
para cambiar de 8 a 10 columnas.... hay que hacerlo en varios sitios.
(en realidad tan solo es cambiar la columna maxima de la "I" a la "K" y de 8 a 10)

Dentro de "Sub A_IMPRIMIR_SERIES_BASE"
para8columnas -> Range("B11:I110").Select
para10columnas -> Range("B11:K110").Select
para8columnas -> Range("A1:I121").Select
para10columnas -> Range("A1:K121").Select
para8columnas -> fila = 11 + ((conta_SERIES - 1) \ 8)
para10columnas -> fila = 11 + ((conta_SERIES - 1) \ 10)
para8columnas -> columna = 2 + ((conta_SERIES - 1) Mod 8)
para10columnas -> columna = 2 + ((conta_SERIES - 1) Mod 10)

En realidad no se necesita esta parte que ya estaba en el fichero, pero si se hacen las cosas se hacen bien y listo.
Dentro de "Sub LIMPIAR"
para8columnas->Range("B11:I110").Select
para10columnas->Range("B11:K110").Select


2.-
para colocar/ver el número total de series. ejemplo en B9

...buscar y cambiar la lineas...
Next filas2
Else
...por las lineas ...
Next filas2
If conta_SERIES = 1 Then
Range("B9").Value = "existe " & conta_SERIES & " serie"
End If
If conta_SERIES > 1 Then
Range("B9").Value = "existen " & conta_SERIES & " series"
End If
Else
... findelcambio

3.-
firma final

Cuando se crea un documento nuevo se usa como plantilla la hoja IMPRIMIR, desde el rango ...
para8columnas -> Range("A1:I121").Select
para10columnas -> Range("A1:K121").Select
Puedes perfectamente editar y personalizar a tu gusto la hoja IMPRIMIR entre ese rango.
Y si quieres hacerlo más grande... pues cambias el valor "121" por el que desees, por ejemplo "150",
y de esta sencilla forma se cambiará/ampliará con los valores que hayas querido asignar.
para8columnas -> Range("A1:I150").Select
para10columnas -> Range("A1:K150").Select
Las celdas en blanco del rango no afectan para nada.

Lo importante no es que copies y peques el texto de la macro y que te funcione,
sino que lo entiendas... y que luego te lo puedas hacer tu mismo.

Sal-U2 by TPA
BYE
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

IMPRIMIR SERIES DESDE EXCEL

Publicado por Diego (41 intervenciones) el 23/09/2021 16:03:28
Gracias amigo con tu gran ayuda por supuesto que cada vez entiendo mejor y se aprende mucho....eres un capo.....voy a hacer los cambios que necesito ....ayer ya lo probé y sali 1 hora antes de mi trabajo...jejeje....gracias mil gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

IMPRIMIR SERIES DESDE EXCEL

Publicado por Diego (41 intervenciones) el 23/09/2021 16:53:13
Estimado TPA, ya realice los cambios y comprendi mejor.....me costo un poco pero al fin lo logré....solo una novedad y con esto esatria todo excelente......le adjunte una firma dentro del rango (en la pestaña imprimir)....pero cuando sobrepasan mas de 1000 series......se imprimen enciam de la firma.....adjunto unas imagenes para que me comprenda mejor......hay alguna opción para que la firma salga al final de cada documento??.....es q aveces imprimo 50 series... aveces 1000 series y aveces hasta 10.000 series.....creo q eso no lo dije al principio mil disculpas
Captura1
Captura2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar