Excel – sauvegarde la gamme de cellules en plusieurs feuilles en format pdf sans espace blanc

Première timer ici! J'ai une feuille de calcul qui utilise plusieurs feuilles de calcul, chaque feuille formatée comme ceci:

**Sheet 1** Name Assessment Item 1 Assessment Item 2 Student Name Feedback Item 1 Feedback Item 2 Student Name Feedback Item 1 Feedback Item 2 **Sheet 2** Name Assessment Item 1 Assessment Item 2 Student Name Feedback Item 1 Feedback Item 2 Student Name Feedback Item 1 Feedback Item 2 

Je veux pouvoir exporter la rangée de titre et une ligne d'étudiant (sur toutes les feuilles) par pdf. Cela signifierait combiner la rangée de titre et les 8 lignes d'étudiants (une par feuille) en une seule feuille et exporter, je pense.

J'ai utilisé ce code:

 Sub copyValueTable() ThisWorkbook.Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Select ActiveSheet.Range("A1:F2").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ "C:\First.pdf", Quality:=xlQualityStandard, IncludeDocProperties:=True, _ IgnorePrintAreas:=False, OpenAfterPublish:=True ActiveSheet.Range("A1:F1,A3:F3").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ "C:\Second.pdf", Quality:=xlQualityStandard, IncludeDocProperties:=True, _ IgnorePrintAreas:=False, OpenAfterPublish:=True End Sub 

… et cela fait ce que je veux, mais (a) le pdf a une feuille par page, ce qui signifie beaucoup d'espace blanc, (b) il ne correspond pas tous à une page, donc le formatting va mal et (c ) J'aimerais qu'il soit plus automatisé, si possible, afin de ne pas créer une gamme de feuilles de travail pour chacun de mes 150 étudiants …

Toute idée serait grandement appréciée!

Watto 🙂

Réponse révisée suite à des clarifications dans les commentaires (révisée pour la mise en forme):

 Sub copyValueTable() Dim ws As Worksheet Dim heads Dim new_sheet As Worksheet Dim rownum Dim ns_rownum Dim filename Dim filepath Dim rowcnt ' add a new workbook for the summary... Set new_sheet = Sheets.add rownum = 1 rowcnt = Sheets(2).Range("A1").End(xlDown).row ' loop through rows in outer loop For rownum = 2 To rowcnt Debug.Print "..on student row " & rownum & " in outer loop..." ns_rownum = 1 ' initialise for loop through sheets ' loops through sheets (except new)... For Each ws In Worksheets If ws.Name <> new_sheet.Name Then Debug.Print "....on sheet " & ws.Name & " in inner loop..." ' copy heads... ws.Rows(1).Copy new_sheet.Rows(ns_rownum) ns_rownum = ns_rownum + 1 ' copy data for current record (paste to ns_rownum row to allow for other sheets) ws.Rows(rownum).Copy new_sheet.Rows(ns_rownum).PasteSpecial Paste:=xlPasteAll ' paste column widths to new sheet on first pass through each sheet If rownum = 2 Then ws.Columns("A:Z").Copy new_sheet.Columns("A:Z").PasteSpecial Paste:=xlPasteColumnWidths End If ns_rownum = ns_rownum + 2 End If Next ' write to pdf filename = Sheets(2).Range("A" & rownum).Value filepath = Environ("userprofile") & "\" & filename & ".pdf" new_sheet.Rows("1:" & ns_rownum).ExportAsFixedFormat Type:=xlTypePDF, _ filename:=filepath, Quality:=xlQualityStandard, IncludeDocProperties:=True, _ IgnorePrintAreas:=False, OpenAfterPublish:=True ' delete data in tmp sheet other than heads ready for next loop through sheets Sheets(1).Rows("2:" & ns_rownum).Delete Next rownum ' clean up Application.DisplayAlerts = False new_sheet.Delete Application.DisplayAlerts = True Set new_sheet = Nothing Set ws = Nothing End Sub 

Vous devrez replace 'Environ ("userprofile") par le path d'access que vous souhaitez utiliser pour les files pdf, ce qui reprendra la variable d'environnement Windows pour le directory par défaut des users actuels.

Ce script révisé ci-dessus ajoute une nouvelle feuille de température, prend les têtes de la 2ème feuille (comme la température sera maintenant la première) puis boucle toutes les lignes sur la 2ème feuille (en supposant que les autres feuilles ont le même nombre de lignes qu'il y a une rangée par élève sur chaque). Dans ce cas, il y a une boucle intérieure à travers les feuilles pour prendre la ligne correspondant à l'étudiant actuel et copyr cela sur la feuille tmp. La feuille Tmp est ensuite exscope en format PDF et effacée pour le prochain étudiant.

Veuillez noter les hypothèses ci-dessus au sujet de chaque élève sur la même ligne sur chaque feuille. Si ce n'est pas correct, un autre mécanisme serait nécessaire pour sélectionner parmi les lignes appropriées.

J'ai copié les largeurs des colonnes pour les colonnes A: Z, vous pouvez ajuster les lettres de la colonne à vos besoins.

J'espère que cela t'aides.