Userform pour afficher des feuilles et générer des PDF

Bonjour à tous,

j'ai tenté une première macro avec un bouton pour afficher un userform. Je dois dire que déjà là j'ai visiblement un souci....

Ensuite dans mon userform, j'ai créé deux boutons. Un avec lequel je souhaite générer tout le classeur en PDF, un second qui va reprendre qu'une feuille.

De plus, je voulais tenter l'option qui permet de sélectionner une ou plusieurs feuilles et de générer un PDF.

Le but serait que le PDF soit enregistrer dans C:\PDF

Je dois dire que je ne suis très fort dans ce domaine et que je galère...

Bonjour vinzu01

Avez-vous regardé dans les "Téléchargements"

Vous avez ceci qui contient ce que vous souhaitez
https://www.excel-pratique.com/fr/telechargements/utilitaires/pdf-email-vba-excel-no508

A+

Ah non en effet je n'avais pas vu

Désolé... je vais voir ça, l'adapter à mon document et je vous redis. Merci beaucoup déjà !

Au final, j'ai repris qu'une seule fonction qui me sera utile. Je rencontre néanmoins un souci avec une macro en cours. En effet, je vais utiliser des tableaux croisés dynamiques et j'ai fait une macro pour les mises à jour automatique.

A chaque fois il me sort une erreur.... une idée ?

Je vois aussi en fait que sur le fichier original de la zone de téléchargement cela provoque des erreurs si on veut sélectionner les feuilles pour le PDF

23vinzu-test.xlsm (56.66 Ko)

Bonjour

Ci joint ma solution

A+ François

Bonjour François (fanfan38)

dans ton code

Function crePDF(nomfeuil)
  Dim wb As Workbook, pdfFile As String
  Set wb = ActiveWorkbook
  pdfFile = wb.Path & "\" & nomfeuil & ".pdf" '"X:\"
  wb.ExportAsFixedFormat Type:=xlTypePDF, Filename:=pdfFile, Quality:=xlQualityStandard, _
  IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True
End Function

ne faut t'il pas sélectionner la feuille

Dim ws As Worksheet
Set ws= wb.Sheets(nomfeuil)
ws.Activate

Avant d'exporter le classeur avec wb.ExportAsFixedFormat

Je me suis permis sans tester!!

Bonjour

Non c'est une fonction avec le nom de la feuille en variable...

A+ François

Merci beaucoup François ! c'est parfait !

Et si j'ai bien compris, si j'ajoute ou enlève un onglet, j'adapte simplement sur le userform le nombre de case à cocher ?

J'ai doublé le nombre de case à cocher (elles sont masquées et si necessaire seront visible)

A+ François

Ok merci beaucoup déjà !

Si je souhaite une fois ajouter plus de feuilles je peux modifier une variable ?

Est-ce que je peux aussi ajouter la Feuil1 dans le choix des cases ?

Et j'ai un petit bug en sélectionnant dans le menu déroulant ou alors en sélectionnant PDF Stats uniquement, il me sort tous les onglets

Tu n'as rien à modifier si tu as moins de 9 feuilles....

Oui, c'est toi qui avait mis une condition....

J'ai repris ta macro sans la controler.... => c'est corrigé

A+ François

Merci !

Si veux ajouter plus de feuilles c'est ici que je modifie ?

Private Sub CommandButton3_Click()
  Dim i As Byte
  For i = 1 To 8
    If Me.Controls("CheckBox" & i) = True Then crePDF (Me.Controls("CheckBox" & i).Caption)
  Next
End Sub

Par exemple en mettant ? :

Private Sub CommandButton3_Click()
  Dim i As Byte
  For i = 1 To 18
    If Me.Controls("CheckBox" & i) = True Then crePDF (Me.Controls("CheckBox" & i).Caption)
  Next
End Sub

Et dernière question, dans la liste déroulante, est-ce que je peux ajouter la toute première feuille ?

re

bonsoir
il faudra m'expliquer comment seule la feuille stats va etre exportée là

Private Sub CommandButton2_Click() 'generer PDF STAT
  For Each f In Worksheets
    If Left(f.Name, 5) = "Stats" Then crePDF (f.Name)
  Next f
End Sub
Function crePDF(nomfeuil)
  Dim wb As Workbook, pdfFile As String
  Set wb = ActiveWorkbook
  pdfFile = wb.Path & "\" & nomfeuil & ".pdf" '"X:\"
  wb.ExportAsFixedFormat Type:=xlTypePDF, Filename:=pdfFile, Quality:=xlQualityStandard, _
  IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True
End Function

perso je suis d'avis que la feuille sert pour le nom du fichier pdf mais dans tout les cas c'est bien tout le classeur qui est exporté
je dis ça je di rien , c'est juste en passant wb c'est un classeur pas une feuille

perso j'aurais fait comme ça

Private Sub CommandButton1_Click() 'generer PDF toutes les feuilles
   Dim F As Worksheet
 For Each F In Worksheets
    If F.Name <> Feuil1.Name Then 'And f.Name <> Feuil2.Name Then
      crePDF (F)
    End If
  Next F
End Sub

Private Sub CommandButton2_Click() 'generer PDF STAT
  Dim F As Worksheet
  For Each F In Worksheets
    If Left(F.Name, 5) = "Stats" Then crePDF F
  Next F
End Sub
Function crePDF(Optional Obj As Variant = Nothing)
    Dim pdfFile As String
    If Obj Is Nothing Then Set Obj = ThisWorkbook
    pdfFile = ThisWorkbook.Path & "\" & Obj.Name & ".pdf"    '"X:\"
    Obj.ExportAsFixedFormat Type:=xlTypePDF, Filename:=pdfFile, Quality:=xlQualityStandard, _
                            IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True
End Function

on a donc 4 possibilités de mode d'impression

  1. imprimer les feuilles correspondantes aux Checkbox(dans des pdf séparés)
  2. Imprimer toutes les feuilles(dans des pdf séparés)
  3. Imprimer la feuille stats
  4. Imprimer toutes les feuille (dans un même pdf le classeur entier )

donc soit on appelle
crePdf(object feuille)'l'argument est un object feuille
soit crePdf 'tout court pour tout dans un seul pdf

et pour finir
je l'ai laissé mais!!:
il faudra m'expliquer pourquoi tester le left(f.name5) alors que stats c'est le nom entier
il faudra m'expliquer aussi pourquoi ne pas avoir incrémenté le nom du fichier
avec une date par exemple(où autre) a fin que le precédent enregistrement ne soit pas écrasé

voila c'etait juste en passant

Bonsoir,

j'ai apporté les corrections selon vos précieux conseils mais je crois que j'ai quand même dû faire quelque chose de faux ... je suis en nuit blanche de test

Je ne trouve pas vraiment où je suis faux dans le code là.

il faudra m'expliquer pourquoi tester le left(f.name5) alors que stats c'est le nom entier

il faudra m'expliquer aussi pourquoi ne pas avoir incrémenté le nom du fichier

avec une date par exemple(où autre) a fin que le precédent enregistrement ne soit pas écrasé

En effet, je n'aurais pas besoin de tester le left(f.name5). J'ai du me planter là.

Pour le nom avec la date c'est une très bonne idée en effet.

A vraie dire je ne m'en sors plus du tout

Bonjour

Ci joint fichier corrigé

le left(f.name5) c'est pour la feuille stats_date...

On utilise sheets et non worksheets car worksheets ne prend pas les graphiques...

le nom du fichier n'est pas incrementé car ce n'était pas demandé...

A+ François

Ok merci beaucoup! Je vais regarder ça ce soir car là je crois je vais dormir un peu c’est mieux

Bonjour #fanfan38

le left(f.name5) c'est pour la feuille stats_date

et alors c'est pour la feuille stats

if f.name="stats" then 'c'est tout

d'autre part

je vois a gauche des checkboxs qui sont sensés représenter les feuilles

dites moi pourquoi vous n'avez pas fait ça pour toute les feuilles TOUT SIMPLEMENT

on coche ce que l'on a besoins et on clique sur un seul bouton pour exporter

et j'irais même plus loin

vos checkbox qui sont sensés être visibles ou invisibles selon le nombre de feuille c'est pas tellement bien pensé

dans le sens ou demain j'ai plus de feuilles(donc des nouvelles ;donc un plus grand nombre de feuilles) ben on est chocolat

alors que ; une simple listbox avec le mode case a cocher et c'est terminé

une listbox et un bouton voir 2 pour la totale et C'EST TERMINE

faite des chose simplesc'est plus pérrenne

et le must c'est que vous y êtes presque avec le combobox

Bonjour patrickT,

Je viens de prendre connaissance avec grand intérêt vos remarques… vous auriez éventuellement une version avec vos propositions ?

Bonjour Patrick

je n'ai fait que répondre au 1er post...

Il y a des checkbox et un combobox que j'ai respecté

A+ François

re

oui par exemple un truc vite fait comme ceci

tu a une liste à cocher qui s'allimente toute seule

tu a un bouton pour imprimer selon ton choix dans la liste

tu un checkbox pour tout chopper ou tout désectionner

et en fin un checkbox pour soit imprimer pdf par pdf ou tout ce que tu a selectionner dans un seul pdf

j' en ai profiter pour faire la mise en page en effet tes tableau etaient couper dans la largeur

l'impression etait en portrait au lieu de paysage +adaptation a 1 page en largeur etc.. etc...

demo

alors forcement le code change un peu

dans le userform

Private Sub BtExport_Click()
    Dim I&, mesfeuilles, T(), A&
    If CheckOnePdF Then
        For I = 0 To ListBox1.ListCount - 1
            If ListBox1.Selected(I) Then A = A + 1: ReDim Preserve T(1 To A): T(A) = ListBox1.List(I)
        Next
          crePDF T
    Else
        For I = 0 To ListBox1.ListCount - 1
            If ListBox1.Selected(I) Then crePDF Sheets(ListBox1.List(I))
        Next
    End If
End Sub

Private Sub CheckAllsheets_Click()
    Dim I&
    With ListBox1
        For I = 0 To .ListCount - 1
            If CheckAllsheets.Value Then .Selected(I) = True Else .Selected(I) = False
        Next
    End With
End Sub

Private Sub UserForm_Activate()
    Dim Sh As Sheet
    Btprint.Caption = "Imprimer selon le choix" & vbCrLf & "dans la liste"
    For Each Sh In Sheets: ListBox1.AddItem Sh.Name: Next
End Sub

et ta sub crepdf elle se retrouve comme ceci

Function crePDF(Optional Obj As Variant = Nothing)
    Dim pdfFile As String,objet
    If IsArray(Obj) Then Sheets(Obj).Select: Set objet = ActiveSheet: nom = ThisWorkbook.Name Else nom = Obj.Name: Set objet = Obj
    pdfFile = ThisWorkbook.Path & "\" & nom & Format(Now, "_dd-mm-yyyy_hh_mm_ss") & ".pdf"    '"X:\"
    objet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=pdfFile, Quality:=xlQualityStandard, _
                            IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
End Function

bon j'ai fait ca vite fait hein c'est perfectible

d'ailleurs pour tout te dire on peut exporter juste la plage au lieu d'une feuille complete

mais bon on va pas chippoter là hein

Rechercher des sujets similaires à "userform afficher feuilles generer pdf"