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.
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
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.
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 WithBonne 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 SubMeilleures 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