3 votes

Exportation de certaines feuilles d'un classeur Excel au format PDF

Je travaille à l'écriture d'un code VBA pour exporter certaines feuilles d'Excel vers le même PDF. J'ai plusieurs feuilles de graphiques dans mon fichier excel dont le nom se termine par "(nom)_Chart". Je souhaite exporter toutes les feuilles dont les noms se terminent par "graphique" vers un seul fichier PDF. Voici le code que j'essaie d'écrire.

Sub FindWS()
        'look if it at least contains part of the name
        Dim s As Worksheet
        Dim strPath As String

        strPath = ActiveWorkbook.Path & "\"

        For Each s In ThisWorkbook.Sheets
            If InStr(1, s.Name, Chart) Then
                s.Activate
                ActiveSheet.ExportAsFixedFormat xlTypePDF, strPath & s.Name & ".pdf"
                Exit Sub
            End If
        Next s
End Sub

Ce code ne limite pas l'exportation aux seules feuilles de graphique, mais exporte l'ensemble du classeur. Est-ce que quelqu'un peut m'aider à comprendre ce qui manque dans mon code ?

Gracias.

CODE MODIFIÉ :

Sub FindWS()
'look if it at least contains part of the name
Dim s As Worksheet
Dim strPath As String

strPath = ActiveWorkbook.Path & "\"

For Each s In ThisWorkbook.Worksheets
      If InStr(1, s.Name, "Chart") = 0 Then
          ' Hide the sheet so it is not exported as PDF
          s.Visible = False
             End If
Next s
          With ActiveWorkbook
          .ExportAsFixedFormat xlTypePDF, strPath & "TEST.pdf"
                End With

End Sub

2voto

Siddharth Rout Points 63935

Je suis surpris que votre code s'exécute en premier lieu :) Vous auriez dû obtenir une erreur run time error '13', type mismatch

Sheets y Worksheets sont deux choses différentes dans Excel

Les Worksheets est une collection de tous les objets Feuille de calcul du classeur spécifié ou actif. Chaque objet Feuille de calcul représente une feuille de calcul. Alors que l'objet Sheets La collection, quant à elle, consiste non seulement en une collection de feuilles de travail, mais aussi en d'autres types de feuilles, comme les feuilles de graphique, les feuilles de macro Excel 4.0 et les feuilles de dialogue Excel 5.0.

Ainsi, si vous déclarez votre objet comme Worksheet

Dim s As Worksheet

Assurez-vous ensuite qu'en bouclant, vous passez par la bonne collection

For Each s In ThisWorkbook.Worksheets

et non

For Each s In ThisWorkbook.Sheets

sinon vous obtiendrez un run time error '13', type mismatch

SUIVI (sur la base des commentaires)

@ Siddharth : 1. oui, je veux exporter les feuilles de graphiques qui se terminent par le nom "Graphique". 2. Je veux tous ces graphiques dans un seul PDF et le nom du PDF doit être le nom du fichier "original". (Je devrai enregistrer les fichiers PDF finaux dans des emplacements différents afin d'éviter le chevauchement des fichiers). - datacentric

Option Explicit

Sub Sample()
    Dim ws As Object
    Dim strPath As String, OriginalName As String, Filename As String

    On Error GoTo Whoa

    '~~> Get activeworkbook path
    strPath = ActiveWorkbook.Path & "\"
    '~~> Get just the name without extension and path
    OriginalName = Left(ActiveWorkbook.Name, (InStrRev(ActiveWorkbook.Name, ".", -1, vbTextCompare) - 1))
    '~~> PDF File name
    Filename = strPath & OriginalName & ".pdf"

    '~~> Loop through Sheets Collesction
    For Each ws In ActiveWorkbook.Sheets
        '~~> Check if it is a Chart Sheet and also it ends in "Chart"
        If ws.Type = 3 And UCase(Right(Trim(ws.Name), 5)) = "CHART" Then
            ws.Visible = True
        Else
            ws.Visible = False
        End If
    Next ws

    '~~> Export to pdf
    ActiveWorkbook.ExportAsFixedFormat xlTypePDF, Filename

LetsContinue:
    Exit Sub
Whoa:
    MsgBox Err.Description
    Resume LetsContinue
End Sub

0voto

Nick.McDermaid Points 4806

Ce code passe en revue toutes les feuilles. Si le nom de la feuille ne correspond pas, il la cache. Lorsqu'il a terminé, il exporte toutes les feuilles visibles dans un PDF. Assurez-vous de ne pas sauvegarder le fichier Excel par la suite ou les feuilles resteront cachées.

Bien sûr, ce code n'est pas testé, donc si vous avez des problèmes, posez-les (ou essayez de les résoudre vous-même, vous apprendrez peut-être quelque chose).

Sub FindWS()
    'look if it at least contains part of the name
    Dim s As Worksheet
    Dim strPath As String

    strPath = ActiveWorkbook.Path & "\"

    For Each s In ThisWorkbook.Sheets
        If InStr(1, s.Name, "Chart") = 0 Then
              ' Hide the sheet so it is not exported as PDF
              s.Visible = False 
        End If
    Next s

    ' Export all sheets as PDF         
    ActiveSheet.ExportAsFixedFormat xlTypePDF, strPath & "TEST.pdf"
End Sub

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X