Macro pour imprimer plusieur zone d'impression en une fois

Bonjour MFerrand,

J'ai essaye de faire cette fonction :

Sub Print_Année()
    Dim i As Integer, PrntArea As Variant

    Application.ScreenUpdating = False

     'Change page settings
        With ActiveSheet.PageSetup
        .FitToPagesWide = 1
        .FitToPagesTall = 1
        .LeftHeader = "&G&12&""Comic Sans Ms""Conducteur : "
        .CenterHeader = "&G&12&""Comic Sans Ms""Comparatif  "
        .RightHeader = "&G&12&""Comic Sans Ms""Impression fait le : " + "&I&D / &T" '<-- texte + indice'pied de page
        .LeftFooter = "&G&12&""Comic Sans Ms""Calcul TTE " & Chr(10) & "&G&12&""Comic Sans Ms""Calucl Heures Modulation : " '<-- date / heure (style italique)
        .CenterFooter = "&G&12&B&""Comic Sans Ms""Copyright :" + "&G&12&B&KFF0000&""Comic Sans Ms"" TOI" & Chr(10) & "&G&12&K000000&""Comic Sans Ms""toi"
        .RightFooter = "&8&P/&N" '<-- numéro de page / nombre de pages (taille 8)
        .CenterHorizontally = True
        .CenterVertically = True
        .Orientation = xlLandscape
         .Draft = False
        .PaperSize = xlPaperA3
      '  .FirstPageNumber = xlAutomatic
        .Order = xlDownThenOver
        .BlackAndWhite = False
        .Zoom = False

    End With

     'variable with the names of the 12 ranges
    PrntArea = Array("ImpressionJanvier", "ImpressionFévrier", "ImpressionMars", "ImpressionAvril", "ImpressionMai", "ImpressionJuin", "ImpressionJuillet", "Impressionaoût", "ImpressionSeptembre", "ImpressionOctobre", "ImpressionNovembre", "ImpressionDécembre")

     'loops through the number of items in the PrntArea variable
    For i = 0 To UBound(PrntArea)
         'sets the print area to the next item in the PrntArea _
        variable each time it loops--should have 12 different _
        printouts, one For Each range In PrntArea
        ActiveSheet.PageSetup.PrintArea = PrntArea(i)
     '   MsgBox "ok"
         'Print
         ActiveWindow.SelectedSheets.PrintPreview
       ' ActiveWindow.SelectedSheets.PrintOut Copies:=1, Preview:=False, Collate:=True
    Next i

    Application.ScreenUpdating = True

End Sub

Mais quand c'est afficher aperçu mon USF d'où est lance cette macro est affiche et je suis bloquer cad que excel est figer

Je n'est pas encore eu le temps de faire ce que tu m'a demande cad de faire la même plage pour le mois de février que pour les autres mois

Merci pour votre aide

Bonjour,

Si je met dans array seulement 3 zone PAS de Problem par contre si je met 4 ou plus la macro Bloque.

En ce qui concerne mes variable j'ai arriver pour qu'on prenne on compte le choix d'utilisateur en ce qui concerne A4 ou A3 ou Noir ou couleur. Par contre toujours pas pour le recto-verso

Ensuite il reste encore les zones d’impression

La fin rapproche doucement mais surement

J'avais vu tes noms, mais ce n'est pas une solution pratique, il faut recommencer chaque année...

Il faut donc une plage définie quelle que soit la feuille et qu'on puisse décaler.

MFerrand a écrit :

J'avais vu tes noms, mais ce n'est pas une solution pratique, il faut recommencer chaque année...

Il faut donc une plage définie quelle que soit la feuille et qu'on puisse décaler.

Donc je dois absolument que le mois de février à la même plage que les autres mois soit 45 lignes au lieu de 43 ?

Je vais essaye d'ajouter ces deux lignes juste avant la première ligne actuelle et voir si mes calcules ne sont pas fausse ensuite

Puis dans dans le fichiers joints le choix du papier est prix en compte mais pas le choix de la couleur !

Sur imprimante en question on peux choisir Noir, Couleur ou Auto (Noir/Couleur)

CBA3 marche mais pas CBCouleur ?

Private Sub CBA3_Change()
 'Choix A3 ou A4
      Dim lngPaperSize As Long

Select Case CBA3.Value
Case "OUI"
  lngPaperSize = xlPaperA3
Case "NON"
  lngPaperSize = xlPaperA4
' and so on
End Select
If CBA3.Value = True Then ActiveSheet.PageSetup.PaperSize = lngPaperSize

ActiveSheet.PageSetup.PaperSize = lngPaperSize

End Sub

Private Sub CBCouleur_Change()
'Impression Recto - Verso
      Dim CouleurPaper As Long

Select Case CBCouleur.Value
Case "OUI"
  CouleurPaper = False
Case "NON"
  CouleurPaper = True
' and so on
End Select
If CBCouleur.Value = True Then ActiveSheet.PageSetup.BlackAndWhite = CouleurPaper

ActiveSheet.PageSetup.BlackAndWhite = CouleurPaper

End Sub
27testmiseenpage1.xlsm (256.17 Ko)

Bonsoir,

J'ai ajouter les deux lignes pour le mois de févier afin qu'on a 45 lignes au lieu de 43 et donc tous les mois ont donc 45 lignes soit donc la même plage

Salut,

Je suis accaparé par projet plus long que prévu, mais je m'en occupe à la suite.

MFerrand a écrit :

Salut,

Je suis accaparé par projet plus long que prévu, mais je m'en occupe à la suite.

Ok merci de prendre ton temps afin de m'y apporter une solution

Bonsoir,

Je rappelle les choix de base :

  • l'utilisateur choisit l'année, l'année correspondant à une feuille, le choix oui/non est inadéquat, j'ai donc modifié le Userform sur ce point pour qu'il donne le choix de l'année en sélectionnant par défaut l'année la plus récente ;
  • il choisit le mois, ce qui définira la zone à imprimer, mais devant pouvoir choisir d'imprimer l'année entière, un 13e choix est proposé, aucun choix par défaut pour ce combobox :
  • il peut choisir d'imprimer en noir et blanc, couleur par défaut ;
  • il a un choix recto-verso (non par défaut), je l'ai conservé dans le Userform, mais ce choix ne fait pas partie de la mise en page, il faudra l'activer dans la config imprimante (donc où il est il ne sert à rien...) ;
  • choix A3 enfin (oui par défaut), tu verras que dans la macro d'impression je l'ai occulté par une gestion d'erreur (cela déclenche une erreur chez moi, sans doute parce que je n'ai pas d'imprimante en A3 ou parce qu'elle était éteinte ).

J'ai donc revu 3 procédures du Userform (pas touché aux autres, sauf pour les indenter, ce que les débutants devraient apprendre en premier !) :

  • Initialize : entièrement réécrite et qui n'utilise pas les mêmes méthodes (que celles qui précédaient) pour alimenter les combos ;
  • la proc. bouton Aperçu, qui valide en s'assurant que le Mois est servi, et masque le Userform :
  • la proc. Annuler, qui efface un choix éventuel de Mois et masque le Userform.

Le Userform est lancé par la procédure d'impression, qui reprend la main lorsque celui-ci est masqué. Elle récupère les choix de l'utilisateur, et sait que celui-ci a annulé si pas de Mois. Le mois sert à définir la zone d'impression. Elle définit les autres paramètres de mise en page et lance l'aperçu.

Je n'ai pas touché aux paramètres d'en-tête et pied de page. La procédure étant définie pour imprimer au choix n'importe quel mois de n'importe quelle feuille annuelle présente dans le classeur, à toi de savoir si ces paramètres s'appliquent à tous les cas.

La macro est dans un nouveau module (trop de bazar dans les autres !) et est affectée au bouton de la feuille Accueil.

Cordialement.

Merci pour exemple de fichier et de ton travail sur mon problème, je vais y regarde dès que j'ai un peu de temps car ces jours plus de travail que prévu donc pas bcp de temps pour étudier cela.

Mais merci encore

bonsoir,

Je viens de tester un peu mais pas en détail et si on choisit tous les mois de l'année on a cette erreur : Erreur d’exécution 13 Incompatibilité du type

Case 13
                ZImpr = .Resize(45 * 12)
                p = 12

Faudrait que j'étudie tes codes afin d'apprendre un peu plus mais c'est quoi p=12 ?

Puis une question si par exemple je masquer certains lignes de la colonne I qui n'ont pas la date et donc je me retrouve avec les mois de 31 jours, 30 jours et 28(29) jours .

Est ce que le code vas marche encore mais pour cela je vais le tester sur mon fichier et encore bravo pour ton travail.

Au temps pour moi ! Je devais commencer à fatiguer, il manque un mot.

ZImpr = .Resize(45 * 12).Address

Mais ce n'est pas tout, j'ai zappé les sauts de page ! Si on imprime l'année, l'idée c'est un mois par page (donc 12 pages, car si on laisse FitPagesTall à 1 dans ce cas ça va faire une page très compressée.

Mais pour que chaque mois occupe une page il faut insérer des sauts de page. Je vais écrire la boucle pour ça...

Aucun problème pour marquer des lignes ou des colonnes, elles n'apparaîtront pas mais cela ne change rien à la zone d'impression.

Ça se complique un peu !

Les sauts de page ne sont pas pris en compte avec la définition en nombre de pages en largeur et hauteur. Il faut donc repasser en zoom pour les avoir.

Donc : soit tu laisses s'imprimer en continu sur 7 pages (apparemment), soit il faut que tu regardes manuellement quelle valeur mettre au Zoom pour du A3. Pour du A4 c'est apparemment 40% (risque de ne pas être beaucoup lisible).

Ou bien on abandonne l'impression de l'année entière, ou encore dans ce cas je réorganise la macro pour une boucle d'impression mois par mois...

La dernière solution évoquée semble la plus simple et la plus rationnelle...

Voilà donc rectifié pour un déroulement de l'année.

Merci j'y vais regarde ce soir quand je suis devant mon ordinateur par contre j'ai vu que mon imprimante prend pour l'impression trois choix :

Noir

Couleur

Auto (noir/couleur )

Du coup si je met en noir le paramètre n'est pas changer mais je vais tester cela plus ce soir en tous cas merci pour l'aide.

Merci MFernad,

Tout marche comme il faut l'impression de l'année marche mais comme elle est fait en boucle c'est comme si j’imprime mois par mois mais en une seule fois. Par contre faut que je voit comment mettre les numéro de pages comme il faut si on imprime l'année afin d'avoir 1/12, 2/12 etc...

Donc soit code en dure un footer pour l'impression par an et un footer l'impression par mois mais en tous cas un grand travail, la fin du tunnel rapproche

Ou peut être envoyer l'impression dans un fichier pdf afin d'avoir 12 pages dans pdf et ensuite faire impression du fichier pdf ?

J'ai trouve ce petit code qui sauvegarde en pdf mais comment faire que l'année (12 mois) soient sauvegarde dans ce fichier ?

Sub Print_Individual_Pages()
    Dim iHpBreaks As Integer, iVBreaks As Integer
    Dim iTotPages As Integer, a As Long, j As Long
    iHpBreaks = ActiveSheet.HPageBreaks.Count + 1
    iVBreaks = ActiveSheet.VPageBreaks.Count + 1
    iTotPages = iHpBreaks * iVBreaks
    j = 1
    For a = 1 To iTotPages
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
            "d:\dossier\NomPDFcellule.pdf", _
                Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
                    :=False, From:=a, To:=a, OpenAfterPublish:=False
        j = j + 1
    Next
End Sub

C'est vraiment une manie d'aller chercher des codes n'importe où...

Essaie-le !! et tu verras !

Je t'ai commenté les diverses possibilités. Relis attentivement ce que j'ai écrit à ce moment.

Il reste aussi que si tu imprimes sans aperçu, les pages seront imprimées à la suite sans intervention.

Oui je sais que cela imprimé à la suite sans intervention et cela marche par contre sur chaque page cela affiche page 1/1 au lieu de 1/12, 2/122 etc... mais je suis les pistes que tu as de décrit auparavant afin que j'arrive à ce que je cherche.

Et oui le code ne marche pas comme il faut en ce qui concerne pdf

Merci et bonne journée

Bé non car ça suit les paramètres d'impression... et puis sauf erreurs ton code enregistrait des pages indivduelles...

Pour le numéro de page, il suffit d'utiliser le mois...

Mais as-tu regardé ton niveau de Zoom sur A3 ?

MFerrand a écrit :

Bé non car ça suit les paramètres d'impression... et puis sauf erreurs ton code enregistrait des pages indivduelles...

Pour le numéro de page, il suffit d'utiliser le mois...

Mais as-tu regardé ton niveau de Zoom sur A3 ?

Oups il y avait un malentendu de ce que j'ai dit avant désolé, ce que j'ai dit que le code que j'ai mis pour *pdf ,ne marche pas car il enregistrer comme tu as dit en pages individuelle.

En ce qui concerne l'astuce pour les numéro de pages d'utiliser les mois j'avoue que je n'est pas compris comment faire car j'ai bien mis printout afin de faire le test et 12 travaux d'impression sont lance et donc sur chaque page j'ai 1/1 car 12 travaux d'impression

Puis je n'est pas encore eu de temps de vérifier le ZOOM pour A4 et A3 car pas d'imprimante sur place demain je vais faire le tour pour la personne que je fait le code car mon imprimante chez mois c'est une vielle imprimante Noir mais je vais faire le Zoom afin de savoir au lieu d’utilisé fittopage = 1 afin de pouvoir inséré des pages break.

Mais merci bcp pour l'aide importer

Bonjour,

Je viens de tester le ZOOM pour A4 et A3 donc

pour A4 c'est 53 % avec comme marge 1 cm avec 1.3 cm pour en-tête et pied de page

pour A3 c'est 77 % avec comme marge 1 cm avec 1.3 cm pour en-tête et pied de page

Merci

Edit : Je me suis rendu compte si je choisi l'impression Noir et blanc, la page s'imprime en noir et blanc sauf ce qui se trouve dans le pied de page avec ce code, mot TOI:

 .CenterFooter = "&G&12&B&""Comic Sans Ms""Copyright :" + "&G&12&B&KFF0000&""Comic Sans Ms"" TOI" & Chr(10) & "&G&12&K000000&""Comic Sans Ms""toi"

donc comment je puisse faire si

NetB = IIf(.CBCouleur.ListIndex = 0, False, True)

est égale à true (Noir) on a ceci comme pied de page :

.CenterFooter = "&G&12&B&""Comic Sans Ms""Copyright :" + "&G&12&B&K000000&""Comic Sans Ms"" TOI" & Chr(10) & "&G&12&K000000&""Comic Sans Ms""toi"

autrement c'est

.CenterFooter = "&G&12&B&""Comic Sans Ms""Copyright :" + "&G&12&B&KFF0000&""Comic Sans Ms"" TOI" & Chr(10) & "&G&12&K000000&""Comic Sans Ms""toi"
Rechercher des sujets similaires à "macro imprimer zone impression fois"