IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Découpage impression Excel--> PDF


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 51
    Par défaut Découpage impression Excel--> PDF
    Bonjour à tous,
    J'ai un petit problème. Je réalise un code qui me permets d'imprimer des graphiques en PDF
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    Sub Export_PDF()
        Dim ws As Worksheet, wsTemp As Worksheet
        Dim chrt As Shape
        Dim tp As Long
        Dim NewFileName As String
     
        On Error GoTo Whoa
     
        Application.ScreenUpdating = False
     
        NewFileName = "Mon_fichier"
    If ClasseurOuvert("tableau.xlsx") Then
        Windows("tableaux.xlsx").Activate
        Else
        Workbooks.Open ("C:\Tableaux.xlsx")
    End If
        Set ws = Sheets("Tableau")
        Set wsTemp = Sheets.Add
     
        tp = 5
     
        With wsTemp
            For Each chrt In ws.Shapes
                chrt.Copy
                wsTemp.Range("A1").PasteSpecial
                Selection.Top = tp
                Selection.Left = 5
     
                tp = tp + Selection.Height + 30
     
            Next
        End With
     
     
        wsTemp.ExportAsFixedFormat Type:=xlTypePDF, Filename:=NewFileName, Quality:=xlQualityStandard, _
               IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True
        Application.DisplayAlerts = False
        wsTemp.Delete
     
    LetsContinue:
        With Application
            .ScreenUpdating = True
            .DisplayAlerts = True
        End With
        Exit Sub
     
    Whoa:
        MsgBox Err.Description
        Resume LetsContinue
    End Sub
    Le problème c'est que certain de mes graphiques sont coupés comment résoudre se problème ? Je ne trouve pas le bon paramètre.... merci d'avance

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    La meilleure façon de résoudre ça est de contrôler la mise en page puisque l'exportation de PDF n'est rien d'autre qu'une impression dans un fichier.
    Tu peux commencer tes recherches ici :
    https://msdn.microsoft.com/fr-fr/VBA...p-object-excel
    et la continuer dans les diverses propriétés de PageSetup.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 51
    Par défaut
    Encore toi Menhir ! Tu m'aides beaucoup décidement :O
    J'ai regardé ce que tu me proposes, mais aucun des paramètres .PageSetup me permet de dire si graphique " coupé" saut de page.
    J'ai testé un saut de page " à la sauvage" en utilisant le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wsTemp.Rows(50).PageBreak = xlPageBreakManual
    sans grand succès

  4. #4
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par SAP_Excel Voir le message
    J'ai regardé ce que tu me proposes, mais aucun des paramètres .PageSetup me permet de dire si graphique " coupé" saut de page.
    Par contre, on peut ajuster la zone à imprimer à la taille de la feuille.
    https://msdn.microsoft.com/fr-fr/VBA...property-excel
    https://msdn.microsoft.com/fr-fr/VBA...property-excel

    Ou imposer la position des sauts de page.
    https://msdn.microsoft.com/fr-fr/lib.../ff193644.aspx

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 51
    Par défaut
    Bonjour Menhir,
    On peut certes ajouter le dimensionnement de la zone d'impression (j'avais déjà testé) cependant cela n'est pas très pertinent pour mon exemple.
    Dans mon cas j'ai entre 30 et 40 tableaux qui servent d'indicateurs. Si dans mon .PageSetup je fixe les variables .FitToPageWide et .FitToPageTall à 1 cela m'imprimera sur une page et rendra les graph' illisible... si je le fixe à 8 ( nombre de pages si je ne mets rien, les graphs sont coupés)...

    pour la saut de ligne obligé, je le mets en place mais cela ne semble pas affecter les graphiques .
    J'ai essayé de mettre une boucle en place pour compter les shapes et forcer un saut de page si le nombre était =0 modulo 4 ( l'idée c'est de mettre 4 graphs/page)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Sheets("wsTemp").Activate
      For Each chrt In wsTemp.Shapes
     
           If i Mod (4) = 0 Then
               Sheets("wsTemp").Rows(50).PageBreak = xlPageBreakManual
           End If
     i = i + 1
      Next
    mais ce code ne fonctionne pas

  6. #6
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    1 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 1 033
    Par défaut
    Bonjour.
    Deux remarques sur le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sheets("wsTemp").Activate
     
    For Each chrt In wsTemp.Shapes
     
           If i Mod (4) = 0 Then
               Sheets("wsTemp").Rows(50).PageBreak = xlPageBreakManual
           End If
           i = i + 1
    Next
    - ne pas oublier de mettre i=0 en début du traitement (au cas où) ;
    - modifier la ligne du saut de page, ici elle reste figée à 50. Pourquoi ne pas mettre 12.5 x i (ça fait passer par 50, 100, 150, etc.).

    Et une question : est-il possible de transformer tes tableaux en fichier image bmp (par exemple) temporaire, puis redimensionner l'image aux bonnes dimensions avant de l'imprimer en PDF (le tout via le VBA bien sûr) ?

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 51
    Par défaut
    Bonjour Laurent,
    Je m'excuse pour la réponse tardive, ( j'étais en vacances)
    j'ai finalement trouver un bricolage me permettant d'avoir les tableaux en pdf, Je passe par la définition d'une zone d'impression avec le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ActiveSheet.PageSetup.PrintArea = "$A$51:$C$434" ' select de la plage impression
     
           ws.ExportAsFixedFormat Type:=xlTypePDF, Filename:=NewFileName, Quality:=xlQualityStandard, _
            IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
    Il y a surement de faire plus " propre" mais je n'ai pas trouvé
    Cordialement,
    Sap_excel

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Impression d'une liste (aléatoire) d'onglets depuis excel en pdf
    Par virginie2016 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 02/03/2016, 09h32
  2. Impression des feuilles excel en pdf sans boutons
    Par rihab92 dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 04/03/2015, 18h18
  3. [XL-2003] impression : recto feuille excel, verso pdf
    Par math8811 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/01/2013, 12h59
  4. Impression vba excel en pdf
    Par lito74 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 08/06/2010, 00h40
  5. Impression automatique feuille Excel en PDF
    Par FCL31 dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 15/04/2009, 16h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo