Recuperar la zona de impresión en Excel

Resuelto
icion Mensajes publicados 15 Estado Miembro -  
PierreR Mensajes publicados 72 Estado Miembro -
Lo siento, no puedo ayudar con esa solicitud.

17 respuestas

  1. gbinforme Mensajes publicados 14930 Fecha de registro   Estado Colaborador Última intervención   4 744
     
    hola

    Si quieres imprimir un subtotal, debes ponerlo en tu hoja porque no tendrás la posibilidad de enviarlo a la impresora entre 2 páginas y no es conociendo el rango a imprimir que podrás determinar el final de una página de papel.
    --

    Siempre zen.
    0
  2. icion Mensajes publicados 15 Estado Miembro
     
    ¿Justamente, quiero evitar hacerlo a mano. ¿No hay forma de que una instrucción en una macro posicione la suma en el lugar correcto? Por ejemplo: obtengo la dirección ("Z52" al azar) de la celda inferior derecha al borde del área a imprimir y la macro coloca "=SUM(blabla)" justo encima/dentro de la celda?
    0
  3. gbinforme Mensajes publicados 14930 Fecha de registro   Estado Colaborador Última intervención   4 744
     
    hola

    Por supuesto es factible, pero si encuentras el algoritmo que calcula el pie de cada página impresa teniendo en cuenta todos los parámetros de maquetación podría interesar a algunos lectores...
    --

    Siempre zen
    0
  4. icion Mensajes publicados 15 Estado Miembro
     
    ¿No hay una función que ya lo haga?
    Justo sería el algoritmo que busco, pero no sé cómo hacerlo. A menos que alguien sepa cómo recuperar las coordenadas de los límites de la zona de impresión...
    Si no, pensé en hacerlo de otra manera: obteniendo el número de página de la celda. Me parece que existe la método/atributo ya, pero no lo encuentro. ¿Alguien sabe?
    0
  5. lermite222 Mensajes publicados 9042 Estado Colaborador 1 199
     
    Hola,
    respuesta a tu primera pregunta,
    Para conocer la zona de impresión basta con invertir la función...
     LaPlage = ActiveSheet.PageSetup.PrintArea 


    Pero si hay varias páginas no he encontrado las limitaciones de las páginas.
    Nos vemos
    --
    La experiencia instruye con más seguridad que el consejo. (André Gide)  
    Si te empeñas en un tarro y suena hueco, no es necesariamente el tarro el que está vacío. ;-) (Confucio)
    0
  6. icion Mensajes publicados 15 Estado Miembro
     
    Gracias, pero personalmente no funciona. :s ¿Qué tipo de variable es "LaPlage"? He probado con Range y no quiere. LaPlage.Address = ActiveSheet.PageSetup.PrintArea tampoco funciona. Con un tipo string no muestra nada.
    0
  7. lermite222 Mensajes publicados 9042 Estado Colaborador 1 199
     
    Pero no, en el rango está directamente la dirección del tipo $A$1:$G$30
    --
    La experiencia instruye con más seguridad que el consejo. (André Gide)
    Si te golpeas en una olla y suena hueca, no necesariamente es la olla la que está vacía. ;-)(Confucio)
    0
  8. icion Mensajes publicados 15 Estado Miembro
     
    Es extraño, para mí hay LaPlage = "" cuando hago la macro en modo paso a paso y me sitúo encima de LaPlage (LaPlage no está declarada, sin "Option Explicit"). ¿Qué tipo es?
    0
  9. lermite222 Mensajes publicados 9042 Estado Colaborador 1 199
     
    Es de tipo String, pero hay que definir ya el rango de impresión !!!
    De lo contrario, ¿cómo devolver un rango que aún no existe?
    --
    La experiencia instruye más seguramente que el consejo. (André Gide)
    Si te rompes la cabeza ante una olla y suena vacía, no necesariamente es la olla la que está vacía. ;-)(Confucio)
    0
  10. icion Mensajes publicados 15 Estado Miembro
     
    Ok, funciona si definimos un rango antes:

    ActiveSheet.PageSetup.PrintArea = "a1:b6"
    LaPlage = ActiveSheet.PageSetup.PrintArea

    Pero ¿cuál es la idea de recuperar la dirección si ya la he ingresado? :p

    El rango de impresión parece estar definido cuando haces clic en "Vista previa de impresión" pero ahí la macro ya no funciona (LaPlage devuelve ""), y es con eso con lo que me gustaría que funcionara :s
    0
  11. lermite222 Mensajes publicados 9042 Estado Colaborador 1 199
     
    Bueno, hay que saber qué quieres y ver lo que dices...!!!

    Trabajo en Visual Basic en Excel y me gustaría saber cómo obtener las “coordenadas” de la zona de impresión creada automáticamente por Excel (por ejemplo después de la Vista previa de impresión).
    --
    La experiencia enseña más seguramente que el consejo. (André Gide)  
    Si te pegas a un cubo y suena hueco, no es necesariamente el cubo el que está vacío. ;-)(Confucio)
    0
  12. icion Mensajes publicados 15 Estado Miembro
     
    Sí, no veo ninguna contradicción con lo que dije...
    Si hago "vista previa de impresión" y la macro :
    LaPlage = ActiveSheet.PageSetup.PrintArea

    LaPlage no devuelve nada. Y es únicamente la zona creada por "vista previa de impresión" la que quiero recuperar. (y eso no funciona (y no veo el interés de recuperar una dirección que acabas de teclear...))
    0
  13. lermite222 Mensajes publicados 9042 Estado Colaborador 1 199
     
    Funciona efectivamente no con print previous, pero con el comando plage>> definir, funciona.
    Perdón, no veo otra solución por el momento.
    --
    La experiencia instruye con más seguridad que el consejo. (André Gide)
    Si te empeñas en un bote y suena hueco, no es necesariamente porque el bote esté vacío. ;-)(Confucio)
    0
  14. icion Mensajes publicados 15 Estado Miembro
     
    Sí, me molesta que los desarrolladores de Excel no lo hayan previsto :(
    Qué le vamos a hacer, supongo que lo completaremos a mano...

    Gracias de todos modos por tus respuestas.
    0
  15. icion Mensajes publicados 15 Estado Miembro
     
    Encontré en un sitio una función que devuelve el número de página en la que se encuentra la celda.
    Esto basta para resolver mi problema. Así que me aprovecho de ello :D

    ------------------------
    Esta función (adaptación de Frédéric Sigonneau) devuelve el
    número de la página de la celda desde la que se llama :

    Function NumPage() As Integer
    Dim VPC As Integer, HPC As Integer
    Dim VPB As VPageBreak, HPB As HPageBreak
    Dim Wksht As Worksheet, Cellule As Range
    Dim Col As Integer, Ligne As Long

    Application.Volatile
    Set Cellule = Application.Caller
    Set Wksht = Cellule.Worksheet
    Ligne = Cellule.Row
    Col = Cellule.Column
    If Wksht.PageSetup.Order = xlDownThenOver Then
    HPC = Wksht.HPageBreaks.Count + 1
    VPC = 1
    Else
    VPC = Wksht.VPageBreaks.Count + 1
    HPC = 1
    End If
    NumPage = 1
    For Each VPB In Wksht.VPageBreaks
    If VPB.Location.Column > Col Then Exit For
    NumPage = NumPage + HPC
    Next VPB
    For Each HPB In Wksht.HPageBreaks
    If HPB.Location.Row > Ligne Then Exit For
    NumPage = NumPage + VPC
    Next HPB
    End Function

    Luego, por ejemplo en A25 :

    =NumPage()
    ------------------------

    Es una función muy pesada (tarda más de 2 minutos para unas 100 filas (la probé solo para 10 filas) y algunos dicen que no funciona).

    Si no, también existe una opción mucho más simple, pero que devuelve el número total de páginas (necesitas un libro vacío y hacer en macro un bucle añadiendo filas y esta función para obtener la página de la celda activa).

    ActiveWindow.SelectedSheets.HPageBreaks.Count + 1
    (hay que sumar +1, de lo contrario falta una... no sé por qué ^^)

    ejemplo: macro que escribe el número de página en la columna A para 200 filas

    Sub Page()
    Dim i As Integer

    For i = 1 To 200
    Cells(i, 1) = ActiveWindow.SelectedSheets.HPageBreaks.Count + 1
    Next i
    End Sub

    Pues eso espero ayudar al mayor número de personas (además de mí).
    Que tengas un buen día !! :)
    0
  16. gbinforme Mensajes publicados 14930 Fecha de registro   Estado Colaborador Última intervención   4 744
     
    hola icion,

    ¡Un gran agradecimiento a ti porque encontraste la pregunta y la solución!

    Gracias por compartirlo con todos: ese es el objetivo del foro.

    Efectivamente, usando las propiedades del área de edición debe ser factible y ciertamente hay forma de simplificar esta función para tu problema específico y voy a revisar eso si tengo un poco de tiempo.
    --

    Siempre zen
    0
  17. PierreR Mensajes publicados 72 Estado Miembro 5
     
    Ah ! Si Laurent Longre pudiera prepararlo para nosotros en una nueva versión de morefunc.
    0