Créer fichier pdf d'après sélection case à cocher

lacocotte2002

XLDnaute Nouveau
Bonjour à tous,

Je sèche sur ma macro excel.

Sur une feuille excel, j'ai disposé des cases à cocher afin de créer un fichier pdf avec uniquement les feuilles du classeur dont les cases à cocher sont cochées.

Je m'explique : une fois qu'une case à cocher est cochée, cela renvoi dans une cellule de la feuille, le nom de la feuille à créer en pdf.

Mon code est le suivant :

Sub pdf()

Range("O26").FormulaR1C1 = "=NOW()"
jour = Range("P26").Value
mois = Range("Q26").Value
annee = Range("R26").Value
heure = Range("S26").Value
minut = Range("T26").Value
seconde = Range("U26").Value

a = Range("N31").Value
b = Range("N32").Value
c = Range("N33").Value
d = Range("N34").Value

Sheets(Array(a, b, c, d)).Copy --> LE PROBLEME EST ICI LORSQU'UNE DES VALEURS EST VIDE !

ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"D:\" & annee & " " & mois & " " & jour & " - " & heure & " " & minut & " " & seconde & ".pdf", Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
True
ActiveWindow.Close savechanges:=False

End Sub


Merci à tous pour votre aide...
 

youky(BJ)

XLDnaute Barbatruc
Re : Créer fichier pdf d'après sélection case à cocher

Bonjour Lacocotte,
Peut être en gérant l'erreur
Ajoute dans ton code les lignes en rouge cela donne un message et on quitte

On error resume next
Sheets(Array(a, b, c, d)).Copy
if err>0 then err.clear:msgbox"Vous n'avez pas tout indiqué":exit sub
et la suite

Bruno
 

lacocotte2002

XLDnaute Nouveau
Re : Créer fichier pdf d'après sélection case à cocher

Merci pour la réponse, mais l'utilisateur n'est pas obligé de tout cocher.

Voici un exemple du fichier.
La macro fonctionne dès que tout est coché mais elle ne fonctionne plus lorsqu'une case n'est plus cochée.

Et là je bug complètement...
 

Pièces jointes

  • Fichier test.xlsm
    51.5 KB · Affichages: 70
  • Fichier test.xlsm
    51.5 KB · Affichages: 73
  • Fichier test.xlsm
    51.5 KB · Affichages: 75

kiki29

XLDnaute Barbatruc
Re : Créer fichier pdf d'après sélection case à cocher

Salut, voir au bas du post #1 "Impression de certaines Feuilles d'un classeur via un tableau dans un seul Pdf résultant" à adapter à ton contexte
La réponse est dans la création d'une boucle sur tes checkboxes.

Cela sent la bidouille, enfin bref ici cela "fonctionne"

Le CodeName de "Documents à imprimer" est ShParametres

Les Checkboxes sont devenues C01, C02 etc pour pouvoir les associer aux feuilles à imprimer, cela donne de la marge de 01 à 99 pour les feuilles
Le code dans Feuil63 ( CodeName de "Documents à imprimer" ) est à supprimer car ne servant strictement à rien.

Code:
Option Explicit 

Sub Impression()
Dim Ws As Worksheet
Dim oOle As OLEObject
Dim Ar() As String
Dim Cpt As Long
Dim sStr As String

    Application.ScreenUpdating = False
    Set Ws = ShParametres
    Cpt = 0
    For Each oOle In Ws.OLEObjects
        If TypeOf oOle.Object Is MSForms.CheckBox Then
            If Ws.OLEObjects(oOle.Name).Object.Value = True Then
                ReDim Preserve Ar(Cpt)
                sStr = Right$(oOle.Name, 2)
                Ar(Cpt) = Sheets(sStr).Name
                Cpt = Cpt + 1
            End If
        End If
    Next oOle

    If Cpt = 0 Then Exit Sub
    Sheets(Ar).Select

    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
                                    Filename:=ThisWorkbook.Path & "\" & Format(Now, "yyyymmdd hhmmss") & ".pdf", _
                                    Quality:=xlQualityStandard, _
                                    IncludeDocProperties:=True, _
                                    IgnorePrintAreas:=False, _
                                    OpenAfterPublish:=False
    Application.ScreenUpdating = True
    Ws.Select
    Set Ws = Nothing
End Sub
 
Dernière édition:

youky(BJ)

XLDnaute Barbatruc
Re : Créer fichier pdf d'après sélection case à cocher

Bonjour le fil,
Après quelques galères voila mon truc.
Bruno

Code:
Sub impression()
Dim select_feuilles As String
Dim tablo() As String
Dim obj As OLEObject
Dim sh As Worksheet
Dim k As Integer
Dim i As Integer
Range("O26").ClearContents
Range("O26").FormulaR1C1 = "=NOW()"
jour = Range("P26").Value
mois = Range("Q26").Value
annee = Range("R26").Value
heure = Range("S26").Value
minut = Range("T26").Value
seconde = Range("U26").Value
select_feuilles = Range("Q27").Value
Set sh = Feuil63
 i = 0
    For Each obj In sh.OLEObjects
         If TypeOf obj.Object Is MSForms.CheckBox Then
             If sh.OLEObjects(obj.Name).Object.Value = True Then
            ReDim Preserve tablo(i)
            tablo(i) = "0" & Replace(obj.Name, "c", "")
            i = i + 1
            End If
                End If
    Next
 If i > 0 Then
        Sheets(tablo).Copy
          ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        "D:\pdf des impressions\" & annee & " " & mois & " " & jour & " - " & heure & " " & minut & " " & seconde & ".pdf", Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
        True
    ActiveWindow.Close savechanges:=False
 End If
 

lacocotte2002

XLDnaute Nouveau
Re : Créer fichier pdf d'après sélection case à cocher

Merci beaucoup pour votre aide, ça marche !!!

Voici le code final que j'ai utilisé.

Par contre le code est maison...

Et le voici :

Code:
Sub impression()
Dim sNomFichierPDF As String
Dim i As Long, Cpt As Long
Dim Ar() As String

Range("O26").ClearContents
Range("O26").FormulaR1C1 = "=NOW()"
jour = Range("P26").Value
mois = Range("Q26").Value
annee = Range("R26").Value
heure = Range("S26").Value
minut = Range("T26").Value
seconde = Range("U26").Value
O28 = Range("O28").Value
O29 = Range("O29").Value
O30 = Range("O30").Value
O31 = Range("O31").Value
O32 = Range("O32").Value
O33 = Range("O33").Value
O34 = Range("O34").Value
O35 = Range("O35").Value
O36 = Range("O36").Value
O37 = Range("O37").Value
O38 = Range("O38").Value
O39 = Range("O39").Value
O40 = Range("O40").Value
O41 = Range("O41").Value
O42 = Range("O42").Value
O43 = Range("O43").Value
O44 = Range("O44").Value
O45 = Range("O45").Value
O46 = Range("O46").Value
O47 = Range("O47").Value
O48 = Range("O48").Value
O49 = Range("O49").Value
O50 = Range("O50").Value
O51 = Range("O51").Value
O52 = Range("O52").Value
O53 = Range("O53").Value
O54 = Range("O54").Value
O55 = Range("O55").Value
O56 = Range("O56").Value
O57 = Range("O57").Value
O58 = Range("O58").Value
O59 = Range("O59").Value
O60 = Range("O60").Value
O61 = Range("O61").Value
O62 = Range("O62").Value
O63 = Range("O63").Value
O64 = Range("O64").Value
O65 = Range("O65").Value
O66 = Range("O66").Value
O67 = Range("O67").Value
O68 = Range("O68").Value
O69 = Range("O69").Value
O70 = Range("O70").Value
O71 = Range("O71").Value
O72 = Range("O72").Value
O73 = Range("O73").Value
O74 = Range("O74").Value
O75 = Range("O75").Value
O76 = Range("O76").Value
O77 = Range("O77").Value
O78 = Range("O78").Value
O79 = Range("O79").Value
O80 = Range("O80").Value
O81 = Range("O81").Value
O82 = Range("O82").Value
O83 = Range("O83").Value
O84 = Range("O84").Value
O85 = Range("O85").Value
O86 = Range("O86").Value

    sNomFichierPDF = "D:\Impressions PDF\" & annee & " " & mois & " " & jour & " - " & heure & " " & minut & " " & seconde & ".pdf"
 
    Cpt = 0
    For i = 1 To ThisWorkbook.Sheets.Count
        If Sheets(i).Name = O28 Or Sheets(i).Name = O29 Or Sheets(i).Name = O30 Or Sheets(i).Name = O31 Or Sheets(i).Name = O32 Or Sheets(i).Name = O33 Or Sheets(i).Name = O34 Or Sheets(i).Name = O35 Or Sheets(i).Name = O36 Or Sheets(i).Name = O37 Or Sheets(i).Name = O38 Or Sheets(i).Name = O39 Or Sheets(i).Name = O40 _
        Or Sheets(i).Name = O41 Or Sheets(i).Name = O42 Or Sheets(i).Name = O43 Or Sheets(i).Name = O44 Or Sheets(i).Name = O45 Or Sheets(i).Name = O46 Or Sheets(i).Name = O47 Or Sheets(i).Name = O48 Or Sheets(i).Name = O49 Or Sheets(i).Name = O50 _
        Or Sheets(i).Name = O51 Or Sheets(i).Name = O52 Or Sheets(i).Name = O53 Or Sheets(i).Name = O54 Or Sheets(i).Name = O55 Or Sheets(i).Name = O56 Or Sheets(i).Name = O57 Or Sheets(i).Name = O58 Or Sheets(i).Name = O59 Or Sheets(i).Name = O60 _
        Or Sheets(i).Name = O61 Or Sheets(i).Name = O62 Or Sheets(i).Name = O63 Or Sheets(i).Name = O64 Or Sheets(i).Name = O65 Or Sheets(i).Name = O66 Or Sheets(i).Name = O67 Or Sheets(i).Name = O68 Or Sheets(i).Name = O69 Or Sheets(i).Name = O70 _
        Or Sheets(i).Name = O71 Or Sheets(i).Name = O72 Or Sheets(i).Name = O73 Or Sheets(i).Name = O74 Or Sheets(i).Name = O75 Or Sheets(i).Name = O76 Or Sheets(i).Name = O77 Or Sheets(i).Name = O78 Or Sheets(i).Name = O79 Or Sheets(i).Name = O80 _
        Or Sheets(i).Name = O81 Or Sheets(i).Name = O82 Or Sheets(i).Name = O83 Or Sheets(i).Name = O84 Or Sheets(i).Name = O85 Or Sheets(i).Name = O86 Then
            ReDim Preserve Ar(Cpt)
            Ar(Cpt) = Sheets(i).Name
            Cpt = Cpt + 1
        End If
    Next i
    If Cpt = 0 Then Exit Sub
 
    Application.ScreenUpdating = False
    Sheets(Ar).Copy
     
    
    ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:=sNomFichierPDF, Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True
    
    ActiveWindow.Close savechanges:=False

End Sub
 

lacocotte2002

XLDnaute Nouveau
Re : Créer fichier pdf d'après sélection case à cocher

Merci pour ce code.

Cependant, le fichier réel est plus complexe.
En effet, sur le fichier réel, je ne peut pas me servir des noms des checkboxs car le nom des feuilles n'est pas toujours du même nombre de caractères et peut comporter des caractères qui ne peuvent être donnés en nom de checkboxs.

Par exemple, les noms des feuilles sont :
SOMMAIRE
FICHE DE SUIVI
01
02
02-1
02-2
03
.... etc

Si tu as une idée je suis preneur...
 

kiki29

XLDnaute Barbatruc
Re : Créer fichier pdf d'après sélection case à cocher

Salut, à tester
Code:
Option Explicit

Sub Impression()
Dim Ws As Worksheet
Dim oOle As OLEObject
Dim Ar() As String
Dim Cpt As Long
Dim i As Long

    Application.ScreenUpdating = False
    Set Ws = ShParametres
    Cpt = 0
    i = 0
    For Each oOle In Ws.OLEObjects
        If TypeOf oOle.Object Is MSForms.CheckBox Then
            i = i + 1
            If Ws.OLEObjects(oOle.Name).Object.Value = True Then
                ReDim Preserve Ar(Cpt)
                Ar(Cpt) = Sheets(i + 1).Name
                Cpt = Cpt + 1
            End If
        End If
    Next oOle

    If Cpt = 0 Then Exit Sub
    Sheets(Ar).Select

    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
                                    Filename:=ThisWorkbook.Path & "\" & Format(Now, "yyyymmdd hhmmss") & ".pdf", _
                                    Quality:=xlQualityStandard, _
                                    IncludeDocProperties:=True, _
                                    IgnorePrintAreas:=False, _
                                    OpenAfterPublish:=True
    Ws.Select
    Set Ws = Nothing

    Application.ScreenUpdating = True
End Sub
 

Pièces jointes

  • Fichier test 2.zip
    66.6 KB · Affichages: 55
  • Fichier test 2.zip
    66.6 KB · Affichages: 61
  • Fichier test 2.zip
    66.6 KB · Affichages: 60
Dernière édition:

lacocotte2002

XLDnaute Nouveau
Re : Créer fichier pdf d'après sélection case à cocher

Merci de la réponse, mais le problème est que les feuilles n'ont pas été créées dans l'ordre (et il peut y en avoir de nouvelles à créer).

Pour exemple, les feuilles peuvent se présenter comme ceci :
Feuil1(SOMMAIRE)
Feuil4(FICHE DE SUIVI)
Feuil5(01)
Feuil2(02)
feuil6(02-1)
feuil7(02-2)
Feuil3(03)

C'est pour cela que j'avais renseigné des valeurs en colonne N (N31, N32, ...).

Je ne sais pas si c'est clair...
 

kiki29

XLDnaute Barbatruc
Re : Créer fichier pdf d'après sélection case à cocher

Salut, le fichier "Fichier test 2.xlsb" fonctionne correctement, et imprime les feuilles en fonction des CheckBoxes cochées, l'ordre est celui des noms d'onglet dans le classeur, donc à toi de poursuivre si en plus de cela il faut prendre en compte l'ordre dans lequel les CheckBoxes ont été cochées. ²Via un Dictionary peut-être ?
 
Dernière édition: