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
 

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:

michelf

XLDnaute Junior
Oui en effet, merci à la chance.
cependant dans un premier temps il manquerait un "next" quelque part ...que j'ai mis avant end sub

mais après j'ai ce message :
Erreur d'exécution '1004':
La méthode 'Range' de l'objet '_Global' a échoué....
 

michelf

XLDnaute Junior
Tu as eu de le chance car je suis beaucoup moins en ligne depuis août et cela presque deux mois que j'étais plus dans le forum et lorsque tu m'écris, je suis en ligne 🤣
Je vous remercie pour votre aide : ça marche !! 2 choses empêchaient le bon fonctionnement :
1 . Il fallait des " " autour du A
2. ma feuille "Elèves" comportait des titres et une ligne vide en dessous.
C'est réglé grâce à vous encore merci !
 

michelf

XLDnaute Junior
Ah, encore une chose (je deviens exigeant, pardon) quand ma boucle se termine, la cellule Cells(1, 9) est vide et donc ça donne une impression bizarre avec les erreurs signalées à juste titre puisque la réf est "vide"
Donc j'aimerais qu'une fois la boucle terminée on reviennent sur le bulletin dans la cellule "1, 9" avec "e1" écrit dedans ! Est-ce possible, j'ai fait quelques tentatives infructueuses.
Merci

Sub Creerpdf()
'
' pdf Macro
'

Dim c As Range
Dim Derlig As Integer
Derlig = Range("A" & Rows.Count).End(xlUp).Row
For Each c In Worksheets("Elèves").Range("A1:A" & Derlig)

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
Ah, encore une chose (je deviens exigeant, pardon) quand ma boucle se termine, la cellule Cells(1, 9) est vide et donc ça donne une impression bizarre avec les erreurs signalées à juste titre puisque la réf est "vide"
Donc j'aimerais qu'une fois la boucle terminée on reviennent sur le bulletin dans la cellule "1, 9" avec "e1" écrit dedans ! Est-ce possible, j'ai fait quelques tentatives infructueuses.
Merci

Sub Creerpdf()
'
' pdf Macro
'

Dim c As Range
Dim Derlig As Integer
Derlig = Range("A" & Rows.Count).End(xlUp).Row
For Each c In Worksheets("Elèves").Range("A1:A" & Derlig)

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
Re,

Je suis désolé, j'ai pas compris ta demande, tu veux remettre des données dans une cellule ou la sélectionner ?

EDIT : Je t'écris en plein milieu d'un cours sur Excel où on apprend é mes camarades le RECHERCHEV 😂
 

michelf

XLDnaute Junior
Re,

Je suis désolé, j'ai pas compris ta demande, tu veux remettre des données dans une cellule ou la sélectionner ?
Je voudrais après le travail de la boucle revenir à la cellule 1,9 de l'onglet "Bulletin Virgi" et y inscrire la "string" e1 pour qu'on est l'affichage du premier bulletin. C'est juste que (je ne sais pas si c'est lié) mais la cellule étant vide ça revient à "modifier la macro : débogage" Je suppose que c'est le fait que la cellule est vide ...
 

Etoto

XLDnaute Barbatruc
Je voudrais après le travail de la boucle revenir à la cellule 1,9 de l'onglet "Bulletin Virgi" et y inscrire la "string" e1 pour qu'on est l'affichage du premier bulletin. C'est juste que (je ne sais pas si c'est lié) mais la cellule étant vide ça revient à "modifier la macro : débogage" Je suppose que c'est le fait que la cellule est vide ...
Heuu avec ce que j'ai compris :
VB:
Sub Creerpdf()
'
' pdf Macro
'

Dim c As Range
Dim Derlig As Integer
Derlig = Range("A" & Rows.Count).End(xlUp).Row
For Each c In Worksheets("Elèves").Range("A1:A" & Derlig)

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

Cells(1,9).Activate
Cells(1,9).Value = "e1"

End Sub

Le code fonctionne si tu exécutes ce code dans l'onglet "Bulletin Virgi", si c'est pas le cas :
VB:
Sub Creerpdf()
'
' pdf Macro
'

Dim c As Range
Dim Derlig As Integer
Derlig = Range("A" & Rows.Count).End(xlUp).Row
For Each c In Worksheets("Elèves").Range("A1:A" & Derlig)

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

Sheets("Bulletin Virgi").Activate
Cells(1,9).Activate
Cells(1,9).Value = "e1"

End Sub
 

michelf

XLDnaute Junior
Pas de changement et donc comme avant : ouverture de la macro avec ces lignes surlignées en jaune pour demande de débogage :
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
 

Etoto

XLDnaute Barbatruc
Pas de changement et donc comme avant : ouverture de la macro avec ces lignes surlignées en jaune pour demande de débogage :
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
C'est quoi le contenu de la cellule Cells(1,9) avant l'exécution du code ?
 

michelf

XLDnaute Junior
au départ elle (1 , 9) contient la réf aux élèves "e1", "e2", ....
Je viens de faire 2 essais, le premier par distraction j'étais sur la feuille "eleves' et ça a produit les pdf des bulletins et a bien sûr écrit e1 dans '1,9' de la feuille eleves et pas de débogage
j'ai recommencé en me plaçant comme prévu sur la feuille bulletin et ça génère bien les pdf mais bizarrement ne place pas e1 et ouvre le debogage
 

Etoto

XLDnaute Barbatruc
au départ elle (1 , 9) contient la réf aux élèves "e1", "e2", ....
Je viens de faire 2 essais, le premier par distraction j'étais sur la feuille "eleves' et ça a produit les pdf des bulletins et a bien sûr écrit e1 dans '1,9' de la feuille eleves et pas de débogage
j'ai recommencé en me plaçant comme prévu sur la feuille bulletin et ça génère bien les pdf mais bizarrement ne place pas e1 et ouvre le debogage
Si "e1" est déjà écrit dedans, pourquoi tu voudrais qu'il y sois écrit une deuxième fois ? Le problème pourrait venir de la variable "c", elle est égale à quoi pendant l'éxecution de la boucle ?
 

michelf

XLDnaute Junior
Je vais essayer de résumer :
1 dans la cellule i1 au départ il y a le n° de référence de l'élève numéro 1 (e1)
2 Je lance la macro
3 Dans la cellule i1 défilent tous les N° des élèves (cette année ci : 19) ... et dans les bulletins, défilent les points attribués à chacun et ça génère bien les 19 pdf attendus et...
4 ...après l'élève e19 la macro rencontre la ligne vide et arrête la boucle
5 A ce moment là, dans la cellule i1, c'est le vide (puisque ligne vide : fin de la liste élèves)
6 Les cases de points du dernier bulletin indiquent des codes d'erreurs (normal puis que la référence est vide)
7 Le processus s'arrête sur l'ouverture de la macro qui demande un débogage
8
Les lignes que vous m'avez envoyées à la fin :
Sheets("Bulletin Virgi").Activate
Cells(1,9).Activate
Cells(1,9).Value = "e1"

Ne sont donc pas atteintes
J'aimerais donc empêcher l'arrivée du "débogage" et que la cellule i1 retrouve son N° de départ (pour ne pas affoler l'utilisatrice ;) ) et que ce soit 'propre' (en fait il suffit de retaper e1 dans la cellule, mais bon...
Voilà, ce n'est pas facile d'être clair comme ça à distance, j'espère l'avoir été un peu plus...


En tout cas un grand merci pour le travail déjà accompli

PS : je ne sais pas si je saurai envoyer le fichier : il fait 352 Ko ?? Est-ce nécessaire ?
 

Discussions similaires

Réponses
3
Affichages
674

Membres actuellement en ligne

Statistiques des forums

Discussions
314 645
Messages
2 111 536
Membres
111 185
dernier inscrit
Laurent.