XL 2019 Macro VBA enregistrement pdf plusieurs onglets dans un sens précis

sofmat

XLDnaute Junior
Bonjour,

Je souhaiterai sauvegarder un fichier excel en pdf qui se compose de plusieurs onglets mais je souhaiterai les enregistrer dans un sens précis (les onglets ne se suivent pas). Par exemple feuil2, feuil1 et non feuil1 et 2. Avez-vous une solution ? Merci d'avance.
Voilà le code actuel : Dans mon cas, "Rectification" doit se trouver en 2ème position alors que c'est la feuil3, "Révision" est la feuil1, "lettre_rev" est la feuil2. Si je place "Rectification" en 2ème position comme ci-dessous, cela ne change rien, la feuille se place toujours à la fin. Bien sûr, je ne veux pas changer le positionnement des onglets, ce serait trop simple et cela ne conviendrait pas puisque j'ai de nombreux documents à gérer et cette page doit toujours se placer en deuxième position.
Sheets(Array("Révision", "Rectification", "lettre_rev")), cela ne change rien.
Merci d'avance.

Sub sauve_controle_pdf()
NomDossier = Application.InputBox("CONTROLE", "Création du dossier", "Vérifier si le nom du dossier est correct")
Chemin = "\\Freebox_Server\serveur\CONTROLE" & "/"

On Error Resume Next

Dossierexistant = GetAttr(Dossier) And vbDirectory

If Dossierexistant = False Then
MkDir (Chemin)
End If

Sheets(Array("Révision", "Rectification", "lettre_rev")).Select

ActiveSheet.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=Chemin & Range("D10") & " " & Range("M10") & " - " & Range("k7") & " - " & Range("F16") & " - " & Range("K16") & " - " & Range("p16") & " - " & Range("d18") & " - " & Range("c16") & " - " & Range("c7").Value & " - " & Format(Date, "dd.mm.yyyy") & ".pdf", _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, From:=1, _
OpenAfterPublish:=True

MsgBox ("Le rapport de contrôle a été enregistré en PDF")

End Sub
 
C

Compte Supprimé 979

Guest
Bonjour Softmat,

Vous avez normalement la réponse ici
 

patricktoulon

XLDnaute Barbatruc
bonjour à tous
un exemple simple
VB:
Sub test()
    Dim ArraySheet, chemin$, WbK As Workbook, F'variables

    Application.ScreenUpdating = False 'bloque le rafraichissement d'écran

    ArraySheet = Array("Feuil6", "Feuil2", "Feuil4") 'l'array des noms de feuille a copier dans l'ordre que l'on veut

    chemin = ThisWorkbook.Path & "\" & "copie de feuil.xlsm" 'détermine le chemin du pdf  à  adapter

    Set WbK = Workbooks.Add'on ajoute un classeur temporaire

    For Each F In ArraySheet  'boucle sur l'array et copie des feuille dans le nouveau classeur
        ThisWorkbook.Sheets(F).Copy after:=WbK.Sheets(WbK.Sheets.Count)
    Next

    Application.DisplayAlerts = False
    WbK.Sheets(1).Delete'on supprime la feuil1 qui est créée automatiquement a la creation du classeur
    
   'on sauve en pdf
 WbK.ExportAsFixedFormat Type:=xlTypePDF, Filename:=chemin, Quality:=xlQualityStandard, _
                            IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
                            False
  'on ferme le classeur temporaire 'on ne le sauve pas
  WbK.Close False

End Sub
terminé ;)
 

sofmat

XLDnaute Junior
Bonjour Patrick, Merci pour ta réponse. En fait il faut que le pdf s'ouvre et qu'il soit enregistré suivant les variables données dans ma macro. En fait, il faudrait qu'elle suive ma macro qui fonctionne bien mais j'ai juste le problème avec l'ordre donné des onglets.
 

patricktoulon

XLDnaute Barbatruc
pour etre exact voici le code complet
met le nom de la feuille dans la ligne entre les deux lignes d'étoile
VB:
Sub test()
    Dim ArraySheet, chemin$, WbK As Workbook, F, Nom$, sh    'variables

    Application.ScreenUpdating = False    'bloque le rafraichissement d'écran

    ArraySheet = Array("Révision", "Rectification", "lettre_rev")

    chemin =  "\\Freebox_Server\serveur\CONTROLE" & "/"

    '**********************************
    Set sh = Sheets("lafeuille ou sont tes ranges")
    '**********************************
    With sh
        Nom = .Range("D10") & " " & .Range("M10") & " - " & .Range("k7") & " - " & .Range("F16") & " - " & .Range("K16") & " - " & _
              .Range("p16") & " - " & .Range("d18") & " - " & .Range("c16") & " - " & .Range("c7").Value & " - " & _
              Format(Date, "dd.mm.yyyy") & ".pdf"
    End With


    Set WbK = Workbooks.Add    'on ajoute un classeur temporaire

    For Each F In ArraySheet  'boucle sur l'array et copie des feuille dans le nouveau classeur
        ThisWorkbook.Sheets(F).Copy after:=WbK.Sheets(WbK.Sheets.Count)
    Next

    Application.DisplayAlerts = False
    WbK.Sheets(1).Delete    'on supprime la feuil1 qui est créée automatiquement a la creation du classeur

    'on sauve en pdf
    WbK.ExportAsFixedFormat Type:=xlTypePDF, Filename:=chemin & nom, Quality:=xlQualityStandard, _
                            IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
                            False
    'on ferme le classeur temporaire 'on ne le sauve pas
    WbK.Close False

End Sub
 

sofmat

XLDnaute Junior
Bonjour, Le code fonctionne très bien mais lorsque j'utilise le code dans un classeur qui contient de nombreuses mises en forme conditionnelles, le pdf généré supprime les mises en forme conditionnelles. Pourtant lorsque je teste le code dans un classeur + simple, cela fonctionne. Vous auriez une idée d'où vient le problème. J'ai essayé de rechercher dans tous les sens, mais je ne trouve pas le problème. Si je sauvegarde le fichier directement en pdf, les mises en forme conditionnelles s'affichent bien donc le problème ne vient pas de là. Si j'utilise un fichier composé d'uniquement 4 onglets, tout marche, mais le classeur comporte 20 onglets dont la plupart comporte des mises en forme conditionnelles... Merci d'avance pour votre aide.
 

sofmat

XLDnaute Junior
Merci beaucoup!
Salut, un échantillon de fichier anonymisé récalcitrant aiderait.
Alors, après des heures de recherche car je ne comprenais pas comment cela pouvait fonctionner pour certains classeurs et pas pour d'autres, j'ai supprimé onglet par onglet afin de savoir s'il y'avait un problème qui venait d'autre part ou si mon classeur comportait trop de pages avec trop de formules... En fait, rien n'y faisait. Donc dans la page où la mise en forme conditionnelle était appliquée et ne fonctionnait pas, j'ai essayé de supprimer les lignes et de les recréer en changeant le code de la mise en forme et cela fonctionne !! Donc la macro de Patrick est ultra parfaite ! Merci encore !
 

Discussions similaires