Macro enregistrement d'un fichier Excel sous PDF

Bonjour,

Je souhaite attribuer à un bouton de commande une macro qui me permettrait d'enregistrer 2 feuilles sélectionnées en un seul fichier sous format PDF dans un fichier défini mais différent que celui dans lequel se trouve le fichier excel.

J'ai ceci :

Sub EnregistrerFeuillesPDF()

Dim CheminDossier As String
Dim NomFichierExcel As String
Dim CheminCompletFichier As String
Dim NomFichierPDF As String
Dim NomFichierBase As String
Dim ws As Worksheet

' --- Définir le chemin du dossier de destination ---
' Modifiez cette ligne pour indiquer le dossier où vous voulez enregistrer les PDFs
CheminDossier = "G:\Offres transmises\" ' Assurez-vous que ce dossier existe et est correct !

' Vérifier si le fichier actif est enregistré. Sinon, il faut l'enregistrer pour obtenir le nom du fichier.
If ThisWorkbook.Path = "" Then
MsgBox "Veuillez d'abord enregistrer votre classeur actuel.", vbCritical
Exit Sub
End If

' Obtenir le nom du fichier Excel actuel
NomFichierExcel = ThisWorkbook.Name

' Retirer l'extension du nom du fichier Excel pour l'utiliser comme base pour le PDF
NomFichierBase = Left(NomFichierExcel, InStrRev(NomFichierExcel, ".") - 1)

' Boucler à travers les feuilles sélectionnées (ou toutes les feuilles, selon votre besoin)
' Ici, on exporte chaque feuille comme un fichier PDF distinct.
For Each ws In ActiveWindow.SelectedSheets ' Si vous voulez exporter les feuilles sélectionnées

' Construire le nom du fichier PDF pour chaque feuille
NomFichierPDF = CheminDossier & NomFichierBase & " - " & ws.Name & ".pdf"

' Exporter la feuille en cours au format PDF
ws.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=NomFichierPDF, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False ' Mettez True si vous voulez que le PDF s'ouvre après publication

Next ws

MsgBox "Les feuilles sélectionnées ont été enregistrées au format PDF dans : " & CheminDossier, vbInformation

End Sub

Cette macro enregistre bien les 3 feuilles dans le bon dossier mais il enregistre 3 fois en indiquant le nom de la feuille. Les 3 fichiers reprennent les 3 feuilles. Ce que je souhaite c'est qu'il n'y ait qu'un seul fichier et qu'il soit nommé comme le nom du fichier excel. J'ai essayé en supprimant :

' Construire le nom du fichier PDF pour chaque feuille
NomFichierPDF = CheminDossier & NomFichierBase & " - " & ws.Name & ".pdf"


Mais cela ne fonctionne pas.

Je n'ai pas de formation en VBA juste des recherches sur internet :)Quelqu'un pourrait-il corriger ma commande et me la transmettre en entier afin que je puisse faire un copier coller ? Un tout grand merci d'avance.

Bonjour

Code vba à tester

Sub EnregistrerFeuillesPDF()

    Dim CheminDossier As String
    Dim NomFichierExcel As String
    Dim NomFichierPDF As String
    Dim NomFichierBase As String
    Dim ws As Worksheet
    Dim Feuilles As Collection
    Set Feuilles = New Collection

    ' --- Définir le chemin du dossier de destination ---
    CheminDossier = "G:\Offres transmises\" ' Assurez-vous que ce dossier existe et est correct !

    ' Vérifier si le fichier actif est enregistré. Sinon, il faut l'enregistrer pour obtenir le nom du fichier.
    If ThisWorkbook.Path = "" Then
        MsgBox "Veuillez d'abord enregistrer votre classeur actuel.", vbCritical
        Exit Sub
    End If

    ' Obtenir le nom du fichier Excel actuel
    NomFichierExcel = ThisWorkbook.Name

    ' Retirer l'extension du nom du fichier Excel pour l'utiliser comme base pour le PDF
    NomFichierBase = Left(NomFichierExcel, InStrRev(NomFichierExcel, ".") - 1)

    ' Ajouter les feuilles sélectionnées à la collection
    For Each ws In ActiveWindow.SelectedSheets
        Feuilles.Add ws
    Next ws

    ' Construire le nom du fichier PDF
    NomFichierPDF = CheminDossier & NomFichierBase & ".pdf"

    ' Exporter les feuilles sélectionnées au format PDF
    ThisWorkbook.Sheets(Feuilles).ExportAsFixedFormat Type:=xlTypePDF, _
        Filename:=NomFichierPDF, _
        Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, _
        OpenAfterPublish:=False ' Mettez True si vous voulez que le PDF s'ouvre après publication

    MsgBox "Les feuilles sélectionnées ont été enregistrées au format PDF dans : " & CheminDossier, vbInformation

End Sub

Bonjour NathalieH et bienvenue

Malheureusement, tu n'as pas lu la charte de ce forum
[A LIRE AVANT DE POSTER] Charte du forum et informations utiles
ou bien mal lu

image

Merci d'en prendre note pour la prochaine fois
J'ai signalé ton 1er post, un modo devrait le corriger

Sub EnregistrerFeuillesPDF()

    Dim CheminDossier As String
    Dim NomFichierExcel As String
    Dim NomFichierPDF As String
    Dim NomFichierBase As String
    Dim ws As Worksheet
    Dim Feuilles As Collection
    Set Feuilles = New Collection

    ' --- Définir le chemin du dossier de destination ---
    CheminDossier = "G:\Offres transmises\" ' Assurez-vous que ce dossier existe et est correct !

    ' Vérifier si le fichier actif est enregistré. Sinon, il faut l'enregistrer pour obtenir le nom du fichier.
    If ThisWorkbook.Path = "" Then
        MsgBox "Veuillez d'abord enregistrer votre classeur actuel.", vbCritical
        Exit Sub
    End If

    ' Obtenir le nom du fichier Excel actuel
    NomFichierExcel = ThisWorkbook.Name

    ' Retirer l'extension du nom du fichier Excel pour l'utiliser comme base pour le PDF
    NomFichierBase = Left(NomFichierExcel, InStrRev(NomFichierExcel, ".") - 1)

    ' Ajouter les feuilles sélectionnées à la collection
    For Each ws In ActiveWindow.SelectedSheets
        Feuilles.Add ws
    Next ws

    ' Construire le nom du fichier PDF
    NomFichierPDF = CheminDossier & NomFichierBase & ".pdf"

    ' Exporter les feuilles sélectionnées au format PDF
    ThisWorkbook.Sheets(Feuilles).ExportAsFixedFormat Type:=xlTypePDF, _
        Filename:=NomFichierPDF, _
        Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, _
        OpenAfterPublish:=False ' Mettez True si vous voulez que le PDF s'ouvre après publication

    MsgBox "Les feuilles sélectionnées ont été enregistrées au format PDF dans : " & CheminDossier, vbInformation

End Sub

Bonjour Merci pour votre intervention. Cela ne fonctionne pas. Est surligné en jaune :

ThisWorkbook.Sheets(Feuilles).ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=NomFichierPDF, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False ' Mettez True si vous voulez que le PDF s'ouvre après publication

Ce qu'il faudrait c'est voir quel commande indique de créer 3 fichiers (idendiques par leur contenu mais 3 nom différents) pour qu'il n'en crée qu'un seul.

D'autre part existe-t-il la possibilité de créer un lien de manière plus rapide que de cliquer droit - lien - recherches dossier - recherche fichier ? Svp Merci.

JExcel2fr

Pour le signe "Marcro VBA" non utilisé je pensais qu'il fallait le mettre lorsqu'on est certain que cela fonctionne.

Mille excuses ...

A tester

Sub EnregistrerFeuillesEnPDF()
    Dim chemin As String
    Dim nomFichier As String
    Dim feuil1 As String
    Dim feuil2 As String

    ' Définir le chemin où vous souhaitez enregistrer le fichier PDF
    chemin = "C:\Chemin\Vers\Dossier\" ' Remplacez par votre chemin
    nomFichier = "MonFichier.pdf" ' Nom du fichier PDF à créer

    ' Définir les feuilles à enregistrer
    feuil1 = "Feuille1" ' Remplacez par le nom de la première feuille
    feuil2 = "Feuille2" ' Remplacez par le nom de la deuxième feuille

    ' Sélectionner les feuilles
    ThisWorkbook.Sheets(Array(feuil1, feuil2)).Select

    ' Enregistrer les feuilles sélectionnées en PDF
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
        Filename:=chemin & nomFichier, _
        Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, _
        OpenAfterPublish:=False

    ' Désélectionner les feuilles
    ThisWorkbook.Sheets(1).Select ' Sélectionne la première feuille pour revenir à l'état initial

    MsgBox "Les feuilles ont été enregistrées en PDF avec succès!", vbInformation
End Sub

Bonjour,

Merci pour votre réponse

ça coince ici.

' Exporter les feuilles sélectionnées au format PDF
ThisWorkbook.Sheets(FeuilleNom).ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=NomFichierPDF, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False ' Mettez True si vous voulez que le PDF s'ouvre après publication

Voir cela à tester

Sub EnregistrerFeuillesEnPDF()
    Dim chemin As String
    Dim nomFichier As String
    Dim feuil1 As String
    Dim feuil2 As String

    ' Définir le chemin où vous souhaitez enregistrer le fichier PDF
    chemin = "C:\Chemin\Vers\Dossier\" ' Remplacez par votre chemin
    nomFichier = "MonFichier.pdf" ' Nom du fichier PDF à créer

    ' Définir les feuilles à enregistrer
    feuil1 = "Feuille1" ' Remplacez par le nom de la première feuille
    feuil2 = "Feuille2" ' Remplacez par le nom de la deuxième feuille

    ' Sélectionner les feuilles
    ThisWorkbook.Sheets(Array(feuil1, feuil2)).Select

    ' Enregistrer les feuilles sélectionnées en PDF
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
        Filename:=chemin & nomFichier, _
        Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, _
        OpenAfterPublish:=False

    ' Désélectionner les feuilles
    ThisWorkbook.Sheets(1).Select ' Sélectionne la première feuille pour revenir à l'état initial

    MsgBox "Les feuilles ont été enregistrées en PDF avec succès!", vbInformation
End Sub

Re,

Si je puis me permettre, pourquoi faire si compliqué, puisque les feuilles sont normalement déjà sélectionnées

Sub EnregistrerFeuillesPDF()
  Dim CheminDossier As String
  Dim NomFichierExcel As String
  Dim CheminCompletFichier As String
  Dim NomFichierPDF As String
  Dim NomFichierBase As String
  ' --- Définir le chemin du dossier de destination ---
  ' Modifiez cette ligne pour indiquer le dossier où vous voulez enregistrer les PDFs
  CheminDossier = "G:\Offres transmises\" ' Assurez-vous que ce dossier existe et est correct !
  ' Vérifier si le fichier actif est enregistré. Sinon, il faut l'enregistrer pour obtenir le nom du fichier.
  If ThisWorkbook.Path = "" Then
    MsgBox "Veuillez d'abord enregistrer votre classeur actuel.", vbCritical
    Exit Sub
  End If
  ' Obtenir le nom du fichier Excel actuel
  NomFichierExcel = ThisWorkbook.Name
  ' Retirer l'extension du nom du fichier Excel pour l'utiliser comme base pour le PDF
  NomFichierBase = Left(NomFichierExcel, InStrRev(NomFichierExcel, ".") - 1)
  ' Construire le nom du fichier PDF
  NomFichierPDF = CheminDossier & NomFichierBase & " - " & Format(Now, "yyyy.mm.dd hhmmss") & ".pdf"
  ' Exporter les feuilles sélectionnées
  Selection.ExportAsFixedFormat Type:=xlTypePDF, _
      Filename:=NomFichierPDF, _
      Quality:=xlQualityStandard, _
      IncludeDocProperties:=True, _
      IgnorePrintAreas:=False, _
      OpenAfterPublish:=False ' Mettez True si vous voulez que le PDF s'ouvre après publication
  MsgBox "Les feuilles sélectionnées ont été enregistrées au format PDF dans : " & CheminDossier, vbInformation
End Sub

A+

Merci JExcel2fr,

J'ai exécuté la macro pas d'erreur mais aucune trace du fichier dans G:\Offes transmises.

J'ai pensé que c'était parce que pas sur le PC et que g:\ est un fichier commun mais j'ai remplacé g:\... par le disque local c:\ et rien nulle part...

Je suis assez nulle en macro.

Je ne comprends pas pourquoi il accepte de m'enregistrer 3 fois le même fichier mais sous 3 noms différents et que lorsq'uon souhaite un seul enregistrement cela ne fonctionne pas..... Quelque chose m'échappe.

Bonsoir Nathalie

On peut être nul(le) mais vouloir apprendre

J'avais laissé la ligne du chemin en commentaire

'CheminDossier = "G:\Offres transmises\" ' Assurez-vous que ce dossier existe et est correct 

Il suffit donc d'enlever l'apostrophe devant, vous verrez la ligne va changer de couleur

CheminDossier = "G:\Offres transmises\" ' Assurez-vous que ce dossier existe et est correct !

Bonne soirée

Sub EnregistrerEnPDFDansAutreDossier()

Dim nomClasseurActif As String

Dim cheminDossierDestination As String

Dim cheminCompletFichierPDF As String

' --- Définir le dossier de destination ---

' Remplacez "C:\Votre\Chemin\Vers\Dossier\PDF\" par le chemin réel de votre dossier

'cheminDossierDestination = "G:\Offres Transmises\PDFs\" ' Assurez-vous que le chemin se termine par un backslash

' --- Récupérer le nom du fichier Excel actif ---

' nomClasseurActif = ThisWorkbook.Name

' --- Construire le chemin complet du fichier PDF ---

' Enlève l'extension .xlsm (ou .xls, .xlsx) et ajoute l'extension .pdf

'cheminCompletFichierPDF = G:\Offres Transmises & Left(nomClasseurActif, InStrRev(nomClasseurActif, ".") - 1) & ".pdf"

' --- Vérifier si le classeur est enregistré ---

If ThisWorkbook.Path = "" Then

MsgBox "Veuillez d'abord enregistrer le classeur actuel avant d'exécuter cette macro.", vbExclamation

Exit Sub

End If

' --- Exporter la feuille active au format PDF ---

On Error Resume Next ' Permet de gérer les erreurs (par exemple, si le dossier n'existe pas)

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _

Filename:=cheminCompletFichierPDF, _

Quality:=xlQualityStandard, _

IncludeDocProperties:=True, _

IgnorePrintAreas:=False

On Error GoTo 0 ' Réactive la gestion normale des erreurs

' --- Message de confirmation (optionnel) ---

MsgBox "La feuille a été enregistrée en PDF sous le nom : " & cheminCompletFichierPDF, vbInformation

End Sub

Ceci n'indiquer aucun message d'erreur mais je ne retrouve pas le fichier PDF enregistré dans offres transmises ni ailleurs d'ailleurs.

Et ce que vous venez de m'envoyer, cela va s'enregistrer sur mon dossier je pense

Sub EnregistrerFeuillesEnPDF()
    Dim chemin As String
    Dim nomFichier As String
    Dim feuil1 As String
    Dim feuil2 As String

    ' Définir le chemin où vous souhaitez enregistrer le fichier PDF
    chemin = "C:\Chemin\Vers\Dossier\" ' Remplacez par votre chemin
    nomFichier = "MonFichier.pdf" ' Nom du fichier PDF à créer

    ' Définir les feuilles à enregistrer
    feuil1 = "Feuille1" ' Remplacez par le nom de la première feuille
    feuil2 = "Feuille2" ' Remplacez par le nom de la deuxième feuille

    ' Sélectionner les feuilles
    ThisWorkbook.Sheets(Array(feuil1, feuil2)).Select

    ' Enregistrer les feuilles sélectionnées en PDF
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
        Filename:=chemin & nomFichier, _
        Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, _
        OpenAfterPublish:=False

    ' Désélectionner les feuilles
    ThisWorkbook.Sheets(1).Select ' Sélectionne la première feuille pour revenir à l'état initial

    MsgBox "Les feuilles ont été enregistrées en PDF avec succès!", vbInformation
End Sub

Merci pour ce conseil mais :

Je viens de retirer le ' et maintenant les lignes suivantes se surlignent en jaune lorsque j'exécute la macro.

Selection.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=NomFichierPDF, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False ' Mettez True si vous voulez que le PDF s'ouvre après publication

Heureusement que j'ai bcp de cheveux car je suis en train de me les arracher

Re,

Bon perso, ma patience est à bout quand on veut faire et utiliser du VBA... on se forme !

Voici le fichier exemple (d'après le code donné), il enregistre le PDF dans le dossier ou il se trouve

Nota : chez moi, cela fonctionne très bien

Bonjour,

Enregistrer sous pdf dans le fichier ou le fichier excel se trouve ça j'ai déjà mais ce n'est pas ce qu'il me faut.

Macro enregistrer sous imprimer dissocier grouper j'ai pu faire il me reste la dernière et malgré la quantité de recherches et d'essais je n'y parviens pas.

Je pensais que quelqu'un aurait pu m'aider au niveau de l'enregistrement de un seul fichier et non trois. Désolée de mettre à l'épreuve votre patience...

En fait votre macro enregistre sous PDF mais enregistre 2 pages blanches... Le premier fichier est enregistrer manuellement et contient quelque chose. Le second via la macro et vides..

Bonjour,

Je confirme que la macro de JExcelFr fonctionne bien chez moi aussi.

Le point, je pense, d'incompréhension, est qu'il faut sélectionner les cellules dans les feuilles pour que l'export fonctionne. Et non simplement les noms des onglets en bas. Autrement effectivement vous avez des exports vides.

EDIT : ci-après une adaptation pour exporter les feuilles sélectionnées (attention contenu complet) :

Sub EnregistrerFeuillesSelectionneesDansUnPDF()
    Dim CheminDossier As String
    Dim NomFichierExcel As String
    Dim NomFichierBase As String
    Dim NomFichierPDF As String
    Dim FeuillesSelectionnees As Sheets
    ' Vérifier si le fichier est enregistré
    If ThisWorkbook.Path = "" Then
        MsgBox "Veuillez d'abord enregistrer votre classeur actuel.", vbCritical
        Exit Sub
    End If
    ' Définir le dossier de destination
    CheminDossier = ThisWorkbook.Path & "\"
    NomFichierExcel = ThisWorkbook.Name
    NomFichierBase = Left(NomFichierExcel, InStrRev(NomFichierExcel, ".") - 1)
    NomFichierPDF = CheminDossier & NomFichierBase & " - " & Format(Now, "yyyy.mm.dd hhmmss") & ".pdf"

    ' Vérifier qu'au moins une feuille est sélectionnée
    If ActiveWindow.SelectedSheets.Count = 0 Then
        MsgBox "Veuillez sélectionner au moins une feuille.", vbExclamation
        Exit Sub
    End If

    ' Exporter les feuilles sélectionnées dans un seul PDF
    Set FeuillesSelectionnees = ActiveWindow.SelectedSheets
    FeuillesSelectionnees.Select
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
        Filename:=NomFichierPDF, _
        Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, _
        OpenAfterPublish:=False

    MsgBox "Les feuilles sélectionnées ont été enregistrées dans un seul fichier PDF : " & NomFichierPDF, vbInformation
End Sub

J'ai fini par trouver Il fallait supprimer dans la commande d'inscrire le nom de chaque feuille.

Sub EnregistrerDansOffresTransmisesPDF()
Dim cheminDossier As String
    Dim NomFichierExcel As String
    Dim CheminCompletFichier As String
    Dim nomFichierPDF As String
    Dim NomFichierBase As String
    Dim ws As Worksheet

    ' --- Définir le chemin du dossier de destination ---
    ' Modifiez cette ligne pour indiquer le dossier où vous voulez enregistrer les PDFs
    cheminDossier = "G:\Offres transmises\" ' Assurez-vous que ce dossier existe et est correct !

    ' Vérifier si le fichier actif est enregistré. Sinon, il faut l'enregistrer pour obtenir le nom du fichier.
    If ThisWorkbook.Path = "" Then
        MsgBox "Veuillez d'abord enregistrer votre classeur actuel.", vbCritical
        Exit Sub
    End If

    ' Obtenir le nom du fichier Excel actuel
    NomFichierExcel = ThisWorkbook.Name

    ' Retirer l'extension du nom du fichier Excel pour l'utiliser comme base pour le PDF
    NomFichierBase = Left(NomFichierExcel, InStrRev(NomFichierExcel, ".") - 1)

    ' Boucler à travers les feuilles sélectionnées (ou toutes les feuilles, selon votre besoin)
    ' Ici, on exporte chaque feuille comme un fichier PDF distinct.
    For Each ws In ActiveWindow.SelectedSheets ' Si vous voulez exporter les feuilles sélectionnées

        ' Construire le nom du fichier PDF pour chaque feuille
        nomFichierPDF = cheminDossier & NomFichierBase & ".pdf"

        ' Exporter la feuille en cours au format PDF
        ws.ExportAsFixedFormat Type:=xlTypePDF, _
                               Filename:=nomFichierPDF, _
                               Quality:=xlQualityStandard, _
                               IncludeDocProperties:=True, _
                               IgnorePrintAreas:=False, _
                               OpenAfterPublish:=False ' Mettez True si vous voulez que le PDF s'ouvre après publication

    Next ws

    MsgBox "Les feuilles sélectionnées ont été enregistrées au format PDF dans : " & cheminDossier, vbInformation

       End Sub

Merci à tous pour votre aide.

Rechercher des sujets similaires à "macro enregistrement fichier pdf"