Recuperer la zone d'impression sur Excel
Résolu/Fermé
icion
Messages postés
15
Date d'inscription
lundi 5 janvier 2009
Statut
Membre
Dernière intervention
15 janvier 2010
-
5 janv. 2009 à 20:41
PierreR Messages postés 58 Date d'inscription mercredi 10 août 2011 Statut Membre Dernière intervention 10 novembre 2018 - 5 mai 2012 à 19:49
PierreR Messages postés 58 Date d'inscription mercredi 10 août 2011 Statut Membre Dernière intervention 10 novembre 2018 - 5 mai 2012 à 19:49
A voir également:
- Recuperer la zone d'impression sur Excel
- Spouleur d'impression - Guide
- Zone telechargement - Guide
- Liste déroulante excel - Guide
- Comment recuperer un message supprimé sur whatsapp - Guide
- Recuperer video youtube - Guide
17 réponses
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 684
5 janv. 2009 à 22:15
5 janv. 2009 à 22:15
bonjour
Si tu veux imprimer un sous-total, il faut le mettre sur ta feuille car tu n'auras pas la possibilité de l'envoyer à l'imprimante entre 2 pages et ce n'est pas en connaissant la plage à imprimer que tu vas pouvoir déterminer la fin d'une page papier.
Si tu veux imprimer un sous-total, il faut le mettre sur ta feuille car tu n'auras pas la possibilité de l'envoyer à l'imprimante entre 2 pages et ce n'est pas en connaissant la plage à imprimer que tu vas pouvoir déterminer la fin d'une page papier.
icion
Messages postés
15
Date d'inscription
lundi 5 janvier 2009
Statut
Membre
Dernière intervention
15 janvier 2010
5 janv. 2009 à 23:25
5 janv. 2009 à 23:25
Justement, je voudrais éviter d'avoir à le faire à la main. Il n'y a pas moyen qu'une instruction dans une macro place le somme au bon endroit ?
Du style : je récupère l'adresse ("Z52" au pif) de la cellule inférieure droite au bord de la zone à imprimer et la macro place "=sum(blabla)" juste au dessus/dans la cellule ?
Du style : je récupère l'adresse ("Z52" au pif) de la cellule inférieure droite au bord de la zone à imprimer et la macro place "=sum(blabla)" juste au dessus/dans la cellule ?
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 684
6 janv. 2009 à 11:56
6 janv. 2009 à 11:56
bonjour
Bien sûr c'est réalisable, mais si tu trouves l'algorithme qui calcule le bas de chaque page imprimée en tenant compte de tous les paramètres de mise en page cela pourrait intéresser quelques lecteurs...
Bien sûr c'est réalisable, mais si tu trouves l'algorithme qui calcule le bas de chaque page imprimée en tenant compte de tous les paramètres de mise en page cela pourrait intéresser quelques lecteurs...
icion
Messages postés
15
Date d'inscription
lundi 5 janvier 2009
Statut
Membre
Dernière intervention
15 janvier 2010
6 janv. 2009 à 12:07
6 janv. 2009 à 12:07
Il n'y a pas de fonction qui le fasse déjà ?
Justement ce serait l'algorithme que je cherche, mais je ne vois pas comment faire. Sauf si quelqu'un sait comment récuperer les coordonnées des limites de la zone d'impression...
Sinon je pensais faire autrement : en récupérant le numéro de page de la cellule. Il me semble qu'il y a la methode/attribut qui existe déja mais je ne le trouve pas. Quelqu'un sait ?
Justement ce serait l'algorithme que je cherche, mais je ne vois pas comment faire. Sauf si quelqu'un sait comment récuperer les coordonnées des limites de la zone d'impression...
Sinon je pensais faire autrement : en récupérant le numéro de page de la cellule. Il me semble qu'il y a la methode/attribut qui existe déja mais je ne le trouve pas. Quelqu'un sait ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
lermite222
Messages postés
8702
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
6 janv. 2009 à 12:31
6 janv. 2009 à 12:31
Bonjour,
réponse à ta 1ère question,
Pour connaître la zone d'impression suffit de renverser la fonction...
Mais s'il y a plusieurs pages j'ai pas trouvé les limitations des pages.
A+
réponse à ta 1ère question,
Pour connaître la zone d'impression suffit de renverser la fonction...
LaPlage = ActiveSheet.PageSetup.PrintArea
Mais s'il y a plusieurs pages j'ai pas trouvé les limitations des pages.
A+
icion
Messages postés
15
Date d'inscription
lundi 5 janvier 2009
Statut
Membre
Dernière intervention
15 janvier 2010
6 janv. 2009 à 12:48
6 janv. 2009 à 12:48
Merci mais perso ça ne marche pas. :s
C'est quoi comme type la variable "LaPlage" ? J'ai essayé avec Range et il n'en veut pas.
LaPlage.Address = ActiveSheet.PageSetup.PrintArea ne marche pas non plus.
Avec un type string ça n'affiche rien.
C'est quoi comme type la variable "LaPlage" ? J'ai essayé avec Range et il n'en veut pas.
LaPlage.Address = ActiveSheet.PageSetup.PrintArea ne marche pas non plus.
Avec un type string ça n'affiche rien.
lermite222
Messages postés
8702
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
6 janv. 2009 à 13:05
6 janv. 2009 à 13:05
Mais non, dans la plage il y a directement l'adresse du type $A$1:$G$30
icion
Messages postés
15
Date d'inscription
lundi 5 janvier 2009
Statut
Membre
Dernière intervention
15 janvier 2010
6 janv. 2009 à 14:01
6 janv. 2009 à 14:01
C'est bizarre, moi il y a LaPlage = "" quand je fais la macro en mode pas à pas et que je me met au dessus de LaPlage (LaPlage n'étant pas déclarée, sans "Option Explicit").
C'est quoi comme type ?
C'est quoi comme type ?
lermite222
Messages postés
8702
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
6 janv. 2009 à 14:29
6 janv. 2009 à 14:29
C'est du type String, mais il faut que la plage d'impression soit déjà définie !!!
Sinon, comment renvoyer une plage qui n'existe pas encore.
Sinon, comment renvoyer une plage qui n'existe pas encore.
icion
Messages postés
15
Date d'inscription
lundi 5 janvier 2009
Statut
Membre
Dernière intervention
15 janvier 2010
6 janv. 2009 à 15:33
6 janv. 2009 à 15:33
Ok, ça fonctionne si on définit une plage avant :
ActiveSheet.PageSetup.PrintArea = "a1:b6"
LaPlage = ActiveSheet.PageSetup.PrintArea
Mais où est l'interet de récuperer l'adresse si je l'ai déja entrée ? :p
La plage d'impression semble être définie quand on clique sur "Apercu avant impression" mais là macro ne fonctionne plus avec (LaPlage renvoie ""), et c'est avec cela que je voudrais que ça fonctionne :s
ActiveSheet.PageSetup.PrintArea = "a1:b6"
LaPlage = ActiveSheet.PageSetup.PrintArea
Mais où est l'interet de récuperer l'adresse si je l'ai déja entrée ? :p
La plage d'impression semble être définie quand on clique sur "Apercu avant impression" mais là macro ne fonctionne plus avec (LaPlage renvoie ""), et c'est avec cela que je voudrais que ça fonctionne :s
lermite222
Messages postés
8702
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
6 janv. 2009 à 17:56
6 janv. 2009 à 17:56
Bon, faudrait savoir ce que tu veux et voir ce que tu dit...!!!
Je travaille en Visual Basic sur Excel et je voudrais savoir comment récupérer les "coordonnées" de la zone d'impression créée automatiquement par Excel (après "Aperçu avant impression" par exemple).
Je travaille en Visual Basic sur Excel et je voudrais savoir comment récupérer les "coordonnées" de la zone d'impression créée automatiquement par Excel (après "Aperçu avant impression" par exemple).
icion
Messages postés
15
Date d'inscription
lundi 5 janvier 2009
Statut
Membre
Dernière intervention
15 janvier 2010
6 janv. 2009 à 18:49
6 janv. 2009 à 18:49
Oui, je ne vois pas de contradiction avec ce que j'ai dit...
Si je fais "aperçu avant impression" et la macro :
LaPlage = ActiveSheet.PageSetup.PrintArea
LaPlage ne renvoie rien. Et c'est uniquement la zone créée par "aperçu avant impression" que je veux récuperer. (or ça ne fonctionne pas (et je ne vois pas l'intérêt de récupérer une adresse qu'on vient de taper...))
Si je fais "aperçu avant impression" et la macro :
LaPlage = ActiveSheet.PageSetup.PrintArea
LaPlage ne renvoie rien. Et c'est uniquement la zone créée par "aperçu avant impression" que je veux récuperer. (or ça ne fonctionne pas (et je ne vois pas l'intérêt de récupérer une adresse qu'on vient de taper...))
lermite222
Messages postés
8702
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
6 janv. 2009 à 19:14
6 janv. 2009 à 19:14
Ca fonctionne effectivement pas avec print previous, mais avec la commande plage>> définir ça fonctionne.
Désolé, je vois pas d'autre solution pour le moment.
Désolé, je vois pas d'autre solution pour le moment.
icion
Messages postés
15
Date d'inscription
lundi 5 janvier 2009
Statut
Membre
Dernière intervention
15 janvier 2010
6 janv. 2009 à 19:19
6 janv. 2009 à 19:19
Oui, ça m'énerve que les développeurs d'Excel n'aient pas prévu ça :(
Tant pis, on remplira à la main je crois...
Merci quand même pour tes réponses.
Tant pis, on remplira à la main je crois...
Merci quand même pour tes réponses.
icion
Messages postés
15
Date d'inscription
lundi 5 janvier 2009
Statut
Membre
Dernière intervention
15 janvier 2010
9 janv. 2009 à 15:24
9 janv. 2009 à 15:24
J'ai trouvé sur un site une fonction qui renvoie le numéro de la page sur lequel se trouve la cellule.
Cela suffit à regler mon probleme. Je vous en fait donc profiter :D
------------------------
Cette fonction (adaptation de Frédéric Sigonneau) renvoie le
numéro de la page de la cellule où elle est appelée :
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
Ensuite, en A25 par exemple :
=NumPage()
------------------------
C'est une fonction très lourde (elle met plus de 2 min pour une 100aine de ligne (je ne l'ai testée que pour une 10aine de lignes) et certains disent qu'elle ne fonctionne pas.
Sinon j'ai aussi beaucoup plus simple, mais qui renvoie le nombre total de page (donc il faut un classeur vide et faire en macro une boucle avec ajout de ligne et cette fonction pour avoir la page de la cellule active).
ActiveWindow.SelectedSheets.HPageBreaks.Count + 1
(il faut +1 sinon il manque 1... je ne sais pas pourquoi ^^)
exemple : macro qui écrit le numéro de page dans la colonne A sur 200 lignes
Sub Page()
Dim i As Integer
For i = 1 To 200
Cells(i, 1) = ActiveWindow.SelectedSheets.HPageBreaks.Count + 1
Next i
End Sub
Voila j'espère aider un maximum de personnes (en plus de moi).
Bonne fin de journée !! :)
Cela suffit à regler mon probleme. Je vous en fait donc profiter :D
------------------------
Cette fonction (adaptation de Frédéric Sigonneau) renvoie le
numéro de la page de la cellule où elle est appelée :
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
Ensuite, en A25 par exemple :
=NumPage()
------------------------
C'est une fonction très lourde (elle met plus de 2 min pour une 100aine de ligne (je ne l'ai testée que pour une 10aine de lignes) et certains disent qu'elle ne fonctionne pas.
Sinon j'ai aussi beaucoup plus simple, mais qui renvoie le nombre total de page (donc il faut un classeur vide et faire en macro une boucle avec ajout de ligne et cette fonction pour avoir la page de la cellule active).
ActiveWindow.SelectedSheets.HPageBreaks.Count + 1
(il faut +1 sinon il manque 1... je ne sais pas pourquoi ^^)
exemple : macro qui écrit le numéro de page dans la colonne A sur 200 lignes
Sub Page()
Dim i As Integer
For i = 1 To 200
Cells(i, 1) = ActiveWindow.SelectedSheets.HPageBreaks.Count + 1
Next i
End Sub
Voila j'espère aider un maximum de personnes (en plus de moi).
Bonne fin de journée !! :)
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 684
9 janv. 2009 à 17:42
9 janv. 2009 à 17:42
bonjour icion,
Un grand merci à toi car tu as trouvé la question et la solution !
Merci d'en faire profiter tout le monde : c'est le but du forum.
Effectivement en utilisant les propriétés de la zone d'édition ce doit être faisable et il y a certainement moyen de simplifier cette fonction pour ton problème spécifique et je vais regarder cela si j'ai un peu de temps.
Un grand merci à toi car tu as trouvé la question et la solution !
Merci d'en faire profiter tout le monde : c'est le but du forum.
Effectivement en utilisant les propriétés de la zone d'édition ce doit être faisable et il y a certainement moyen de simplifier cette fonction pour ton problème spécifique et je vais regarder cela si j'ai un peu de temps.
PierreR
Messages postés
58
Date d'inscription
mercredi 10 août 2011
Statut
Membre
Dernière intervention
10 novembre 2018
5
5 mai 2012 à 19:49
5 mai 2012 à 19:49
Ah ! Si Laurent Longre pouvait nous mitonner ça dans une nouvelle version de morefunc !