XL 2019 Impression automatique en vba

michelf

XLDnaute Junior
Bonjour, je suis en phase finale de la création d'un bulletin scolaire.
J'ai une macro qui me permet de les générer tous en format pdf.
Je voudrais, à la place (ou en plus) pouvoir les imprimer tous... Je pensais utiliser .printout mais je ne sais pas comment l'intégrer dans (ou en +) de la macro ci-dessous.
Quelqu'un peut-il m'aider, merci d'avance


Sub ImpressionDesBulletins()
Dim c As Range
For Each c In Worksheets("Elèves").Range("A3:A24")
Worksheets("Bull").Cells(1, 8).Value = c.Value
' ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=
Worksheets("Bull").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"C:\Temp\" & c.Value & ".pdf" _
, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, OpenAfterPublish:=False

Next

End Sub
 

Etoto

XLDnaute Barbatruc
Bonjour, je suis en phase finale de la création d'un bulletin scolaire.
J'ai une macro qui me permet de les générer tous en format pdf.
Je voudrais, à la place (ou en plus) pouvoir les imprimer tous... Je pensais utiliser .printout mais je ne sais pas comment l'intégrer dans (ou en +) de la macro ci-dessous.
Quelqu'un peut-il m'aider, merci d'avance


Sub ImpressionDesBulletins()
Dim c As Range
For Each c In Worksheets("Elèves").Range("A3:A24")
Worksheets("Bull").Cells(1, 8).Value = c.Value
' ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=
Worksheets("Bull").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"C:\Temp\" & c.Value & ".pdf" _
, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, OpenAfterPublish:=False

Next

End Sub
Hello,

Pourquoi transformer en PDF pour après l'imprimer, est-ce pas mieux d'imprimer le fichier Excel et si tu en as besoin, le transformer en fichier PDF ?
 

Etoto

XLDnaute Barbatruc
je vais essayer, je dois "supprimer" la partie "pdf" alors ?? ou ajouter cette commande quelque part ??
Cela dépend si tu as besoin du PDF. Si tu veux garder la transformation PDF, tu peux placer ce code au dessus du reste. Si tu ne veux pas du PDF tu remplace le code.

Voici le code pour imprimer le fichier entier :

VB:
ActiveWorkbook.PrintOut Copies:=1, Collate:=True, _
        IgnorePrintAreas:=False

Et si tu veux imprimer par exemple que les 20 premières pages :

Code:
ActiveWorkbook.PrintOut From:=1, To:=20 Copies:=1, Collate:=True, _
        IgnorePrintAreas:=False
 

Etoto

XLDnaute Barbatruc
De rien. Et si tu veux optimiser l'impression tu peux faire

VB:
Sub imprimer()

NBcopies = [B1]
Page_départ = [B2]
Page_fin = [B3]

ActiveWorkbook.PrintOut From:= Page_départ, To:= Page_fin Copies:= NBcopies, Collate:=True, _
        IgnorePrintAreas:=False

End Sub

Comme ça tu précise dans la cellule B1 le nombres de copies, en B2 page de début et B3 page de fin.
Mais si tu veux vraiment tout imprimer tu peux simplement faire :

VB:
NBcopies = [B1]

ActiveWorkbook.PrintOut Copies:= Nbcopies, Collate:=True, _
        IgnorePrintAreas:=False

Cordialement
 

michelf

XLDnaute Junior
Salut
Je reviens sur cette macro qui marche très bien après les améliorations qui m'ont été proposées.
Je voudrais cependant encore l'améliorer; en effet chaque année en fonction du nombre d'élèves je dois aller modifier ma macro dans la ligne : "For Each c In Worksheets("Elèves").Range("A3:A24")"
Il me semble qu'il est possible de "dire" à ma boucle de s'arrêter quand elle trouve une ligne vide. Hélas je ne sais pas comment l'écrire.
La liste des élèves se trouve donc dans l'onglet "Elèves" sur 3 colonnes 1) la référence 2) le prénom 3) le nom

Re voici ma macro actuelle
Merci d'avance

Sub ImpressionDesBulletins()
Dim c As Range
For Each c In Worksheets("Elèves").Range("A3:A24")
Worksheets("Bull").Cells(1, 8).Value = c.Value
' ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=
Worksheets("Bull").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"C:\Temp\" & c.Value & ".pdf" _
, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, OpenAfterPublish:=False
 

michelf

XLDnaute Junior
J'ai ce message d'erreur : Erreur de compilation : erreur de syntaxe

Sub Creerpdf()
'


Dim c As Range

'For Each c In Worksheets("Elèves").Range("A3:A14")
For Each c In Worksheets("Elèves").Derlig = Range(A & Rows.Count).End(xlUp).Row
Worksheets("Bulletin Virgi").Cells(1, 9).Value = c.Value

Worksheets("Bulletin Virgi").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"D:\Document\Docs Excel\Bulletins de Virgi\PDF-Bull-Virgi\" & c.Value & ".pdf" _
, Quality:=xlQualityStandard, IncludeDocProperties:="True", IgnorePrintAreas _
:=False, OpenAfterPublish:=False

Next

End Sub
 

Etoto

XLDnaute Barbatruc
waw merci pour la rapidité, cette ligne que vous proposez devient donc :
Derlig = Range(A & Rows.Count).End(xlUp).Row

Je dois donc écrire
For Each c In Worksheets("Elèves").Derlig = Range(A & Rows.Count).End(xlUp).Row
??
Wow, non, la ligne que je te donne renvoie un nombre, ce nombre est le numéro de ligne de la dernière ligne remplie, maintenant, Derlig contient le numéro de la dernière cellule.

Essaie ça :
VB:
Sub ImpressionDesBulletins()
Dim c As Range
Dim Derlig As integer
Derlig = Range("A" & Rows.Count).End(xlUp).Row
For Each c In Worksheets("Elèves").Range("A3:A"& Derlig)
Worksheets("Bull").Cells(1, 8).Value = c.Value
' ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=
Worksheets("Bull").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"C:\Temp\" & c.Value & ".pdf" _
, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, OpenAfterPublish:=False
End Sub

Je suis pas certains, je connais pas encore trop comment fonctionne les variables dans le range. Pense à copier le fichier avant de tester le code.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 107
Messages
2 085 360
Membres
102 874
dernier inscrit
Petro2611