VBA : Liste onglets Listbox et impression PDF
Bonjour à tous,
Je suis nouveau sur ce forum et novice en VBA. J'ai passé plusieurs heures à mettre au point un code me permettant de lister les onglets d'un fichier Excel dans un Listbox, puis, d'imprimer en PDF les onglets sélectionnés, cependant, il ne fonctionne toujours pas, n'arrivant vraiment pas à trouver de solution par moi même, je me tourne vers vous.
Je travaille sur Excel 2016 MSO, mon fichier comprend une bonne vingtaine d'onglets nommés respectivement "1", "2", "3" etc ... + éventuellement d'autres onglets qui seront ajoutés avec des noms "Fact" ou "Detail". C'est pourquoi j'ai besoin d'établir préalablement la liste des onglets. Enfin, seuls 2 ou 3 onglets doivent être transformés en PDF à chaque utilisation et ces derniers varient, d'où ma volonté d'utiliser une listbox pour les choisir.
Je me suis inspiré d'une multitude de "bouts" de code que j'ai trouvé sur ce forum et dans des tutos sur youtube.
J'ai déjà créer un Userform1 contenant une Listbox1 et un commandbutton1.
Le but est de :
1) Lister les onglets dans la listbox
2) Attribuer à la variable Save le texte correspondant aux noms des onglets sélectionnés sous la forme suivante : " "Onglet1","Onglet2", etc... " (dans mon cas ca sera " "1","2", etc ....")
3) Sélectionner les onglets (array(Save)) ==> C'est ici que ca coince !!!
4) Exporter en PDF
Ci-dessous le code de la Listbox1 :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| Option Explicit
Public Save As String
Public Rep As String
Private Sub ListBox1_Enter()
Dim i As Integer
For i = 1 To Sheets.Count
ListBox1.AddItem Sheets(i).Name
Next i
End Sub |
Ci-dessous le code du Commandbutton1:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| Private Sub CommandButton1_Click()
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) = True Then
Save = "" & Save & """" & ListBox1.List(i) & """ ,"
End If
Next i
Save = Left(Save, Len(Save) - 3)
Save = Right(Save, Len(Save) - 1)
If Save = "" Then
MsgBox "Veuillez choisir au moins un onglet"
Else
MsgBox Save
End If
Call Module2.Export_PDF
End Sub |
Ci-dessous le code du Module 2 pour Exporter en PDF :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| Sub Export_PDF()
Dim nomfichier As String
rep = "C:\Users\jbasin\Desktop\PDF Clients"
Sheets(array(Save)).Select ' Le problème est sur cette ligne, en débit du fait que la variable Save enregistre les noms d'onglets correctement
nomfichier = Left(ThisWorkbook.Name, Len(ThisWorkbook.Name) - 5) 'Le but est de retirer le .xlsm
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=rep & "\" & nomfichier _
, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, OpenAfterPublish:=False
Application.ScreenUpdating = True
Unload (UserForm1)
End Sub |
J’espère que la méthode que j'utilise est possible et qu'il ne s'agit que d'une petite erreur. Quoi qu'il en soit, je remercie par avance les personnes qui auront pris le temps de lire mon message.
Mido54