Hello,
Voila, j'ai plusieurs tableaux dans mon fichier excel et j'aimerai que les tableaux ne soient pas coupés quand ils tiennent sur 2 pages.
Savez vous comment je peux gérer ça?
Hello,
Voila, j'ai plusieurs tableaux dans mon fichier excel et j'aimerai que les tableaux ne soient pas coupés quand ils tiennent sur 2 pages.
Savez vous comment je peux gérer ça?
Salut Aurore.
Alors quand tu parles de plusieurs tableaux, ce sont bien plusieurs feuilles, c'est bien ca?
Tu veux faire la mise en page automatique par macro ?
Alors il faut faire
Voilà. Tu fais ca pour toutes tes Worksheets.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 With ActiveSheet.PageSetup .FitToPagesWide = 1 .FitToPagesTall = 1 End With
Mél
non en fait mon fichier excel est un logiciel d'offres, et en fonction des demandes des clients je fais un ou plusieurs tableaux![]()
Un ou plusieurs tableaux ... mais sur la même feuille donc ?
Tu veux imprimer la feuille entière, contenant donc plusieurs tableaux, sans les couper.
Est-ce que tu as un moyen de connaître par avance la taille de tes tableaux, le nombre de colonnes et de lignes qu'ils contiennent ? Et est-ce que tous les tableaux de la même feuille sont de la même taille ?
Alors, je peux récupérer le nombre de ligne de mes tableaux en effet, la largeur des tableaux ne changent pas par contre la hauteur des lignes ne sont pas identiques
donc, si tes tableaux sont à la suite dans la même feuille, tu fais
Dis-moi si ca te convient
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 With ActiveSheet.PageSetup .PrintArea = "$A$1:$lettrecolonne" & n°ligne .FitToPagesWide = NombreDeTableauxEnLargeur .FitToPagesTall = NombreDeTableauxEnHauteur End With Set ActiveSheet.HPageBreaks(1).Location = Range("A" & NbDeLigneDeTonTableau1)
Quand tu disetNombreDeTableauxEnHauteurtu entends quoi par laNombreDeTableauxEnLargeur
J'ai testé et ça bascule en format payasge![]()
Heureusement que j'ai dit
Enregistre une macro en faisant et vérifie ce que sont les paramètres FitToPagesWide et FitToPagesTall, le problème vient nécessairement de là.Mais je n'ai pas tout suivi![]()
Je pense que melouille56 croyait tes deux tableaux, quand tu en avais deux, en largeur, pas en hauteur.
Bonjour,
Et si la zone d'impression est définie que pensez-vous de
Le 75 à adapter en fonction des besoins.
Code : Sélectionner tout - Visualiser dans une fenêtre à part ActiveSheet.PageSetup.Zoom = 75
A+
Le problème :Dans ces condition, le zoom reste un bricollage.Envoyé par a.dequidt
La solution passe par
- Etablissement de la plage de cellules à imprimer
- Fixer à 1 le nombre de page pour cette zone d'impression
Ainsi, si le tableau est unique, il sera imprimé sur une page, de même que s'il y en a deux.
On fait ça en enregistrant la macro et en nettoyant le code ensuite de tous les paramètres inutiles. Et il y en a une page (!)
A+
<< MOI
Ca m'a modifier ma zone d'impression![]()
Tu connais ta plage, exemple $A$1:$H$172, alors tu mets çaEt tu mets ça quelque soit ta plage
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Plage = Range("$A$1:$H$172").address ActiveSheet.PageSetup.PrintArea = Plage With ActiveSheet.PageSetup .FitToPagesWide = 1 .FitToPagesTall = 1 End With
Bonjour,
Salut ouskel'n'or, ta solution rempli la feuille mais zoom automatiquement en hauteur et largeur, si les 2 tableaux sont asser long risque que ce soit un peu petit.
J'ai bien une autre solution.... mais doit-je la mettre ?
Bah... tant pis
Bien sur définir la plage d'impression. Et connaître la dernière ligne du 1er tableau
Le code ci-dessous déplace la coupure de la page si elle dépasse la hauteur.
Je crois que ça répond bien à ce que tu demandais, si le tableau 2 dépasse la page qu'il ne soit pas coupé. Bien sur si le 2ém tableau est plus grand qu'une page...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Dim e e = ActiveSheet.HPageBreaks.Count 'nombre de page que contient la zone d'impression. 'commence à 0 si une seule page. pour exemple le 1er tableau fini en ligne 70 If e > 0 then 'il y à plusieur page Range("A70").Activate ActiveSheet.HPageBreaks.Add Before:=ActiveCell end if
A+
Bonjour,
Si j'ai bien compris vous avez plusieurs tableaux les uns en-dessous des autres.
Est-ce que la nombre de lignes est le même pour tous ?
Est-ce que le nombre de lignes vides éventuelles entre chaque est constant ?
J'ai une procédure qui calcule la hauteur d'un tableau puis compare avec une hauteur prédéfinie pour une page en fonction de la mise en page (cette procédure sert dans un programme de facturation pour ne pas avoir le résultat que l'on voit souvent : une dernière page qui ne comprend qu'une ou 2 ligne(s) alors que la page précédente comprend des lignes vides inutiles.
Seulement dans le cas où les solutions précédentes ne solutionneraient pas totalement votre problème, on peut adapter celle-ci.
Leforestier, ta solution ne génére un message d'erreur '1004'
Jacques jean, le nombre de lignes peut varier d'un tableau a un autre; le nombre de lignes entre chaque peut changer lui aussi, ainsi que la hauteur des lignes du tableau.
J'ai quand meme en sauvergarde les indices des lignes de début et fin de tableaux, et ce, pour tous les tableaux
J'ai tester ça sur mon PC et ça marche impec, il faut bien sur que..
1°) tu active la page que tu doit imprimer
2°) comme indiquer, la zone d'impression est délimitée AVANT.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Worksheets("MaFeuille_A_imprimé").activate
et ensuite le code indiqué.
Code : Sélectionner tout - Visualiser dans une fenêtre à part ActiveSheet.PageSetup.PrintArea = Range("A1:H172")
Et garanti, ça marche...
Edit: pour activate il faut mettre Worksheets
Comme ton pb s'est déjà posé à moi (je m'étais arrangé autrement) j'ai cherché un code qui règle la question d'un ou deux tableaux respectivement dans une ou deux page d'édition, je m'y suis collé (VBA 2003, je précise car sur 2007 j'espère que les choses ont été améliorées)
Le HPageBreaks ne fonctionne effectivement pas pour l'édition (jusqu'à preuve du contraire). Donc...
Pour vérifier la mise en page du tableau1 dans Excel (celle du tableau2, s'il existe, se verra en fin de macro) mets un point d'arrêt sur cette ligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 Option Explicit Sub DefinirLaZoneDimpressionSurUneOuDeuxPages() Dim FL1 As Worksheet Dim PremiereLigne, PremiereColonne, DerniereLigne1 Dim PremiereLigne2, DerniereLigne2 Dim Plage, SautDePage Set FL1 = Worksheets("Feuil1") 'FL1 => instance de la feuille de calculs FL1.PageSetup.PrintArea = "" 'on supprime l'ancienne zone d'impression 'Adresses du premier tableau PremiereLigne = FL1.UsedRange.Row PremiereColonne = FL1.UsedRange.Column 'Plage du premier tableau Plage = FL1.Range(Cells(PremiereLigne, PremiereColonne).Address).CurrentRegion.Address 'Avec split on obtient un tableau à deux dimensions 0 et 1, contenant l'adresse '... de la première et de la dernière cellule de la plage DerniereLigne1 = FL1.Range(Split(Plage, ":")(1)).Row 'on récupère la dernière ligne 'Lancer la macro d'édition du premier tableau DéfinirLaZoneDimpressionCentrerEtEditer FL1, Plage 'Recherche de la dernière ligne renseignée de la feuille de calculs DerniereLigne2 = FL1.Cells(65536, PremiereColonne).End(xlUp).Row 'Le second tableau existe-t-il : PremiereLigne2 = FL1.Cells(DerniereLigne1, PremiereColonne).End(xlDown).Row 'Il n'existe pas si PremiereLigne2 = 65536 ou si = DerniereLigne1 If DerniereLigne2 <> 65536 And DerniereLigne2 > DerniereLigne1 Then 'un second tableau existe, on en établit la plage Plage = FL1.Range(Cells(PremiereLigne2, PremiereColonne).Address).CurrentRegion.Address 'Lancer la macro d'édition du second tableau DéfinirLaZoneDimpressionCentrerEtEditer FL1, Plage End If Set FL1 = Nothing End Sub Sub DéfinirLaZoneDimpressionCentrerEtEditer(FL1, Plage) FL1.PageSetup.PrintArea = Plage 'On centre le tableau dans la page With ActiveSheet.PageSetup .CenterHorizontally = True .CenterVertically = True End With 'ActiveSheet.PrintOut End SubPour voir cette mise en page, affiche les sauts de page -> Affichage -> Aperçu des sauts de pageDerniereLigne2 = FL1.Cells(65536, PremiereColonne).End(xlUp).Row
Enfin, quand tu es certaine que ça te va, valide les "Printout".
Inconvénient de la méthode : si tes pages sont numérotées, elles auront l'une et l'autre le N° 1
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager