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 SubBonjour 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
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 SubBonjour 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 SubBonjour,
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 SubRe,
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 SubA+
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 SubCeci 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 SubMerci 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
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 SubJ'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 SubMerci à tous pour votre aide.