XL 2019 Enregistrer et imprimer une feuille en pdf

PeewhY

XLDnaute Nouveau
Bonjour à toutes et à tous,

Novice en VBA, j’espère ne pas commettre d’impair en posant mes questions sur un sujet qui a déjà été traité, mais pour lequel je ne parviens pas à trouver de réponse.

Je suis enseignant et j’ai créé, pour mes collègues et moi-même, un fichier Excel (EVAMATHS.xls, classeur Excel 97-2003) pour la saisie de notes d’une évaluation commune (voir capture d’écran en fichier joint).

Une fois les notes saisies dans les feuilles précédentes, des graphiques de résultats globaux et un bilan (comprenant les moyennes et le niveau) sont générés automatiquement. Pour obtenir chaque bilan, le numéro de l’élève est tapé en A1 en blanc sur fond blanc pour être invisible à l’impression (ex : l’élève BRIDOU est l’élève n° 2) : le nom, le prénom, les notes et le niveau de l’élève sont générés grâce à la formule :

=INDEX(Générales!B1:B13;EQUIV($A$1;Générales!$A:$A;0))&" "&INDEX(Générales!C1:C13;EQUIV($A$1;Générales!$A:$A;0))

où « Générales » est l’onglet qui rassemble dans un tableau, l’intégralité des résultats de tous les élèves, la colonne B donne le nom de l’élève et la colonne C son prénom.

J’aurais pu m’arrêter là, mais pour automatiser un maximum de procédures, j’ai souhaité créer des macros pour permettre la prévisualisation, l’enregistrement ou l’impression du bilan de chaque élève.

Vu mon niveau de « quiche » en VBA (j’étais bon en BASIC, mais c’était à l’époque de l’Oric Atmos et du Commodore 64 dans les années 80 !!!), j’ai fait des recherches et réussi à créer des macros pour chacune de ces actions, du moins je le croyais puisqu’en faisant F5, les macros semblaient fonctionner.

Après avoir fermé Excel puis y être retourné, je me suis aperçu que, non seulement les boutons n’étaient plus actifs, mais en plus, le même code s’était copié sur les 4 macros, supprimant ainsi le code tapé pour chacune des procédures. Voici le code « survivant » correspondant à l’enregistrement du fichier en pdf (au passage, j’ignore pourquoi et comment les lignes 10 et 11 sont apparues alors que je ne les avais pas tapées !).

1.Sub Enreg_Pdf()

2.Dim LeRep As String

3.LeRep = ThisWorkbook.Path

4.ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _

5. LeRep & "_" & ".pdf", Quality:= _

6. xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _

7. From:=1, To:=1, OpenAfterPublish:=True

8.End Sub

9.

10.Private Sub CommandButton1_Click()

11.End Sub


Avant de totalement abandonner, parce que vous êtes ma dernière chance (!), j’ai revu mes souhaits « à la baisse » et voilà ce que je voudrais pouvoir faire à présent :

- pouvoir enregistrer chaque bilan (le top serait de pouvoir les enregistrer tous en même temps, mais bon…) en pdf en lui donnant le nom de l’élève situé dans la cellule B2 (ex : enregistrer le fichier en BRIDOU.pdf) ;

- pouvoir donner à l’utilisateur la possibilité d’enregistrer les pdf ainsi générés au même endroit que le fichier principal EVAMATHS.xls (ou à tout autre endroit de leur choix) puisque le fichier sera transmis à mes collègues pour leurs propres élèves et que certains travailleront à partir du fichier copié sur leur ordi, quand d’autres le laisseront sur une clé USB ;

- pouvoir imprimer le bilan pdf sur papier individuellement ou en les regroupant tous.

Tous les exemples trouvés sur les forums me donnaient jusqu’à présent la solution pour chacun de ces souhaits, mais jamais les trois en même temps et aucune de mes tentatives n’a été fructueuse.

Bien entendu, il reste toujours la possibilité de n’utiliser aucune macro et de tout faire « manuellement » en passant par la commande « Fichier », mais ce serait dommage puisque je suis certain que la solution est quelque part dans l’un de vos cerveaux aguerris !

Enfin, pour information, ma version d’Excel est celle d’Office 2019.

Dernière question, me conseillez-vous d’enregistrer mon fichier EVAMATHS au format « Classeur Excel (prenant en charge les macros) » ?

Merci à toutes et à tous de m’avoir lu jusqu’au bout, puisque je reconnais que mon message est fort long ! J’attends vos éventuelles solutions à mon problème.

Bon courage à vous et bonnes vacances pour les concernés (-ées) !
 

Pièces jointes

  • macro forum3.png
    macro forum3.png
    74.9 KB · Affichages: 43

M12

XLDnaute Accro
Bonjour,

Un exemple de macro
VB:
Sub Enreg_Pdf()
  Dim LeRep As String, NomDossier As String
  LeRep = ThisWorkbook.Path & "\"
  NomDossier = "Archives test"
 ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
    LeRep & NomDossier & ".pdf", Quality:= _
    xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
    From:=1, To:=1, OpenAfterPublish:=True

End Sub
 

PeewhY

XLDnaute Nouveau
Bonjour,

Un exemple de macro
VB:
Sub Enreg_Pdf()
  Dim LeRep As String, NomDossier As String
  LeRep = ThisWorkbook.Path & "\"
  NomDossier = "Archives test"
 ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
    LeRep & NomDossier & ".pdf", Quality:= _
    xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
    From:=1, To:=1, OpenAfterPublish:=True

End Sub
Bonsoir M12 ! Merci à vous pour cette réponse que je n'ai pas encore essayée. Je vous tiens au courant dès que je l'aurai testée.
 

PeewhY

XLDnaute Nouveau
Cher M12,

Voici le code que j'ai tapé (que j'ai légèrement modifié pour le personnaliser) et qui a fonctionné une fois :



Sub Enreg_Pdf()
Dim LeRep As String, NomDossier As String
LeRep = ThisWorkbook.Path & "\"
NomDossier = "Maths_CM2"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
LeRep & NomDossier & ".pdf", Quality:= _
xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
From:=1, To:=1, OpenAfterPublish:=True
MsgBox "Le bilan PDF a été généré pour " _
& vbCrLf & Range("B2").Value _

End Sub

Lorsque j'ai changé d'élève, le programme m'a donné une erreur : "Erreur d'exécution (suite de chiffres) - Erreur Automation - Le fichier spécifié est en lecture seulement".
Je me retrouve donc - presque ! - au point de départ... Une idée peut-êre ?

En outre, ce code se retrouve sur la même page que celui que j'ai tapé pour appeler la macro, à savoir :
Private Sub CommandButton1_Click()
Call Enreg_Pdf
End Sub
 

PeewhY

XLDnaute Nouveau
Merci kiki29, mais vous ne dormez jamais ?!!! Comme je me retrouve avec une macro qui n'a fonctionné que pour 1 seul enregistrement (d'ailleurs, j'ai l'impression que tous les fichiers enregistrés porteront le même nom (d'où peut-être le problème...), je cours de ce pas lire le lien que vous m'avez gentiment adressé...
 

PeewhY

XLDnaute Nouveau
Chers gentils contributeurs !
Je progresse car je me suis aperçu qu'effectivement, la macro donne le même nom à tous les pdf créés. Du coup, changer d'élève génère un pdf dont le nom existe déjà (ici "Maths-CM2.pdf").
Du coup, en modifiant le nom du pdf enregistré, la macro peut recréer un fichier appelé "Maths-CM2.pdf".
Mais cela devient fastidieux s'il faut renommer chaque nouveau pdf ! L'idée serait donc que le pdf enregistré prenne le nom de la cellule B2 qui contient le nom de famille de l'élève...
 

PeewhY

XLDnaute Nouveau
Bonsoir M12,

MERCIIIIII !!! Entre vos conseils, la lecture conseillée par kiki29, quelques essais et plantages qui m’ont motivé pour m’accrocher, j’ai ENFIN réussi à faire fonctionner parfaitement la macro !

Voici ce que donne le code (qui fonctionne maintenant à merveille ! ) :


Sub Enreg_Pdf()

Dim LeRep As String, NomDossier As String

LeRep = ThisWorkbook.Path & "\"

NomDossier = "Maths_CM1_"

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _

LeRep & NomDossier & Range("B2").Value & ".pdf", Quality:= _

xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _

From:=1, To:=1, OpenAfterPublish:=True

MsgBox "Le bilan PDF a été généré pour " _

& vbCrLf & Range("B2").Value _

End Sub



Du coup, cela me donne des ailes pour une cerise sur le gâteau…

Pour éditer le bilan d’un élève, il faut saisir son numéro dans la case A1 de la feuille "bilans_T1" que j’ai mise en copie au début de cette discussion.

Ces numéros sont récupérés à partir de la feuille "noms_élèves" jointe à cette question.

Est-il envisageable de créer une nouvelle macro qui contiendrait une boucle permettant de générer la sauvegarde de tous les pdf (cellules A5 à A13 de "noms_élèves") en une seule fois ?
 

Pièces jointes

  • macro forum4.png
    macro forum4.png
    45.2 KB · Affichages: 36
Dernière édition:

PeewhY

XLDnaute Nouveau
Merci à tous pour tous vos sympathiques conseils ! Tout fonctionne à merveille pour mes macros...
Je n'hésiterai donc pas à refaire appel à vous en cas de...!

En tout cas, je suis vraiment ravi de m'apercevoir à quel point ce genre de forum est efficace, et la gentillesse dont ses contributeurs font preuve. Encore un ENORME MERCI à vous !!!

PS : je ne sais pas comment clore un sujet, désolé... :(
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 917
Membres
101 839
dernier inscrit
laurentEstrées