Zone d'impression
J'ai une document qui contient Plus de 1000 lignes et je souhaiterai avec une boite de dialogue pouvoir permettre aux utilisateur de ce fichier de modifier la zone d'impression selon le nombre de page voulu.
Je m'explique :
J'ai une zone d'impression qui va de B1 à K54, c'est ma page 1.
La page 2 va de B55 à K117
La page 3 de B118 à K184 et ainsi de suite sur 11 pages
Je souhaiterai que l'utilisateur puisse indiquer le nombre de page qu'il souhaite imprimer dans une boite de dialogue et que, de ce fait, la zone d'impression s'ajuste.
Par exemple, si l'utilisateur ne veut qu'1 page, la zone d'impression sera de B1 à K54. Si l'utilisateur veut 2 pages, la zone d'impression devient B1 à K117. Si l'utilisateur veut 3 pages, la zone d'impression devient B1 à K184 et ainsi de suite.
J'ai farfouillé un peu partout mais je ne trouve pas (et ne comprends pas) comment faire.
Pourriez-vous m'aider svp ?
Merci.
Salut Samaos,
Un fichier modèle aurait été le bienvenu !
Dans le fichier ci-joint, je te montre une des très nombreuses possibilités d'effectuer ce que tu demandes. Mais cette solution n'est très probablement pas adaptée à ton fichier.
Je n'ai placé aucun garde-fou : inscris donc uniquement des chiffres ronds dans la fenêtre qui s'ouvre au départ de la macro. Pour l'exemple, j'ai limité le nombre de pages à imprimer à 3.
Et afin d'économiser du papier, j'ai mis en place un aperçu avant impression.
Cordialement.
Bonsoir Yvouille,
Désolé pour ma réponse tardive..
Merci pour ton aide! Ça fait totalement ce que je voulais!!
J'ai adapté à comme suivant pour mon fichier avec les bonnes plages de pages pour faire 11 pages et le début de code pour l'appliquer à une forme en "3D" plus qu'à un bouton standard (Lubie esthétique de ma part... :-))
Merci beaucoup !!!
Sujet résolu..
Option Explicit
Public b
Sub Imprimer()
Set b = ActiveSheet.Shapes(Application.Caller)
With b.ThreeD
.BevelTopType = msoBevelSoftRound
.BevelTopInset = 12
.BevelTopDepth = 4
End With
Application.OnTime Now + 0.000005, "rbouton2"
End Sub
Sub rbouton2()
With b.ThreeD
.BevelTopType = msoBevelCircle
.BevelTopInset = 6
.BevelTopDepth = 6
End With
Dim Texte1 As Variant
Texte1 = Application.InputBox("Merci d'indiquer le nombre de page à imprimer", "Options d'impression")
If Texte1 = False Then
MsgBox ("Opération annulée"), vbInformation, "Alerte"
Exit Sub
ElseIf Texte1 = "" Then
MsgBox ("Merci d'indiquer un nombre de page"), vbExclamation, "Alerte"
Exit Sub
ElseIf Texte1 = 1 Then
ActiveSheet.PageSetup.PrintArea = "$B$1:$K$58"
ElseIf Texte1 = 2 Then
ActiveSheet.PageSetup.PrintArea = "$B$1:$K$125"
ElseIf Texte1 = 3 Then
ActiveSheet.PageSetup.PrintArea = "$A$1:$K$192"
ElseIf Texte1 = 4 Then
ActiveSheet.PageSetup.PrintArea = "$A$1:$K$259"
ElseIf Texte1 = 5 Then
ActiveSheet.PageSetup.PrintArea = "$A$1:$K$326"
ElseIf Texte1 = 6 Then
ActiveSheet.PageSetup.PrintArea = "$A$1:$K$393"
ElseIf Texte1 = 7 Then
ActiveSheet.PageSetup.PrintArea = "$A$1:$K$460"
ElseIf Texte1 = 8 Then
ActiveSheet.PageSetup.PrintArea = "$A$1:$K$527"
ElseIf Texte1 = 9 Then
ActiveSheet.PageSetup.PrintArea = "$A$1:$K$594"
ElseIf Texte1 = 10 Then
ActiveSheet.PageSetup.PrintArea = "$A$1:$K$661"
ElseIf Texte1 = 11 Then
ActiveSheet.PageSetup.PrintArea = "$A$1:$K$720"
Else
MsgBox ("Il n'est pas possible d'imprimer plus de 11 pages !"), vbInformation, "Alerte"
Exit Sub
End If
ActiveSheet.PrintPreview
'ActiveWindow.SelectedSheets.PrintOut
End SubSalut,
Tant mieux si mon travail t'est utile.
Tu pourrais simplifier le passage If/End IF ci-dessous, considérant que si tu imprimes quelques lignes vides de trop sur ta 11ème feuille, ce n'est certainement pas grave :
If Texte1 = False Then
MsgBox ("Opération annulée"), vbInformation, "Alerte"
Exit Sub
ElseIf Texte1 = "" Then
MsgBox ("Merci d'indiquer un nombre de page"), vbExclamation, "Alerte"
Exit Sub
ElseIf Texte1 = 1 Then
ActiveSheet.PageSetup.PrintArea = "B1:K58"
ElseIf Texte1 >= 2 And Texte1 <= 11 Then
ActiveSheet.PageSetup.PrintArea = "B1:K" & (67 * Texte1) - 9
Else
MsgBox ("Il n'est pas possible d'imprimer plus de 11 pages !"), vbInformation, "Alerte"
Exit Sub
End IfMais ça je ne pouvais pas le proposer avant d'en savoir un peu plus sur ton fichier, d'où l'utilité d'un fichier modèle.
A noter que j'avais laissé les $ inscrits automatiquement par l'enregistreur de macro, mais qu'ils sont parfaitement inutiles ici.
Quant à ta réponse ''tardive'', ça arrive qu'elles proviennent après 2 ans, lorsque le membre a à nouveau besoin de quelque chose, donc pas de souci pour quelques heures
Bonnes salutations.
Hello,
Merci, c'est effectivement plus concis.
Par contre je ne comprends pas trop cette partie : & (67 * Texte1) - 9
Pourrais-tu m'en dire plus stp ?
Merci.
bonjour le fil,
avec "Printout" on a 2 paramètres "From" et "To" qu'on peut utiliser, si vou voulez les pages 5 à 10, from=5 et To=10, facile, non ?
Salut Samaos,
Sur ta première page, tu as 58 lignes. Puis sur les pages suivantes, jusqu'à la 10ème, 67 lignes de plus, d'où l'incrémentation de ta série de référence pour la dernière ligne de chaque feuille en :
"$B$1:$K$58",
"$B$1:$K$125"
"$B$1:$K$192"
"$B$1:$K$259", etc.
Mais si tu calcules
67 * 2 - 9, ça donne 125,
67 * 3 - 9 = 192
67 * 4 - 9 = 259, etc.
Tu vois donc que tu peux utiliser ce calcul afin d'indiquer la dernière ligne de chacune des feuilles de 2 à 10, en utilisant les valeurs 2, 3, 4, etc. indiquée par la variable ''Texte1", d'où 67 * Texte1 - 9. Le résultat de ce calcul est ajouté au texte de base "$B$1:$K$" par l'instruction & ou, sans le $ inutiles "B1:K" & 67 * Texte1 - 9
Pour la 11ème feuille, le calcul 67 * 11 - 9 = 728. C'est 8 lignes de trop par rapport à ton indication, mais comme je présumais qu'il s'agissait de lignes vides, je me suis dit que l'on pouvait pousser l'utilisation de ce calcul jusqu'à cette feuille.
Amicalement.