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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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
Partager