Bouton imprimer PDF certaines feuilles de plusieurs fichiers Excel

Bonjour,

Je souhaite créer un fichier Excel qui n'a qu'une seule feuille et qui comporte qu'un seul bouton "Imprimer" qui lorsque je clique dessus, cela imprime en un seul PDF uniquement les feuilles nommées "Inspection machine" et "Résumé" de plusieurs fichier Excel préalablement sélectionnés.

Est-ce que vous pensez que c'est réalisable?

Mes meilleures salutations,

Thierry

Salut,

Un essai basé sur les fichiers ci-joint. Tu dois tous les placer dans un dossier séparé de ton arborescence, sans fichiers qui ne devraient pas être visités. Un fichier PDF est créé au même endroit.

Si tu ne peux pas placer ces fichiers comme indiqué ci-dessus, il faudra trouver une solution en fonction de ta situation particulière.

Amicalement.

75demo.xlsm (23.00 Ko)
32machine-1.xlsx (10.11 Ko)
16machine-2.xlsx (10.11 Ko)
15machine-3.xlsx (10.11 Ko)

Bonjour Yves,

Merci pour votre aide.

Ca fonctionne partiellement mis à part que ça s'affiche en portrait plutôt qu'en paysage sur le pdf.

Est-il possible d'adapter votre code VBA pour que ça reprenne les propriétés d'impression du premier fichier "machine-1"?

Mes respectueuses salutations,

Thierry

Salut,

Tu n'as jamais indiqué qu'il fallait que ça s'affiche en paysage ! Toutefois, je présume que ce code imprimera en paysage ou en portrait selon le document Excel original. A tester donc avec un document Excel en paysage.

Le PDF que tu m'envoies comporte 6 pages et correspond aux deux onglets de chacun des 3 fichiers visités. J'ai placé des textes relativement simple dans mes fichiers source, mais tu peux effectuer des essais avec des documents plus fournis.

Si tu souhaites imprimer ce fichier pdf à la place de l'archiver, il faudra que je modifie le code. Mais laisse-t-on tomber l'archivage de ce document ?

Si les sauts de page ne sont pas souhaités, indique-moi ce que tu souhaites comme résultat sur la base de fichiers modèles.

A te relire.

Effectivement c'est plus simple si je vous envoie les fichiers modèles.

J'ai bien essayé avec mes fichiers mais ça ne reprend pas les paramètres d'impression.

Il n'est pas nécessaire d'archiver le document.

Bonne journée !

Salut,

Un de ces jours passés, j'ai continué à chercher une solution à ton problème et suis tombé sur des feuilles des fichiers-modèles-source protégées Ca m'a un peu coupé la chique et j'ai abandonné provisoirement. Puis j'ai un peu oublié ton problème et y ai repensé seulement ce soir.

Si tu veux que je continue à chercher une solution, il faudrait me fournir au moins un fichier source avec des feuilles "Inspection machine" et ''Résumé'' non protégées, afin que je puisse faire des essais en remplissant partiellement ces feuilles.

Je suis en tout cas passablement occupé jusqu'à lundi, peut-être encore plus tard.

Amicalement.

Bonjour Yves,

Désolé je verrouille systématiquement mes fichiers par un "." afin d'éviter les mauvaises manipulations.

J'estime être un bon utilisateur Excel avec ses formules et ses fonctions, mais pour ce qui est du VBA, j'avoue que c'est pour moi du chinois.

Bon début de semaine et meilleures salutations!

Salut,

Je ne comprends pas pourquoi, mais je n'arrive plus à insérer des sauts-de-page dans la feuille provisoire créée (celle qui sera imprimée) : est-ce à cause du format paysage ? A cause de tes tableaux ? Et cela ni manuellement, ni par macro. Bizarre !!

J'ai alors tenté une autre solution avec laquelle je place les tableaux importés à des endroits fixes sur la feuille provisoire, mais tout d'abord je ne sais pas si tes tableaux-source peuvent avoir plus d'une page et secondement si la configuration de ton système (principalement ton imprimante) ne va pas faire que les tableaux seront trop hauts ou trop bas ??

Je te propose alors de tester ce nouveau fichier avec tes fichiers sources réels et on verra bien ce qui joue déjà, ce qui doit encore être modifié. J'ai quand même un mauvais présentiment que l'on risque d'être bientôt bloqué ?!? A voir.

Je t'envoie également une feuille ''Provisoire'' telle qu'elle se présente chez moi avant l'impression - avec ses 6 tableaux répartis jusqu'à la ligne 210 - ainsi qu'une image montrant les sauts de page chez moi, soit l'image de la page 6.

13demo-v2.xlsm (26.31 Ko)
aaa

Bonjour Yves,

J'ai pas l'impression que de cette façon on pourra y arriver.

Peut-être qu'il serait mieux de créer un bouton par fichier Excel pour n'imprimer que deux pdf à la fois et ensuite passer par un logiciel genre PDFsam pour pouvoir les regrouper.

En tous cas merci beaucoup pour votre aide.

Bonne journée à vous et à tous les passionnés d'Excel !

Respectueusement,

Ok, je prends note que tu cherches une autre solution.

Désolé de ne pas avoir réussi à t'aider, mais ce n'est pas faute d'avoir essayé

A une prochaine fois.

Bonjour,

J'ai ajouté ce bout de code mais le résultat reste quand même bien différent de la feuille d'origine:

With ActiveSheet.PageSetup
        .PrintArea = ""
        Application.PrintCommunication = False
        .CenterHorizontally = True
        .Orientation = xlLandscape
        .FitToPagesWide = 1
        .FitToPagesTall = False
        Application.PrintCommunication = True
    End With

Bonne journée!

Bonjour à tous,

J'ai réussi à créer un bouton pour pouvoir imprimer en PDF les deux feuilles "Inspection machine" et "Résumé".

Par contre est-ce qu'il est possible de créer un bouton supplémentaire pour pouvoir fusionner tous les PDF qui se trouvent dans le même dossier sans passer par un logiciel comme PDFsam ou autre?

Meilleures salutations,

Thierry

Bonjour Yves,

Voici un code qui fonctionne à merveille:

Option Explicit
Sub Imprimer()
    Dim Sh As Worksheet, Proceed As Boolean
    Dim Fichier_traité As String, Chemin As String, DerLig As Integer

    Application.ScreenUpdating = False
    Application.EnableEvents = False
    Application.DisplayAlerts = False

    Chemin = ThisWorkbook.Path & "\"
    Fichier_traité = Dir(Chemin & "*.xls*")
    Do While Fichier_traité <> ""
        If Fichier_traité <> ThisWorkbook.Name Then
            Proceed = True
            With Workbooks.Open(Chemin & Fichier_traité)
                .Worksheets(Array("Inspection machine", "Résumé")).Copy _
                    After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
                .Close False
            End With
        End If
        Fichier_traité = Dir
    Loop

    If Proceed Then
        For Each Sh In ThisWorkbook.Worksheets
            If Sh.Name <> "Impression" Then Sh.Select Replace:=False
        Next
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
            Filename:=Chemin & Format(Date, "YYYYMMDD") & " - " & "Rapport d'inspection.pdf", _
            OpenAfterPublish:=True
        ActiveWindow.SelectedSheets.Delete
        ThisWorkbook.Saved = True ' Pour ne pas sauvegarder
    End If

    Application.DisplayAlerts = True
    Application.EnableEvents = True

End Sub

Meilleures salutations,

Thierry

Par contre si je veux intégrer ce bouton "Rapport final" dans chaque fichier Excel "00000000 - Inspection machine" ça ne fonctionne malheureusement pas.

La réponse ci-dessous:

Option Explicit
Option Compare Text

Sub Imprimer()
    Dim Sh As Worksheet, Proceed As Boolean, ShToExport, Elem
    Dim Fichier_traité As String, Chemin As String

    Application.ScreenUpdating = False
    Application.EnableEvents = False
    Application.DisplayAlerts = False

    ThisWorkbook.Save ' On va rajouter des onglets fantômes alors on sauvegarde avant

    Chemin = ThisWorkbook.Path & "\"
    Fichier_traité = Dir(Chemin & "*.xls*")
    ShToExport = Array("Inspection machine", "Résumé")

    Do While Fichier_traité <> ""
        If Fichier_traité <> ThisWorkbook.Name Then
            Proceed = True
            With Workbooks.Open(Chemin & Fichier_traité)
                ' le Titre est une formule vers le nom de fichier initial : on ne conserve que le Texte
                .Worksheets("Inspection machine").[A1] = .Worksheets("Inspection machine").[A1].Value
                .Worksheets(ShToExport).Copy _
                    After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
                .Close False
            End With
        Else
            ThisWorkbook.Worksheets(ShToExport).Copy _
                After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
        End If
        Fichier_traité = Dir
    Loop

    If Proceed Then
        For Each Sh In ThisWorkbook.Worksheets
            For Each Elem In ShToExport
                If InStr(1, Sh.Name, Elem & " (", vbTextCompare) Then
                    Sh.Select Replace:=False
                    Exit For
                End If
            Next
        Next
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
            Filename:=Chemin & Format(Date, "YYYYMMDD") & " - " & "Rapport d'inspection.pdf", _
            OpenAfterPublish:=True
         ActiveWindow.SelectedSheets.Delete
         Worksheets(ShToExport(0)).Activate
    End If

    ThisWorkbook.Saved = True ' La situation devrait être celle de la sauvegarde en début de sub
    Application.DisplayAlerts = True
    Application.EnableEvents = True

End Sub

Bon après-midi !

En fait ça fonctionne nickel jusqu'à ce que je protège les feuilles par un mot de passe. Je vais jamais y arriver

J'y comprend rien mais voici le code:

Option Explicit
Option Compare Text

Sub Imprimer()
    Dim Sh As Worksheet, Proceed As Boolean, ShToExport, Elem
    Dim Fichier_traité As String, Chemin As String, Psw As String

    Application.ScreenUpdating = False
    Application.EnableEvents = False
    Application.DisplayAlerts = False

    ThisWorkbook.Save ' On va rajouter des onglets fantômes alors on sauvegarde avant

    Psw = "."
    Chemin = ThisWorkbook.Path & "\"
    Fichier_traité = Dir(Chemin & "*.xls*")
    ShToExport = Array("Inspection machine", "Résumé")

    Do While Fichier_traité <> ""
        If Fichier_traité <> ThisWorkbook.Name Then
            With Workbooks.Open(Chemin & Fichier_traité)
                ' le Titre est une formule vers le nom de fichier initial : on ne conserve que le Texte
                With .Worksheets("Inspection machine")
                    .UnProtect Psw
                    .[A1] = .[A1].Value
                End With
                .Worksheets(ShToExport).Copy _
                    After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
                .Close False
            End With
        Else
            ThisWorkbook.Worksheets(ShToExport).Copy _
                After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
        End If
        Proceed = True
        Fichier_traité = Dir
    Loop

    If Proceed Then
        For Each Sh In ThisWorkbook.Worksheets
            For Each Elem In ShToExport
                If InStr(1, Sh.Name, Elem & " (", vbTextCompare) Then
                    Sh.Select Replace:=False
                    Exit For
                End If
            Next
        Next
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
            Filename:=Chemin & Format(Date, "YYYYMMDD") & " - " & "Rapport d'inspection.pdf", _
            OpenAfterPublish:=True
         ActiveWindow.SelectedSheets.Delete
         Worksheets(ShToExport(0)).Activate
    End If

    ThisWorkbook.Saved = True ' La situation devrait être celle de la sauvegarde en début de sub
    Application.DisplayAlerts = True
    Application.EnableEvents = True

End Sub
Rechercher des sujets similaires à "bouton imprimer pdf certaines feuilles fichiers"