Macro impression/PDF
Bonsoir à tous,
je cherche à adapter sur un classeur un code me permettant d'imprimer une sélection de feuilles affichées ou masquées (quid Userform avec Msgbox à choix multiples pour sélection des feuilles?).
Un code transmis par LouReed (créé par Bruno45) offrant la possibilité de transformer en ".Pdf" me serait utile a son tour.
Ainsi est donc née l'idée de combiner ces deux options afin d'extraire la sélection des feuilles soit en ".Pdf" indépendants pour les stocker sur un dossier de mon DDR, soit en les imprimant en fonction du besoin.
Est-il donc possible de:
- créer un Userform avec Msgbox pour sélectionner les feuilles d'un classeur ?
- avoir la possibilité depuis ce Msgbox soit d'imprimer cette sélection soit de les transformer en ".Pdf" indépendants ?
J'avoue ne pas être en mesure de rédiger ces codes et sollicite donc, s'il vous plaît, votre aide.
P.S: le classeur en question ne pouvant être transmis pour des raisons de confidentialité professionnelle, je joins un classeur d'essai dans lequel j'ai volontairement masqué des onglets.
D'avance merci (en espérant être clair sur le besoin)
Salut tlam
Bonsoir à tous,
je cherche à adapter sur un classeur un code me permettant d'imprimer une sélection de feuilles affichées ou masquées (quid Userform avec Msgbox à choix multiples pour sélection des feuilles?).
Si tu imprimes une feuilles masquées, elle n'est plus réellement masquée
Un code transmis par LouReed (créé par Bruno45) offrant la possibilité de transformer en ".Pdf" me serait utile a son tour.
Ainsi est donc née l'idée de combiner ces deux options afin d'extraire la sélection des feuilles soit en ".Pdf" indépendants pour les stocker sur un dossier de mon DDR, soit en les imprimant en fonction du besoin.
Est-il donc possible de:
- créer un Userform avec Msgbox pour sélectionner les feuilles d'un classeur ?
- avoir la possibilité depuis ce Msgbox soit d'imprimer cette sélection soit de les transformer en ".Pdf" indépendants ?
J'avoue ne pas être en mesure de rédiger ces codes et sollicite donc, s'il vous plaît, votre aide.
Une idée à ajouter à mon fichier de code, un UserForm de sélection des feuilles
Je te donne la réponse dès que je peux
@+
Salut BrunoM45,
Effectivement je masque certaines feuilles car pas utiles au quotidien mais je les imprime hebdomadairement. Pouvoir la sélectionner sans l'afficher au préalable m'évite une manipulation.
Merci pour ton aide sur le sujet.
hâte de voir ton code
Cordialement
Bonjour tlam,
Tu trouveras le classeur avec un tas d'exemples, dont celui qui t'intéresse, ICI
https://www.excel-pratique.com/fr/telechargements/utilitaires/pdf-email-vba-excel-no508
@+
Bonjour BrunoM45,
Beau boulot
Dernier point, si d'avenir je ne souhaite pas pouvoir imprimer les feuilles masquées (réflexion de modification du classeur en cours) que dois-je modifier au code du UserForm?
Cdt,
Salut tlam
Bonjour BrunoM45,
Beau boulot
, cependant il y un à bug lorsque l'on utilise les macros "x feuilles vers 1 pdf" et "x feuilles vers x pdf". Dernier point, si d'avenir je ne souhaite pas pouvoir imprimer les feuilles masquées (réflexion de modification du classeur en cours) que dois-je modifier au code du UserForm?
Cdt,
Les 2 procédures dont tu me parles ne sont pas prévues pour ta situation (feuilles masquées)
Ceci dit, c'est peut-être quelque chose à laquelle il faut que je pense dans me codes
Si à l'avenir, tu ne souhaites pas imprimer les feuilles masquées et passer par l'USF, il faut les enlever de la liste
Private Sub UserForm_Initialize()
' Vide la ListBox avant ajout
Me.Lbx_Feuilles.Clear
' Pour chaque feuille du classeur
For Each Sht In ThisWorkbook.Worksheets
' Si la feuille n'est pas celle de l'acceueil et est visible
If Sht.Name <> "Accueil" And Sht.Visible = xlSheetVisible Then
' L'ajouter à la liste
Me.Lbx_Feuilles.AddItem Sht.Name
End If
Next Sht
End Sub@+
Ok, merci à toi BrunoM45
@+
Une dernière question, penses-tu possible que la sélection de plusieurs feuilles en export .pdf soit possible vers un .pdf indépendant pour chaques feuilles?
Cordialement,
me voilà découvert, j'essaye justement de mixer mais sans obtenir le résultat escompté
Bonsoir BrunoM45,
Après réflexion, j'ai modifier mon classeur pour ne plus devoir imprimer les feuilles masquées. Pour le moment cela semble être opérationnel toutefois je conserve ton codage au cas où.
J'ai donc adapter ton code en conséquence et cela fonctionne parfaitement. Encore merci pour ton aide.
Il me reste à adapter le codage pour obtenir un PDF par feuilles sélectionnées depuis l'USF et c'est là que je coince totalement.
Actuellement j'en suis là, mais comme j'en perds mon latin, ça doit être du grand n'importe quoi:
Private Sub Cbn_Export_Click()
Dim sPath As String, sFileName As String
Dim ShtArray() As String, CountArr As Integer
Dim ShtHidden() As String, CountHidden As Integer
Dim Ind As Integer
' Désactiver le rafraichissement écran
Application.ScreenUpdating = False
Me.Hide ' Masquer l'USF
' Initialisation de certaines variables
sPath = Environ("TEMP") & "\"
' Vérifier l'extension du fichier à enregistrer
If Right(sFileName, 4) <> ".pdf" Then sFileName = sFileName & ".pdf"
' Pour chaque feuilles de la ListBox
For Ind = 0 To Me.Lbx_Feuilles.ListCount - 1
' Si la ligne ligne est sélectionnée
If Me.Lbx_Feuilles.Selected(Ind) = True Then
' L'ajouter au tableau des feuilles à exporter
ReDim Preserve ShtArray(CountArr)
ShtArray(CountArr) = Me.Lbx_Feuilles.List(Ind)
CountArr = CountArr + 1
End If
Next Ind
' Générer les PDF dans le répertoire temporaire de l'utilisateur
Sheets(ShtArray).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=sPath & sFileName, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True
' Effacer les variables objet
Set Sht = Nothing
' Afficher l'usf
Me.Show
End SubJe fais une nouvelle fois appel à tes connaissance et ton dévouement pour m'aider si tu le veux bien.
Cordialement
Salut tlam,
C'est plus simple que ça
Private Sub Cbn_Export_Click()
Dim sPath As String, sFileName As String
Dim Ind As Integer
Dim Sht As Worksheet
' Désactiver le rafraichissement écran
Application.ScreenUpdating = False
Me.Hide ' Masquer l'USF
' Définir le chemin d'enregistrement
sPath = Environ("TEMP") & "\"
' Pour chaque feuilles de la ListBox
For Ind = 0 To Me.Lbx_Feuilles.ListCount - 1
' Si la ligne ligne est sélectionnée
If Me.Lbx_Feuilles.Selected(Ind) = True Then
' Définir la feuille à imprimer
Set Sht = Sheets(Me.Lbx_Feuilles.List(Ind))
' Définit le nom du fichier
sFileName = Sht.Name & ".pdf"
' Export la feuille au format PDF
Sht.ExportAsFixedFormat Type:=xlTypePDF, Filename:=sPath & sFileName, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
End If
' Effacer les variables objet
Set Sht = Nothing
Next Ind
' Afficher l'usf
Me.Show
End Sub@+
Salut BrunoM45,
Merci pour ton retour. je viens de le mettre en application, il y a bien une action qui se passe lorsque j'exporte les fichiers souhaités cependant je n'ai pas d'instance pour l'enregistrement et je ne trouve pas trace des pdf sur le ddr?
J'ai trouvé, il suffisait de passer "OpenAfterPublish:=False" en "True".
Un énorme merci pour ton aide BrunoM45
@ bientôt