Microsoft 365 VBA : changer l'ordre des feuilles dans l'impression en pdf

MarieParis

XLDnaute Occasionnel
Bonjour,

Je souhaite changer l'ordre des feuilles et afficher la feuille "1 - Bordereau" en première position dans mon classeur Excel. Quand je fais cela, la Page_1 est imprimé en deuxième position, alors que dans mon code c'est : "Page_1", "1 - Bordereau":

Est-ce que vous connaissez une astuce pour garder l'ordre : "Page_1", "1 - Bordereau", "Page_5", "Page_6", "Page_7", "Page_8", "Page_9", "Page_10", "Page_11", "Page_12" lors de l'impression ?

Merci pour votre aide !

Mon code est :
VB:
Sub Fichier_pdf()
    Dim sRep As String
    Dim sFilename As String
    Dim LHeure As String
    Dim LaDate As String
    Dim Nom As String

   LHeure = Format(Time, "HMS")
   LaDate = Format(Date, "dd" & "." & "mm" & "." & "yyyy")
   Nom = "Création du bordereau le"
   With ActiveSheet.PageSetup
    .LeftFooter = ""
   .CenterFooter = ""
   .RightFooter = ""
    End With

    Sheets(Array("Page_1", "1 - Bordereau", "Page_5", "Page_6", "Page_7", "Page_8", "Page_9", "Page_10", "Page_11", "Page_12")).Select
    sRep = ThisWorkbook.Path
    sFilename = Nom & " " & LaDate & " " & LHeure & ".pdf"
    

    ActiveSheet.ExportAsFixedFormat _
            Type:=xlTypePDF, _
            Filename:=sRep & "\" & sFilename, _
            Quality:=xlQualityStandard, _
            IncludeDocProperties:=True, _
            IgnorePrintAreas:=False, _
            OpenAfterPublish:=True
    Sheets("1 - Bordereau").Select
' Message de confirmation
MsgBox "Création du fichier PDF a été effectuée", Title:="Mon document"

End Sub

Merci pour votre aide !
 

BrunoM45

XLDnaute Barbatruc
Re,

Il faut faire une petite routine de déplacement des feuilles 😉 que voici
VB:
Sub Fichier_pdf()
  Dim sRep As String
  Dim sFilename As String
  Dim LHeure As String
  Dim LaDate As String
  Dim Nom As String
  Dim Ind As Integer, NomAvant(10) As String, NomTrié() As String

  LHeure = Format(Time, "HMS")
  LaDate = Format(Date, "dd" & "." & "mm" & "." & "yyyy")
  Nom = "Création du bordereau le"
  With ActiveSheet.PageSetup
    .LeftFooter = ""
    .CenterFooter = ""
    .RightFooter = ""
  End With
  ' Tableau des feuilles du classeur
  For Ind = 1 To Sheets.Count
    NomAvant(Ind) = Sheets(Ind).Name
  Next Ind
  ' Ordre souhaité des feuilles pour l'impression
  NomTrié = Split("Page_1,1 - Bordereau,Page_5,Page_6,Page_7,Page_8,Page_9,Page_10,Page_11,Page_12", ",")
  ' Déplacer les feuilles dans le bon ordre
  On Error Resume Next
  For Ind = 0 To Sheets.Count - 1
    Sheets(NomTrié(Ind)).Move Before:=Sheets(Ind + 1)
  Next Ind
  On Error GoTo 0
  ' Sélectionner les feuilles triées
  Sheets(NomTrié).Select
  '
  sRep = ThisWorkbook.Path
  sFilename = Nom & " " & LaDate & " " & LHeure & ".pdf"
  ' Imprimer les feuilles sélectionnées
  ActiveSheet.ExportAsFixedFormat _
    Type:=xlTypePDF, _
    Filename:=sRep & "\" & sFilename, _
    Quality:=xlQualityStandard, _
    IncludeDocProperties:=True, _
    IgnorePrintAreas:=False, _
    OpenAfterPublish:=True
  ' Remettre les onglets dans l'ordre initial (si nécessaire)
  On Error Resume Next
  For Ind = 1 To Sheets.Count
    Sheets(NomAvant(Ind)).Move Before:=Sheets(Ind)
  Next Ind
  On Error GoTo 0
 
  Sheets("1 - Bordereau").Select
  ' Message de confirmation
  MsgBox "Création du fichier PDF a été effectuée", Title:="Mon document"
End Sub

@+
 

Pièces jointes

  • MarieParis_Impression Onglets Ordonnés.xlsm
    39.6 KB · Affichages: 4

MarieParis

XLDnaute Occasionnel
Re,

Il faut faire une petite routine de déplacement des feuilles 😉 que voici
VB:
Sub Fichier_pdf()
  Dim sRep As String
  Dim sFilename As String
  Dim LHeure As String
  Dim LaDate As String
  Dim Nom As String
  Dim Ind As Integer, NomAvant(10) As String, NomTrié() As String

  LHeure = Format(Time, "HMS")
  LaDate = Format(Date, "dd" & "." & "mm" & "." & "yyyy")
  Nom = "Création du bordereau le"
  With ActiveSheet.PageSetup
    .LeftFooter = ""
    .CenterFooter = ""
    .RightFooter = ""
  End With
  ' Tableau des feuilles du classeur
  For Ind = 1 To Sheets.Count
    NomAvant(Ind) = Sheets(Ind).Name
  Next Ind
  ' Ordre souhaité des feuilles pour l'impression
  NomTrié = Split("Page_1,1 - Bordereau,Page_5,Page_6,Page_7,Page_8,Page_9,Page_10,Page_11,Page_12", ",")
  ' Déplacer les feuilles dans le bon ordre
  On Error Resume Next
  For Ind = 0 To Sheets.Count - 1
    Sheets(NomTrié(Ind)).Move Before:=Sheets(Ind + 1)
  Next Ind
  On Error GoTo 0
  ' Sélectionner les feuilles triées
  Sheets(NomTrié).Select
  '
  sRep = ThisWorkbook.Path
  sFilename = Nom & " " & LaDate & " " & LHeure & ".pdf"
  ' Imprimer les feuilles sélectionnées
  ActiveSheet.ExportAsFixedFormat _
    Type:=xlTypePDF, _
    Filename:=sRep & "\" & sFilename, _
    Quality:=xlQualityStandard, _
    IncludeDocProperties:=True, _
    IgnorePrintAreas:=False, _
    OpenAfterPublish:=True
  ' Remettre les onglets dans l'ordre initial (si nécessaire)
  On Error Resume Next
  For Ind = 1 To Sheets.Count
    Sheets(NomAvant(Ind)).Move Before:=Sheets(Ind)
  Next Ind
  On Error GoTo 0
 
  Sheets("1 - Bordereau").Select
  ' Message de confirmation
  MsgBox "Création du fichier PDF a été effectuée", Title:="Mon document"
End Sub

@+
Merci, j'ai changé mon code de cette façon ,ça marche aussi :
 

MarieParis

XLDnaute Occasionnel
VB:
Sub Fichier_pdf()
    Dim sRep As String
    Dim sFilename As String
    Dim LHeure As String
    Dim LaDate As String
    Dim Nom As String

   LHeure = Format(Time, "HMS")
   LaDate = Format(Date, "dd" & "." & "mm" & "." & "yyyy")
   Nom = "Création du bordereau le"
   With ActiveSheet.PageSetup
    .LeftFooter = ""
   .CenterFooter = ""
   .RightFooter = ""
    End With
   
    Sheets("1 - Bordereau").Select
    Sheets("1 - Bordereau").Move Before:=Sheets(3)
   
    Sheets(Array("Page_1", "1 - Bordereau", "Page_5", "Page_6", "Page_7", "Page_8", "Page_9", "Page_10", "Page_11", "Page_12")).Select
    sRep = ThisWorkbook.Path
    sFilename = Nom & " " & LaDate & " " & LHeure & ".pdf"
   
 
    ActiveSheet.ExportAsFixedFormat _
            Type:=xlTypePDF, _
            Filename:=sRep & "\" & sFilename, _
            Quality:=xlQualityStandard, _
            IncludeDocProperties:=True, _
            IgnorePrintAreas:=False, _
            OpenAfterPublish:=True
           
    Sheets("1 - Bordereau").Select
    Sheets("1 - Bordereau").Move Before:=Sheets(1)

' Message de confirmation
MsgBox "Création du fichier PDF a été effectuée", Title:="Mon document"

End Sub
Salut, tjs à titre de curiosité : PDFCreator Modifier l'ordre dans la queue d'impression puis fusionner le tout en un seul PDF

Il faudrait que tu t'intéresses au CodeName : cela te permet de déplacer les onglets, de modidier ces noms d'onglet sans avoir à retoucher au code VBA.
Merci ! Je regarde.
 

patricktoulon

XLDnaute Barbatruc
bonsoir
il y a un moyen simple sans modifier le fichier initial
c'est simplement de copier les feuilles dans un new classeur dans l'ordre que l'on souhaite
et de sauver ce nouveau classeur en pdf puis le fermer sans sauver
et basta ;)
exemple
pour info j'utilise les codename des feuilles
VB:
Sub sauvelesfeuillesenpdf()
    Dim mes_Feuilles, I&, Chemin$
    Application.ScreenUpdating = False
    mes_Feuilles = Array(Feuil1, Feuil6, Feuil10, Feuil4, Feuil2)
    mes_Feuilles(0).Copy    ' a pour effet de créer un new classeur et de copier la feuille

    Set newclasseur = ActiveWorkbook    ' on variabilise le nouveau classeur
    'on boucle a partir de la 2d feuille puisque la premiere est la feuille(0) dans l'array
    For I = 1 To UBound(mes_Feuilles)
        'on les copie dans l'ordre de l'array "mes_feuilles"et toujour en dernier
        mes_Feuilles(I).Copy After:=newclasseur.Sheets(newclasseur.Sheets.Count)
    Next

    'voila tu a un nouveau classeur avec les feuilles concernées dans l'ordre que tu a voulu
    'maintenant on determine le chemin  du nouveau fichier
    Chemin = Environ("userprofile") & "\DeskTop\totolafritte.pdf"
    'et on le sauve avec ce chemin en pdf
    ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
                                       Chemin, Quality:=xlQualityStandard, _
                                       IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
                                       False
    'on en a plus besoinsde ce new classeur alors on le ferme !!!! sans le sauver !!!!!
    Application.DisplayAlerts = False
    ActiveWorkbook.Close
End Sub
terminé;)
 

Discussions similaires

Réponses
13
Affichages
3 K