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