Sélection d'onglet par userform et checkbox : impression pdf

bonsoir à tous,

je fais de nouveau appel à vous pour sélectionner des onglets via des checkbox insérés sur un userform.

Je souhaiterai pouvoir sélectionner mes onglets et ensuite soit :

les imprimer en une seul fichier pdf via la commandbutton1;

les enregistrer en un seul fichier xls (avec le choix du chemin réseau).

Je sais que la question sélection et impression pdf a déjà été traitée mais je n'arrive pas à la mettre en oeuvre à mon cas.

Je vous joins mon fichier.

Merci à ceux qui pourront m'aider

Bonjour

Pour ce qui est de la sélection des feuilles je te propose le code ci-dessous :

Dim NomFeuille As Worksheet 'Déclaration de la variable, commune à tous les checkbox

Private Sub CheckBox1_Click()

On Error Resume Next 'Si une erreur se produit sur une ligne, passage à la ligne suivante

Set NomFeuille = ThisWorkbook.Worksheets(Me.CheckBox1.Caption) 'La variable NomFeuille représente la feuille dans ce classeur portant le nom contenue dans le checkbox
'S'il y a un code err = 9 un message indique à l'utilisateur que le nom est erroné
If Err = 9 Then MsgBox "Impossible de sélectionner cette feuille, feuille introuvable dans ce fichier. Pensez à vérifier le nom.", vbCritical, "Erreur": Exit Sub
'S'il y a une autre erreur un message apprait à l'utilisateur en lui indiquant le code erreur
If Err <> 0 Then MsgBox "Une erreur innatendue est survenue, impossible de poursuivre." & Chr(10) & Chr(10) & "Code erreur : " & Err, vbCritical, "Erreur": Exit Sub

If Me.CheckBox1 = True Then 'Si le checkbox = true alors :
    If NomFeuille.Visible = xlSheetHidden Then NomFeuille.Visible = xlSheetVisible 'Si la feuille est masquée alors elle est affichée
    NomFeuille.Select 'La feuille est sélectionnée
Else 'Sinon :
    If NomFeuille.Visible = xlSheetVisible Then NomFeuille.Visible = xlSheetHidden 'Si la feuille est visible alors elle est masquée
End If 'Fin du SI changement d'état du checkbox

End Sub
'Idem pour les autres checkbox

Voilà ce que je te propose pour le fonctionnement général de ton UserForm :

Dim NomFeuille As Worksheet 'Déclaration de la variable, commune à tous les checkbox
Dim ByPassErr As Boolean

Private Sub CheckBox1_Click()

If ByPassErr = True Then Exit Sub

On Error GoTo TypeErr

Set NomFeuille = ThisWorkbook.Worksheets(Me.CheckBox1.Caption) 'La variable NomFeuille représente la feuille dans ce classeur portant le nom contenue dans le checkbox

If Me.CheckBox1 = True Then 'Si le checkbox = true alors :
    If NomFeuille.Visible = xlSheetHidden Then NomFeuille.Visible = xlSheetVisible 'Si la feuille est masquée alors elle est affichée
    NomFeuille.Select 'La feuille est sélectionnée
Else 'Sinon :
    If NomFeuille.Visible = xlSheetVisible Then NomFeuille.Visible = xlSheetHidden 'Si la feuille est visible alors elle est masquée
End If 'Fin du SI changement d'état du checkbox

Exit Sub
TypeErr:
ByPassErr = True
'S'il y a un code err = 9 un message indique à l'utilisateur que le nom est erroné
If Err = 9 Then
    MsgBox "Impossible de sélectionner cette feuille, feuille introuvable dans ce fichier. Pensez à vérifier le nom.", vbCritical, "Erreur"
    Me.CheckBox1 = False
Else
    MsgBox "Une erreur innatendue est survenue, impossible de poursuivre." & Chr(10) & Chr(10) & "Code erreur : " & Err, vbCritical, "Erreur"
    Me.CheckBox1 = False
End If

End Sub

Private Sub CommandButton1_Click() 'Export en PDF

For I = 1 To 8
    If Me.Controls("CheckBox" & I) = True Then
        Set NomFeuille = ThisWorkbook.Worksheets(Me.Controls("CheckBox" & I).Caption)
        NomFeuille.ExportAsFixedFormat Type:=xlTypePDF, Filename:=ThisWorkbook.Path & "\" & NomFeuille.Name & ".pdf", Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, From:=1, To:=1, OpenAfterPublish:=True
    End If
Next I

End Sub

Private Sub CommandButton2_Click() 'Export en Excel

Dim NewWB As Workbook

For I = 1 To 8
    If Me.Controls("CheckBox" & I) = True Then
        Set NewWB = Workbooks.Add
        Set NomFeuille = ThisWorkbook.Worksheets(Me.Controls("CheckBox" & I).Caption)
        NomFeuille.Copy Before:=NewWB.Worksheets(1)
        NewWB.SaveAs Filename:=ThisWorkbook.Path & "\" & NomFeuille.Name & ".xlsx", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
    End If
Next I

End Sub

Private Sub CommandButton3_Click()
Unload Me
End Sub

Bonjour GGautier,

Merci beaucoup pour ton aide.

Je viens de placer ton code entier dans mon fichier.

J'arrive à sélectionner les feuilles, c'est impeccable et ça fonctionne à merveille pour imprimer en pdf.

Je m'aperçois que je me suis mal exprimé dans mon message initial. En effet, les feuilles sont déjà visibles avant le lancement de l'userform. Elles sont visibles ou non en fonction des informations mentionnées dans l'onglet DONNEES. Pour autant même visible, je peux avoir besoin de prendre uniquement les feuilles 4 et 5 par exemple pour faire un pdf. (Du coup je me dis que j'aurai peut être du faire une liste déroulante avec les onglets déjà visibles, ce qui peut être été plus pertinent).

Dans la macro que tu as rédigé, j'ai donc modifié le code comme cela pour que la feuille reste visible si elle est visible mais qu'elle ne s'affiche pas si elle est masquée

Set NomFeuille = ThisWorkbook.Worksheets(Me.CheckBox1.Caption) 'La variable NomFeuille représente la feuille dans ce classeur portant le nom contenue dans le checkbox
If Me.CheckBox1 = True Then 'Si le checkbox = true alors :
    If NomFeuille.Visible = xlSheetHidden Then NomFeuille.Visible = xlSheetHidden'Si la feuille est masquée alors elle reste masquée 
    NomFeuille.Select 'La feuille est sélectionnée
Else 'Sinon :
    If NomFeuille.Visible = xlSheetVisible Then NomFeuille.Visible = xlSheetVisible 'Si la feuille est visible alors elle reste visible 
End If 'Fin du SI changement d'état du checkbox

Pour l'impression je cherche à faire un fichier unique avec les onglets mais je voudrais exclure les onglets "MODE D'EMPLOI" et "DONNEES". Est ce que la fonction NoPrint peut s'employer dans ce cas ?

Pour l'enregistrement du fichier en excel, je voudrais enregistrer mais sans exporter les macros. je suis entrain de lire des éléments de ce coté là pour essayer d'adapter ce que tu m'as gentiment donné.

merci à toi !

D'après ce que tu dis tu peux même faire ça :

Set NomFeuille = ThisWorkbook.Worksheets(Me.CheckBox1.Caption) 'La variable NomFeuille représente la feuille dans ce classeur 
NomFeuille.Select 'La feuille est sélectionnée

Bonsoir le forum,

Bonsoir GGautier,

dans la macro d'export pdf, malgré mes recherches je n'arrive pas à faire un seul fichier pdf avec les onglets sélectionnés dans les checkbox activés.

et pour la macro d'export excel, je n'arrive pas modifier le code pour que les onglets soient groupés, puis collés dans un seul fichier (je voudrais en plus que cela fasse un collage des valeurs). J'ai des messages d'informations d'Excel à l'enregistrement qui me demande si je veux enregistrer avec ou sans macro, je pensais mettre le code suivant pour les contourner

Application.DisplayAlerts = True

Dans les deux cas, j'ai fait remonter la valeur d'une cellule pour donner le nom dans la textbox1 et je pensais modifier la macro comme suit mais ça ne fonctionne pas :

Private Sub CommandButton1_Click() 'Export en PDF

For I = 1 To 8
    If Me.Controls("CheckBox" & I) = True Then
        Set NomFeuille = Me.TextBox1
        NomFeuille.ExportAsFixedFormat Type:=xlTypePDF, Filename:=ThisWorkbook.Path & "\" & NomFeuille.Name & ".pdf", Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, From:=1, To:=1, OpenAfterPublish:=True
    End If
Next I

End Sub

un grand merci pour votre aide et bonne soirée

Bonjour à tous,

j'ai finalement trouvé une solution avec le code suivant pour imprimer en un seul fichier pdf (tout en ne tenant pas compte des deux feuilles "DONNEES" et "MODE EMPLOI".

Private Sub CommandButton1_Click() 'Export en PDF

Sheets("MODE EMPLOI").Visible = False
Sheets("DONNEES").Visible = False

    ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Sheets("DONNEES").Range("X1") & ".pdf", Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True

Sheets("MODE EMPLOI").Visible = True
Sheets("DONNEES").Visible = True
Sheets("CPP TITULAIRE-ST").Select

End Sub

Je me penche à présent sur la partie du code permettant d'exporter les feuilles visibles sélectionnées (sauf "DONNEES" et "MODE EMPLOI") vers un nouveau classeur excel en ne copiant que les valeurs.

Pour la partie export excel, j'ai adapté différents codes trouvés sur le site

Private Sub CommandButton2_Click() 'Export en Excel

Application.DisplayAlerts = False

Dim NewWB As Workbook
Dim nom As String
nom = Worksheets("CPP TITULAIRE-ST").Range("Q1")

Set NewWB = Workbooks.Add

For i = 1 To 8
If Me.Controls("CheckBox" & i) = True Then

        Set nomfeuille = ThisWorkbook.Worksheets(Me.Controls("CheckBox" & i).Caption)
        nomfeuille.Copy Before:=NewWB.Worksheets(1)

        NewWB.SaveAs Filename:=ThisWorkbook.Path & "\" & nom, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False

    End If

Next i

NewWB.Close

Sheets("CPP TITULAIRE-ST").Select

End Sub

En revanche je n'arrive pas à trouver la façon de faire une copie sans tenir compte des macros et à ne faire que la copie des valeurs.

Rechercher des sujets similaires à "selection onglet userform checkbox impression pdf"