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 :

Création d'un pdf à partir de plusieurs feuilles d'un fichier Excel


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Janvier 2020
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2020
    Messages : 107
    Par défaut Création d'un pdf à partir de plusieurs feuilles d'un fichier Excel
    Bonjour,

    Je me permets de poser une question pour laquelle je n'ai pas trouvé de réponse. J'ai parfois trouvé des débuts de réponses à un problème similaire (notamment un message de M. Pierre Fauconnier), mais que je n'ai pas réussi à adapter. Mon problème est le suivant: dans un fichier Excel, contenant plusieurs feuilles, j'aimerais pouvoir générer, par une macro, la création automatique d'un fichier pdf. Seules deux feuilles sont concernées: la première s'appelle "graphique" et a une zone d'impression nommée "zone_impression_graphique". La seconde feuille est nommée "reponses" et sa zone nommée s'appelle "zone_impression_reponses". J'ajoute que ces deux zones d'impression contiennent des filtres. Mais lorsque la macro est lancée, les filtres ont déjà été appliqués; l'instruction que je recherche n'est donc pas concernée par les filtres, mais seulement par la création du pdf. J'aimerais que le fichier porte un nom précis (par exemple "Résultats.pdf") et soit enregistré dans le même dossier du classeur à partir duquel la macro est lancée.

    J'aimerais éviter les solutions passant par des applications externes ou l'activation de certaines bibliothèques Microsoft.

    J'ai essayé de brancher Chat GPT sur le sujet. Il m'a proposé de nombreuses macros, dont aucune n'a bien fonctionné. Soit la macro créait deux fichiers, soit elle ne contenait que les données d'une des deux feuilles, soit la mise en page était incorrecte, soit il y avait des messages d'erreur. Le programme est en tout cas poli, puisqu'il s'est confondu en excuses après chaque tentative infructueuse...

    Du coup, je repose ma question à des humains. Quelqu'un verrait-il comment utiliser une macro qui répondrait à l'objectif recherché? Je ne joins pas de fichier, ma demande semblant assez explicite. Si ce n'est pas le cas, merci de me le dire, je complèterai!

    Merci d'avance

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 168
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Il est tout à fait possible d'exporter au format pdf une ou quelques feuilles d'un classeur.
    Pour des feuilles distinctes ce qui semble être votre cas, il suffit de sélectionner les feuilles en question et ensuite d'aller chercher la commande Exporter, donner un nom et confirmer. Ensuite on sélectionne l'une des feuilles.
    L'enregistreur de macros peut vous construire ce code

    Voici un exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub t()
      Dim FullName As String
      FullName = ThisWorkbook.Path & "/Test.Pdf"
      Sheets(Array("Démo", "Locataire")).Select
      With ActiveSheet
      .ExportAsFixedFormat Type:=xlTypePDF, _
                           Filename:=FullName, _
                           Quality:=xlQualityStandard, _
                           IncludeDocProperties:=True, _
                           IgnorePrintAreas:=False, _
                           OpenAfterPublish:=False
      .Select
      End With
    End Sub
    L'ordre des feuilles est comme celles des feuilles dans le classeur. La première exportée est la plus à gauche.
    Si l'ordre doit être différents, je procède à une exportation temporaire des feuilles vers un nouveau classeur dans l'ordre qui me convient et j'exporte l'entièreté du classeur.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre confirmé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Janvier 2020
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2020
    Messages : 107
    Par défaut Zoom
    Génial! Tout à fait ce que je cherchais. C'est propre, concis, sans bavure... surtout si je compare aux solutions alambiquées tentées par Chat GPT...
    Merci beaucoup pour votre aide!

    J'ai encore une question quant au zoom. J'ai compris qu'il fallait utiliser l'instruction PageSetup.Zoom. Mais comment l'adapter aux feuilles?
    Imaginons que je voudrais que la page de la feuille "graphique" soit exportée dans le pdf avec un zoom de 75%, et la (les) page(s) de la deuxième feuille avec un zoom de 85%. Comment libeller l'instruction, puis, après création du pdf, revenir au zoom qui était appliqué à chaque feuille?

    Merci encore d'avoir allumé la lumière

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 168
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    L'exportation de feuilles en pdf est une chose, les propriétés des feuilles exportées en sont une autre.
    Soit vous modifier manuellement le % de zoom souhaité par feuille avant l'exportation, soit vous pouvez bien entendu le faire par VBA. Personnellement, je n'utilise le VBA que pour automatiser des tâches répétitives donc dans votre cas précis, je le ferais manuellement.
    Si je devais modifier le zoom d'une quarantaine de feuilles, alors oui sans doute, je le ferais en VBA.

    Un petit exemple en VBA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub t()
      Dim sl As Variant
      sl = Array("Démo", "Locataire")  ' Nom des feuilles
      With ThisWorkbook
      .Worksheets(sl(0)).PageSetup.Zoom = 75
      .Worksheets(sl(1)).PageSetup.Zoom = 90
      End With
    End Sub
    S'il y avait plusieurs feuilles avec des % de zoom différents, je créerais alors une table de mapping et je ferais une boucle pour modifier les paramètres de mise en page, table où l'on pourrait ajouter d'autres possibilités (orientations, lignes de titre à répéter, etc.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre confirmé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Janvier 2020
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2020
    Messages : 107
    Par défaut
    Encore une fois, c'est clair, propre, net. Merci beaucoup!
    Je ne voudrais pas abuser, mais... peut-on, avant d'imposer le changement du zoom, mémoriser le zoom actuel de chaque feuille, pour le remettre, à la fin de la macro, à sa valeur d'avant lancement de la macro?

    Et est-il possible, avant de lancer l'exportation, de vérifier s'il n'y a pas déjà un fichier existant avec ce nom-là - et dans ce cas de figure, poser la question: voulez-vous remplacer le fichier ou conserver l'actuel?

    Au plaisir de vous lire

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 168
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    peut-on, avant d'imposer le changement du zoom, mémoriser le zoom actuel de chaque feuille, pour le remettre, à la fin de la macro, à sa valeur d'avant lancement de la macro?
    Bien entendu
    Pour affecter une valeur à la propriété d'un objet, on écrit Objet.Propriété = Valeur
    Pour lire la propriété d'un objet, on écrit Variable = Objet.Propriété

    Petit exemple simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub t()
     Dim s As Worksheet
     Dim oz As Integer
     Set s = ThisWorkbook.Worksheets("Locataire")
     With s.PageSetup
       ' Avt traitement
       oz = .Zoom  ' Valeur du zoom initial
       .Zoom = 75  ' Nouvelle valeur
       ' Traitement
       ' Code du traitement
       ' Après traitement
       .Zoom = oz  ' Remet la valeur du zoom initial
     End With
    End Sub
    est-il possible, avant de lancer l'exportation, de vérifier s'il n'y a pas déjà un fichier existant avec ce nom-là
    Oui, la fonction Dir, entre-autres, permet de vérifier si un fichier existe

    Exemple d'une Fonction booléenne qui renvoie True ou False
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Function IsFileExist(FullName As String) As Boolean
      ' Vérifie l'existence d'un fichier
      IsFileExist = Dir(FullName) <> ""
    End Function
    dans ce cas de figure, poser la question: voulez-vous remplacer le fichier ou conserver l'actuel?
    Après avoir vérifié si le fichier existe, on peut utiliser la fonction MsgBox imbriquée dans un If en utilisant une variable booléenne au cas où le fichier n'existe pas auquel cas, il faut exporter sans passer par le message.

    Petit exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     Dim flag As Boolean
     If IsFileExist("CheminComplet+NomFichier") Then
         flag = (MsgBox("Message", vbYesNo + vbDefaultButton2) = vbYes)
       Else
         flag = True
      End If
      If flag Then
         MsgBox "Oui j'exporte"
       ' Code pour exporter
      End If
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 508
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 508
    Par défaut
    Citation Envoyé par Cahlagan Voir le message
    Génial! Tout à fait ce que je cherchais. C'est propre, concis, sans bavure... surtout si je compare aux solutions alambiquées tentées par Chat GPT...
    Merci beaucoup pour votre aide!
    Ewww,
    Je ne ferait pas confiance à une IA pour obtenir du code correcte (quelque soit le langage), et encore moins avec VBA.
    Sachant que les IA apprennent sur le net, et vue la qualité de ce qu'on y trouve ....

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 168
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Dans ma première réponse fil#2, j'avais écrit
    L'ordre des feuilles est comme celles des feuilles dans le classeur. La première exportée est la plus à gauche.
    Si l'ordre doit être différents, je procède à une exportation temporaire des feuilles vers un nouveau classeur dans l'ordre qui me convient et j'exporte l'entièreté du classeur
    Si le sujet vous intéresse ou si dans le futur, l'ordre d'impression ou d'exportation de vos feuilles devaient être différent, je viens d'écrire un billet sur le sujet titré VBA Excel - Copiez et personnalisez l'ordre de vos feuilles pour Imprimer et Exporter en PDF
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

Discussions similaires

  1. [XL-365] Création PDF à partir de plusieurs feuilles
    Par retraite83 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 05/05/2021, 22h05
  2. [XL-2010] Générer Un PDF à partir de plusieurs feuilles
    Par ToFind dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 22/11/2010, 23h25
  3. Remplir plusieurs feuilles d'un fichier Excel
    Par soufian1364 dans le forum C#
    Réponses: 2
    Dernier message: 22/03/2009, 12h34
  4. Creation d'un pdf à partir de plusieurs ndr
    Par woully dans le forum Rave
    Réponses: 1
    Dernier message: 07/03/2007, 19h26
  5. Réponses: 3
    Dernier message: 19/12/2005, 19h08

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