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 checkboxVoilà 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 SubBonjour 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 checkboxPour 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éeBonsoir 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 = TrueDans 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 Subun 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 SubJe 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 SubEn 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.