Mise en page zone d'impression variable
Bonsoir
Je me tourne vers vous afin de vous demander un coup de main.
J'aimerais savoir si il est possible de définir une zone d'impression variable.
En détail, dans mon fichier joint je souhaiterai mettre un bouton qui imprime mon fichier avec une mise en page définie, jusque la je suis ok.
Par contre Je voudrais que celle-ci aille de A1 à AD73 et que cette zone d'impression prenne aussi les 69 colonnes qui suivent, peut importe le nombre de colonne masqué derrière la colonne AD.
Est ce que cela est possible ?
Merci pour votre aide ;)
Bonjour,
Oui, c'est possible. Il faut seulement variabiliser l'adresse qui doit être renvoyée sous forme de chaine de caractères (ex : "$A$1:$G$30").
Un petit exemple :
Sub definirzone()
Dim zone$
zone = Range(cells(1,1), cells(73,99)).address 'les 99 colonnes, lignes 1 à 73
Sheets("mafeuille").PageSetup.PrintArea = zone
end subCdlt,
Bonsoir
Merci 3GB pour ta réponse.
Mais je n'ai pas bien compris tout ce que tu as voulut me dire:
variabiliser l'adresse qui doit être renvoyée sous forme de chaine de caractères.
Peux tu me dire ce que c'est ?
Merci
Il faut que la propriété printarea (zone d'impression) reçoive une adresse, comme je t'ai montré et pas une plage...
Sheets("mafeuille").PageSetup.PrintArea = "$A$1:$B$2" 'OK
Sheets("mafeuille").PageSetup.PrintArea = range("A1:B2") 'PAS OKEt pour variabiliser, ça veut dire que tu peux rendre variable la zone, en fonction d'un critère, la valeur d'une cellule par exemple.
sub
dim nbcol%, zone$
nbcol = range("A1") 'en A1, il y a le nombre 69
zone = Range(cells(1,1), cells(73, 30 + nbcol)).address 'les 99 colonnes : 30 fixe + 69 variable (nb tiré de A1, qui peut changer...)
Sheets("mafeuille").PageSetup.PrintArea = zone
end subCdlt,
Bonjour 3GB
Merci pour ton temps.
Je rencontre des problèmes avec ta formule, elle fait ben la mise en page mais uniquement pour les 30 colonnes fixes, les 69 colonnes variables ne sont pas prises en compte.
Peux tu me dire également comment faire si je souhaite avoir deux zones d'impression, une recto et une verso.
Et je voudrais également que l'impression ce lance automatiquement.
J'ai pense à
sub
dim nbcol%, zone$1, zone$2
nbcol = range("A1") 'en A1, il y a le nombre 69
zone$1 = Range(cells(1,1), cells(73, 30 + nbcol)).address 'les 99 colonnes : 30 fixe + 69 variable (nb tiré de A1, qui peut changer...)
zone$2 = Range(cells(75,1), cells(196, 30 + nbcol)).address 'les 99 colonnes : 30 fixe + 69 variable (nb tiré de A1, qui peut changer...)
Sheets("mafeuille").PageSetup.PrintArea = zone
Worksheets("mafeuille").PrintOutend sub
es tu ok avec ça ?
Bonjour Damien,
A priori elles devraient êtres prises en compte. Seulement, c'était un exemple à titre d'information. J'ai supposé que A1 contenait la valeur 69 mais si A1 ne contient pas cette valeur, alors nbcol vaut 0 et la zone d'impression reste avec 30 colonnes.
Il ne peut y avoir qu'une zone d'impression. Donc soit tu dois faire 2 impressions, une pour chaque zone, soit tu dois prendre ces 2 zones et appliquer un saut de page à l'endroit désiré. De cette manière, tu pourras avoir 2 pages comme tu le souhaites.
Et pour l'impression, c'est ça mais tu peux la paramétrer davantage et notamment décider de ne pas ignorer la zone d'impression (sinon ce serait dommage
sub zoneimp()
dim nbcol%, zone$
nbcol = ????
zone = Range(cells(1,1), cells(196, 30 + nbcol)).address
with Sheets("mafeuille")
.PageSetup.PrintArea = zone 'zone impression
.resetallpagebreaks 'annule sauts de page
.Rows(74).PageBreak = xlPageBreakManual 'nouveau saut de page après ligne 74
.PrintOut copies:=1, ignoreprintareas:=false 'impression d'une copie de la zone définie
end with
end subVoici un essai mais je ne garantis rien pour les sauts de page qui m'ont souvent posé problèmes...
Cdlt,
Bonjour 3GB
Je comprends pas car j'ai bien rentré la donnée 69 sauf que ma cellule A1 est déjà prise, je l'ai donc rentrée en A2 et modifié ta formule en Nbcol=Range("A2")
Mais rien n'y fait, les les cellule variable n'apparaissent pas...
Et le saut de page ne s fait, j'ai tout sur le recto.
Je perds pas espoir lol.
Merci en tout cas pour ton aide.
Bonjour Damien,
C'est bizarre ça... Qu'as-tu fait de ce code ?
Au cas où, il faut :
- enregistrer le fichier au format .xlsm,
- activer le volet "Développeur" (si ce n'est pas déjà fait) : Volet "Fichier" / Options / Personnaliser le ruban > cocher "développeur",
- sur le volet "Développeur", ouvrir l'éditeur "Visual Basic" (raccourci Alt + F11),
- dans le menu contextuel "Insertion", sélectionner "Module",
- aller sur ce nouveau module et y copier le code :
sub zoneimp()
dim nbcol%, zone$
with Sheets("Feuil1")
nbcol = .range("A2").value
zone = Range(.cells(1, 1), .cells(196, 30 + nbcol)).address
msgbox "nbcol = " & nbcol & " et zone = " & zone
.PageSetup.PrintArea = zone 'zone impression
.resetallpagebreaks 'annule sauts de page
.hpagebreaks.add before:=.Rows(75) 'nouveau saut de page après ligne 74
.PrintOut copies:=1, ignoreprintareas:=false 'impression d'une copie de la zone définie
end with
end subEnsuite, il suffit de cliquer sur le code et d'appuyer sur la touche F5 du clavier.
J'ai rajouté une boite de dialogue qui t'informera des valeurs des 2 variables nbcol et zone. Mais, maintenant, j'ai assez peu de doute.
Cdlt,
Promis, je n'ai rien fait de mal a ton code lol.
J'ai compris d'ou vient le problème, en fait dans la formule le 69 en A2 commence a partir de la colonne AE et quand je masque des colonnes après AD elles ne sont plus dans l'impression.
Donc si je masque plus de 69 colonnes, seule ma zone fixe est imprimée.
par contre le saut de page ne ce fait pas, j'ai toujours toutes mes lignes sur le recto
Normalement, à l'exécution du code, tu as obtenu un message indiquant l'adresse de la zone d'impression. cette adresse définit la zone. Mais si tu masques les colonnes 31 à 99, en effet, elles ne seront pas comprises. Mais si tu masques les colonnes 28 à 97, les colonnes 98 et 99 devraient être incluses dans l'impression.
Pour les sauts de page, c'est assez compliqué pour moi de faire des essais. Je te propose un essai mais j'ai des doutes sur l'ordre des instructions :
sub zoneimp()
dim nbcol%, zone$
with Sheets("Feuil1")
nbcol = .range("A2").value
zone = Range(.cells(1, 1), .cells(196, 30 + nbcol)).address
msgbox "nbcol = " & nbcol & " et zone = " & zone
.resetallpagebreaks 'annule sauts de page
with .PageSetup
.PrintArea = zone 'zone impression
.Orientation = xlLandscape
.Zoom = false 'zoom désactiver
.Fittopagestall = 2 '2 pages en hauteur
.Fittopageswide = 1 '1 page en largeur
end with
.hpagebreaks.add before:=.Rows(75) 'nouveau saut de page après ligne 74
.PrintOut copies:=1, ignoreprintareas:=false 'impression d'une copie de la zone définie
end with
end subIl faut toujours que resetallpagebreaks soit avant hpagebreaks.add. Mais sinon, si ça ne marche pas, tu peux essayer de changer l'ordre des lignes en mettant par exemple la ligne .hpagebreaks avant le with .pagesetup ou en mettant le reset juste apres le with.
Merci beaucoup 3Gb pour ton temps et ta patience.
Mon souci c'est que je masque au fur et à mesure des colonnes après AD, j'ai fait plusieurs fois le test,la zone variable ne s'adapte pas.
des que je masque je une colonne il faudrait que ma zone variable change.
Ex:
Zone d'impression = zone fixe + AE jusqu'à CU
1 jour = 7 colonnes
Si je masque 1 jour il faudrait que ma zone devienne Zone fixe + AL jusqu'à DB
Si j'en masque un second = zone fixe + zone variable jusqu'à DI
...
Et est il possible de rajouter une zoom dans la formule lors de l'impression ?
Pour le zoom, c'est complexe. Il faut faire l'opération manuellement et regarder la valeur du zoom pour 2 pages en hauteur et une en largeur. Mais comme le nombre de colonnes changera, c'est difficile. Je ne saurais pas te répondre convenablement sur cet aspect...
Pour le reste, la zone d'impression est la zone d'impression. Lorsque 7 colonnes sont masquées, elles gardent leur position. Il n'y a donc pas de décalage de la zone à prévoir. Avec 99 colonnes, la zone devra toujours être A à CU. Ensuite, si des colonnes sont masquées, elles n'apparaissent pas tout simplement...
Donc finalement, tu n'as pas besoin de variabiliser le nombre de colonnes car j'ai l'impression qu'il y en aura toujours 30 + 69 avec éventuellement certaines masquées.
Mais quand tu exécutes le code, quel message obtiens-tu ?
Pour le zoom, c'est complexe. Il faut faire l'opération manuellement et regarder la valeur du zoom pour 2 pages en hauteur et une en largeur. Mais comme le nombre de colonnes changera, c'est difficile. Je ne saurais pas te répondre convenablement sur cet aspect...
Le nombre de colonnes en impression ne changera pas, j'aurai toujours ma zone fixe 30 colonnes + zone "variable"69 colonnes
Pour le reste, la zone d'impression est la zone d'impression. Lorsque 7 colonnes sont masquées, elles gardent leur position. Il n'y a donc pas de décalage de la zone à prévoir. Avec 99 colonnes, la zone devra toujours être A à CU. Ensuite, si des colonnes sont masquées, elles n'apparaissent pas tout simplement...
Donc finalement, tu n'as pas besoin de variabiliser le nombre de colonnes car j'ai l'impression qu'il y en aura toujours 30 + 69 avec éventuellement certaines masquées.
C'est ça, je suis désolé d'avoir mal exprimé ma demande mais oui la zone d'impression doit être composé de la zone fixe 30 + 69 avec éventuellement certaines masquées.
Mais quand tu exécutes le code, quel message obtiens-tu ?