Pb de mise en page d'un document excel

Signaler
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
-
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
-
Salut à tous, j'ai posé cette question, il y a un mois 1/2 sur le forum de Mortalino, mais je n'ai eu aucune réponse. J'aurais peut-etre plus de chance ici.


Je rencontre un soucis sur la mise en page d'un fichier Excel 2003 que je crée entierement depuis un code VB2005.


Suivant certains critères, je voudrais inserer des saut de page
verticaux pour amélioré l'impression. J'utilise le code suivant :

Code:, ----
    xlWS.ResetAllPageBreaks()

    For i = 1 To NbPages - 1

      j = (((1 + NbEq + 1) * 6 * i) + 1)

      Dim toto As Excel.Range = xlWS.Range(xlWS.Cells(1, j), xlWS.Cells(1, j))

      xlWS.VPageBreaks.Add(toto)

    Next



xlWS étant ma feuille.

Les sauts de pages ne sont pas pris en compte, et quand je regarde
la collection VPagesBreaks en debuggage, les sauts de pages ne sont
même pas créés. Quelle est la syntaxe à utiliser ?????

Le but étant d'imprimer une grille de manière transparente pour
l'utilisateur, le fichier ne sera pas sauvegardé ni même affiché à
l'écran.


Thanks.

---- Sevyc64  (alias Casy) ---- <hr size ="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php

8 réponses

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
46
salut Casy,

unmm... en comparaison à excel 2000 (je peux faire le test sur 2007 si besoin), çà vient du document, pas de la commande.
c'est à dire que par défaut, la page est formatée pour l'impression, pour tenir sur une page (normal)

tu crées ton document ou tu en ouvres un?
si tu l'ouvres, essaye dans les options de mise en page :

<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
Je cree entierement le document, il s'agit en fait de données de plannings que je ne peux pas imprimer dans le logiciel d'origine. Je les exportent donc sous une grille excel pour pouvoir les imprimer.

Il y a effectivement une mise en page, mais j'ai essayer ce code, avant et après la mise en page, avec l'ajustement hauteur/largeur activé ou désactivé, c'est identique.

Le but étant de faire tenir tout ça en hauteur sur une page A3, en controlant les sauts de pages afin qu'ils tombent bien sur un changement de mois

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
46
ok...
(j'y vais à tâtons ^^)
et genre comme çà :

ActiveSheet.VPageBreaks.Add Before:=Cells(C,3)

çà vaut ton toto ?
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
JE viens de refaire un petit test. Si je met ce code avant la mise en page, au départ la collection m'indique 20 sauts de page. Le reset semble réinitialiser à 20.
Mes sauts de pages sont bien ajouter, mais ensuite la mise en page fait que je passe à 0 sauts de page, alosr que le reset faisait passer à 20. J'y comprend rien.
Voici le code de la mise en page :
With xlWS.PageSetup
        .CenterHeader = PlTitre
        .LeftMargin = xlApp.CentimetersToPoints(1)
        .RightMargin = xlApp.CentimetersToPoints(1)
        .TopMargin = xlApp.CentimetersToPoints(1.35)
        .BottomMargin = xlApp.CentimetersToPoints(1)
        .HeaderMargin = xlApp.CentimetersToPoints(1)
        .PrintHeadings = False
        .PrintGridlines = True
        .PrintComments = Excel.XlPrintLocation.xlPrintNoComments
        .Orientation = Excel.XlPageOrientation.xlLandscape
        .PaperSize = Excel.XlPaperSize.xlPaperA3
        .FirstPageNumber = Excel.Constants.xlAutomatic
        .Order = Excel.XlOrder.xlDownThenOver
        .BlackAndWhite = False
        .Zoom = False
        '.FitToPagesWide = NbPages
        '.FitToPagesTall = 1
      End With

---- Sevyc64  (alias Casy) ---- <hr size ="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
46
un debug du nombre de sauts de page entre chaque instruction?
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
Bon après quelques essais (pas évident en TSE avec une connection qui coupe toute les 10 min), le bilan est le suivant :

La mise en page effectuée pour l'impression, génère et réorganise automatique des sauts de pages. Ces sauts de pages ne sont apparement ni modifiables, ni supprimables. Ils ne sont pas affectés par l'instruction ResetAllBreakPages non plus.
Cependant, on peut en ajouter qui viendront en supplément de ceux-là, a condition d'avoir donner un nombre suffisament élevé aux champs d'ajustement en hauteur et largeur pour les rendres inactifs.

Donc, demain, il ne me reste plus qu'à recoder dans l'urgence toute ma fonction pour, plutot que de gérer des pages au moment de l'impression, découper, dès le départ, le classeur en autant de feuilles que nécessaires.

merci PCPT pour ton aide.

Et au cas où, je suis encore à l'écoute de toute solution.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
46
il me semble qu'on en peut pas changer la mise en page d'un classeur vide.
çà donne quoi si tu fais cette mise en page (mettre un nombre volontairement grand, plutôt que de jouer sur l'activation/désactivation des breakpages) juste après la première valeur remplie, puis remplir le reste et imprimer?...

bon courage
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
La mise en page, je l'a fait à la fin juste avant d'imprimer.
Et mon classeur contient 33 lignes sur un nombre non définie de colonnes. Ca dépend des données saisies dans le planning. Mais à l'heure actuelle , avec les données du client, je suis déjà à 240 colonnes.

Mais (demain, maintenant, il est tard) je vais essayer de faire l'inverse effectivement, commencer par la mise en page et remplir ensuite, je verrais bien ce que ça donne

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php