Aide pour création de formule assez lourde - mise en page et impression

Bonjour à tous !

Nous avons, dans mon entreprise, une 100aine d'Excel à gérer et imprimer après 12h de travail tous les lundis, ce qui est assez lourd. J'ai créé une macro pour modifier les options d'impressions et ceci nous fait déjà gagner pas mal de temps.

Sub Impression()
'
' Impression Macro
' Préparer mise en page pour impression
'
' Touche de raccourci du clavier: Ctrl+n
'
    Application.PrintCommunication = False
    With ActiveSheet.PageSetup
        .PrintTitleRows = ""
        .PrintTitleColumns = ""
    End With
    Application.PrintCommunication = True
    ActiveSheet.PageSetup.PrintArea = "$A$1:$AK$38"
    Application.PrintCommunication = False
    With ActiveSheet.PageSetup
        .LeftHeader = ""
        .CenterHeader = ""
        .RightHeader = ""
        .LeftFooter = ""
        .CenterFooter = ""
        .RightFooter = ""
        .LeftMargin = Application.InchesToPoints(0.25)
        .RightMargin = Application.InchesToPoints(0.25)
        .TopMargin = Application.InchesToPoints(0.75)
        .BottomMargin = Application.InchesToPoints(0.75)
        .HeaderMargin = Application.InchesToPoints(0.3)
        .FooterMargin = Application.InchesToPoints(0.3)
        .PrintHeadings = False
        .PrintGridlines = False
        .PrintComments = xlPrintNoComments
        .CenterHorizontally = True
        .CenterVertically = False
        .Orientation = xlLandscape
        .Draft = False
        .PaperSize = xlPaperLetter
        .FirstPageNumber = xlAutomatic
        .Order = xlDownThenOver
        .BlackAndWhite = False
        .Zoom = False
        .FitToPagesWide = 1
        .FitToPagesTall = 1
        .PrintErrors = xlPrintErrorsDisplayed
        .OddAndEvenPagesHeaderFooter = False
        .DifferentFirstPageHeaderFooter = False
        .ScaleWithDocHeaderFooter = True
        .AlignMarginsHeaderFooter = False
        .EvenPage.LeftHeader.Text = ""
        .EvenPage.CenterHeader.Text = ""
        .EvenPage.RightHeader.Text = ""
        .EvenPage.LeftFooter.Text = ""
        .EvenPage.CenterFooter.Text = ""
        .EvenPage.RightFooter.Text = ""
        .FirstPage.LeftHeader.Text = ""
        .FirstPage.CenterHeader.Text = ""
        .FirstPage.RightHeader.Text = ""
        .FirstPage.LeftFooter.Text = ""
        .FirstPage.CenterFooter.Text = ""
        .FirstPage.RightFooter.Text = ""
    End With
    Application.PrintCommunication = True
    Application.PrintCommunication = False
    With ActiveSheet.PageSetup
        .PrintTitleRows = ""
        .PrintTitleColumns = ""
    End With
    Application.PrintCommunication = True
    ActiveSheet.PageSetup.PrintArea = "$A$1:$AK$38"
    Application.PrintCommunication = False
    With ActiveSheet.PageSetup
        .LeftHeader = ""
        .CenterHeader = ""
        .RightHeader = ""
        .LeftFooter = ""
        .CenterFooter = ""
        .RightFooter = ""
        .LeftMargin = Application.InchesToPoints(0.25)
        .RightMargin = Application.InchesToPoints(0.25)
        .TopMargin = Application.InchesToPoints(0.75)
        .BottomMargin = Application.InchesToPoints(0.75)
        .HeaderMargin = Application.InchesToPoints(0.3)
        .FooterMargin = Application.InchesToPoints(0.3)
        .PrintHeadings = False
        .PrintGridlines = False
        .PrintComments = xlPrintNoComments
        .CenterHorizontally = True
        .CenterVertically = False
        .Orientation = xlLandscape
        .Draft = False
        .PaperSize = xlPaperA4
        .FirstPageNumber = xlAutomatic
        .Order = xlDownThenOver
        .BlackAndWhite = False
        .Zoom = False
        .FitToPagesWide = 1
        .FitToPagesTall = 1
        .PrintErrors = xlPrintErrorsDisplayed
        .OddAndEvenPagesHeaderFooter = False
        .DifferentFirstPageHeaderFooter = False
        .ScaleWithDocHeaderFooter = True
        .AlignMarginsHeaderFooter = False
        .EvenPage.LeftHeader.Text = ""
        .EvenPage.CenterHeader.Text = ""
        .EvenPage.RightHeader.Text = ""
        .EvenPage.LeftFooter.Text = ""
        .EvenPage.CenterFooter.Text = ""
        .EvenPage.RightFooter.Text = ""
        .FirstPage.LeftHeader.Text = ""
        .FirstPage.CenterHeader.Text = ""
        .FirstPage.RightHeader.Text = ""
        .FirstPage.LeftFooter.Text = ""
        .FirstPage.CenterFooter.Text = ""
        .FirstPage.RightFooter.Text = ""
    End With
    Application.PrintCommunication = True
    Selection.PrintOut Copies:=1, Collate:=True
End Sub

Maintenant j'aimerais avoir une formule qui modifie l'Excel sous certaines conditions. J'ai déjà touché un peu en programmation mais là ça me parait gros pour que j'y arrive seul, je fais donc appel à vos âmes charitables :).

Je vous explique, ci-joint le producteur 1 ( fichier brut récupéré de notre programme ) ; Le producteur 1 modifié est le résultat que nous devons avoir avant impression - Modification de mise en page et d'option d'impression(avec macro actuelle).

J'aimerais donc votre aide sur la mise en page ( voir la différence avec producteur 2 qui est avec moins de produits ).

- Dans tous les cas il faut étirer les cellules de la colonne B ( afin que le nom du produit soit visible en entier ).

- Si le nombre de ligne ( et donc de produits commandés sur la semaine) >/= 6 produit -> j'aimerais que les lignes des produits soient agrandies ET une ligne sur deux avec un surlignement grisé.

- Modification des options d'impressions comme dans la macro ci-dessus ( Imprimer la sélection - Feuille A4 - marge étroite ).

- La sélection à imprimer est faite manuellement à l'heure actuelle mais je présume que c'est possible d'avoir une formule qui check certaines conditions et sélectionne exactement ce dont on a besoin? -> Il faut toujours avoir la date de livraison sur le document ( LIGNE8 dans tous les cas ) / Ensuite il faut avoir tous les produits ( donc en gros il faut qu'il y ait une recherche sur les lignes, tant qu'il y a quelque chose d'écris dans les ligne en dessous de 8 ca continue de sélectionner ) / Pareil pour les clients ( qui sera toujours sur la ligne 18 ) Tant qu'il y a quelque chose d'écrit dans les différentes colonnes de la ligne 18, continue de sélectionner.
=> Afin que cela imprime tous les produits, avec tous les clients et que la sélection remonte jusqu'à la date de livraison.

Est-ce possible d'avoir une formule qui englobe toutes ces demandes? Ou une possibilité de glisser l'Excel sur un .exe qui exécute toutes ces requêtes avec une impression automatique afin de gagner du temps? Je ne sais pas ce qui est possible mais merci énormément à tous ceux qui passeront du temps sur notre problème.

Belle et bonne semaine à vous tous !

Bonjour DiegoB,

Quelques demandes de précisions :

  • Est-il possible que tous les fichiers à mettre en forme et à imprimer soient tous dans un même dossier (et éventuellement automatiquement déplacés dans un dossier de sauvegarde horodaté après traitement) ?
  • Est-il nécessaire de créer un fichier mis en forme ou serait il possible d'ouvrir les fichiers sources en lecture seule, faire les mises en forme et lancer l'impression puis de refermer les fichiers sources sans les sauvegarder ?
  • Pour la largeur de la colonne, la hauteur de ligne et le grisage 1 ligne sur 2, peut-on le faire systématiquement (plus simple) ?

Si oui, je pense que l'on peut tout regrouper dans un fichier macro qui ferait les mises en forme et l'édition.

Cdlt,

Cylfo

Bonjour Cylfo,

Merci pour ta réponse ;

- Effectivement les fichiers sont déjà déplacés dans un dossier bien précis concernant la semaine.
- Les impressions sont la première utilité, si le fichier modifié n'est pas sauvegardé cela ne pose pas de problème.

- largeur de la colonne est ok en automatique - Par contre on peut rencontrer un problème pour la hauteur de ligne pour certains fichiers ( ils ne sont que très peu dans ce cas ), en effet la plupart ne dépassent pas les 4-5 lignes. Mais il y a en toujours 4-5 dans le lot avec énormément de ligne qui rentre généralement tout juste dans une page d'impression sans bouger la hauteur des lignes.

Mais encore une fois, vu que l'ensemble se fait manuellement à l'heure actuelle, ces 4-5 pouvant poser problème serait mis de côté pour les traiter manuellement sans soucis !

Je vous partage la macro et la manipulation effective en ce jour :

Nous ouvrons l'Excel manuellement - faisons les modifications sur les lignes et colonnes si nécessaire - sélectionnons la plage à imprimer - appuyons sur le bouton macro ci-joint.

Celui-ci modifie l'excel pour mettre la mise en forme de l'impression tel que nous l'avons besoin ( paramètre - imprimer la sélection / A4 / Marge étroite )

Sub Impression()
'
' Impression Macro
' Préparer mise en page pour impression
'
' Touche de raccourci du clavier: Ctrl+n
'
Application.PrintCommunication = False
With ActiveSheet.PageSetup
.PrintTitleRows = ""
.PrintTitleColumns = ""
End With
Application.PrintCommunication = True
ActiveSheet.PageSetup.PrintArea = "$A$1:$AK$38"
Application.PrintCommunication = False
With ActiveSheet.PageSetup
.LeftHeader = ""
.CenterHeader = ""
.RightHeader = ""
.LeftFooter = ""
.CenterFooter = ""
.RightFooter = ""
.LeftMargin = Application.InchesToPoints(0.25)
.RightMargin = Application.InchesToPoints(0.25)
.TopMargin = Application.InchesToPoints(0.75)
.BottomMargin = Application.InchesToPoints(0.75)
.HeaderMargin = Application.InchesToPoints(0.3)
.FooterMargin = Application.InchesToPoints(0.3)
.PrintHeadings = False
.PrintGridlines = False
.PrintComments = xlPrintNoComments
.CenterHorizontally = True
.CenterVertically = False
.Orientation = xlLandscape
.Draft = False
.PaperSize = xlPaperLetter
.FirstPageNumber = xlAutomatic
.Order = xlDownThenOver
.BlackAndWhite = False
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
.PrintErrors = xlPrintErrorsDisplayed
.OddAndEvenPagesHeaderFooter = False
.DifferentFirstPageHeaderFooter = False
.ScaleWithDocHeaderFooter = True
.AlignMarginsHeaderFooter = False
.EvenPage.LeftHeader.Text = ""
.EvenPage.CenterHeader.Text = ""
.EvenPage.RightHeader.Text = ""
.EvenPage.LeftFooter.Text = ""
.EvenPage.CenterFooter.Text = ""
.EvenPage.RightFooter.Text = ""
.FirstPage.LeftHeader.Text = ""
.FirstPage.CenterHeader.Text = ""
.FirstPage.RightHeader.Text = ""
.FirstPage.LeftFooter.Text = ""
.FirstPage.CenterFooter.Text = ""
.FirstPage.RightFooter.Text = ""
End With
Application.PrintCommunication = True
Application.PrintCommunication = False
With ActiveSheet.PageSetup
.PrintTitleRows = ""
.PrintTitleColumns = ""
End With
Application.PrintCommunication = True
ActiveSheet.PageSetup.PrintArea = "$A$1:$AK$38"
Application.PrintCommunication = False
With ActiveSheet.PageSetup
.LeftHeader = ""
.CenterHeader = ""
.RightHeader = ""
.LeftFooter = ""
.CenterFooter = ""
.RightFooter = ""
.LeftMargin = Application.InchesToPoints(0.25)
.RightMargin = Application.InchesToPoints(0.25)
.TopMargin = Application.InchesToPoints(0.75)
.BottomMargin = Application.InchesToPoints(0.75)
.HeaderMargin = Application.InchesToPoints(0.3)
.FooterMargin = Application.InchesToPoints(0.3)
.PrintHeadings = False
.PrintGridlines = False
.PrintComments = xlPrintNoComments
.CenterHorizontally = True
.CenterVertically = False
.Orientation = xlLandscape
.Draft = False
.PaperSize = xlPaperA4
.FirstPageNumber = xlAutomatic
.Order = xlDownThenOver
.BlackAndWhite = False
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
.PrintErrors = xlPrintErrorsDisplayed
.OddAndEvenPagesHeaderFooter = False
.DifferentFirstPageHeaderFooter = False
.ScaleWithDocHeaderFooter = True
.AlignMarginsHeaderFooter = False
.EvenPage.LeftHeader.Text = ""
.EvenPage.CenterHeader.Text = ""
.EvenPage.RightHeader.Text = ""
.EvenPage.LeftFooter.Text = ""
.EvenPage.CenterFooter.Text = ""
.EvenPage.RightFooter.Text = ""
.FirstPage.LeftHeader.Text = ""
.FirstPage.CenterHeader.Text = ""
.FirstPage.RightHeader.Text = ""
.FirstPage.LeftFooter.Text = ""
.FirstPage.CenterFooter.Text = ""
.FirstPage.RightFooter.Text = ""
End With
Application.PrintCommunication = True
Selection.PrintOut Copies:=1, Collate:=True
End Sub

Merci d'avance si vous trouvez une méthode qui nous fera gagner du temps dans cette procédure !

Belle et bonne semaine à tous,
Diego.

+1 Si quelqu'un peut nous aider, toujours en recherche pour effectuer ce que Cylfo a proposé :)

Merci d'avance et belle semaine à tout le monde !

Bonjour DiegoB,

Tu trouveras ci-jointe une première versions, elle reprend l'ensemble de tes demandes mais il y a peut-être des ajustements à faire, voir des améliorations possibles.

Le classeur est composé des onglets :

  • MEF & IMPR : Sélection du dossier contenant les fichiers, lancement du traitement et suivi (MFC barre de progression) de la progression du traitement. La feuille est protégée avec un mot de passe vide (c'est juste pour ne pas écraser intempestivement des cellules).
  • Journal : Le traitement est journalisé. Donc tu as une trace de tous les fichiers traités (ok ou éventuellement en erreur). Le nombre de lignes du BC est mentionné, ça peut donner un indice sur les fichiers très / trop volumineux (voir aussi ma dernière remarque).
  • Paramètres : Il contient des valeurs utilisées par le traitement pour vérifier la conformité du fichier, le mettre en forme et configurer l'impression. Ces valeurs sont lues dans le code, cela donne éventuellement un peu de souplesse (sans modifier le code) s'il y a quelques changements dans la structure du fichier.

Pour la zone d'impression, j'ai mis un paramètre (le dernier) qui détermine la largeur minimum de la zone d'impression. Il est fixé à 17, soit la largeur de la zone "société" qui est fusionnée. Si c'est trop large, il suffit de le ramener au n° de la colonne contenant la date ou tout autre valeur que tu décideras.

Tu mentionnes que quelques fichiers seront à reprendre car ils comportent un nombre de lignes très important. Si tu peux donner une règle tenant compte du nombre de lignes et éventuellement du nombre de colonnes, il doit être tout à fait possible de l'automatiser.

Je te laisse tester et me faire tes retours.

Cdlt,

Cylfo

Une version 1-1 qui corrige un bug dans l'affichage de la barre de progression. Pour info, j'ai fait un test en dupliquant les 2 fichiers 50 fois, durée du traitement 2mn09 donc même avec des fichiers plus gros cela devrait rester raisonnable .

Bonsoir DiegoB,

Version 1.2 avec la correction pour les fichiers ne contenant qu'une seule commande ou ne contenant aucune commande.

Il restera le point des fichiers très volumineux si tu peux fournir une règle pour l'ajustement des pages d'impression.

Cdlt,

Cylfo

Rechercher des sujets similaires à "aide creation formule assez lourde mise page impression"