Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
J'ai un fichier pour génerer des quittances de loyer mensuel.
Cependant, quand j'enregistre tous les mois mes quittances, elles s'enregistrent tous les mois sous le même nom de fichier.
Exemple:
Appart 01.pdf
Appart 02.pdf
Appart 03.pdf
....
Je souhaiterais que chaque mois, lors de l'enregistrement, il y ait le mois et l'année qui apparaissent devant (Janvier 2026 Appart 01.pdf et ainsi de suite .....).
Et là, je ne sais pas comment faire ça.
Est ce que quequ'un pourrait me modifier mon fichier dans ce sens?
Merci d'avance
Sub printpdf()
Application.ScreenUpdating = False
chemin = "C:\Users\flege\OneDrive\Bureau\QUITTANCES CHOISEUL\" ' adapter le chemin
Suffixe = " ( " & Format(Sheets("Locataires").Range("E3"), "mmmm yyyy") & " )"
For Each ws In ThisWorkbook.Worksheets
Select Case ws.Name
Case "Locataires", "Quittance modiffiable" 'ne pas imprimer ces feuilles
Case Else
nf = chemin & ws.Name & Suffixe & ".pdf"
On Error Resume Next
Kill nf 'on efface le fichier pdf s'il existe déjà
On Error Resume Next
ws.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
nf, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
False
End Select
Next ws
End Sub
Cependent enregistrer sous ce format peut entraîner une confusion dans l'ordre des fichiers générés dans l'exploreur vaux mieux utiliser "yyyy-mm" 2026-02
Cependent enregistrer ce sous ce format peut entraîner une confusion dans l'ordre des fichiers générés dans l'exploreur vaux mieux utiliser "yyyy-mm" 2026-02
Sub printpdf()
Application.ScreenUpdating = False
chemin = "C:\Users\flege\OneDrive\Bureau\QUITTANCES CHOISEUL\" ' adapter le chemin
Suffixe = " ( " & Format(Sheets("Locataires").Range("E3"), "mmmm yyyy") & " )"
For Each ws In ThisWorkbook.Worksheets
Select Case ws.Name
Case "Locataires", "Quittance modiffiable" 'ne pas imprimer ces feuilles
Case Else
nf = chemin & ws.Name & Suffixe & ".pdf"
On Error Resume Next
Kill nf 'on efface le fichier pdf s'il existe déjà
On Error Resume Next
ws.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
nf, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
False
End Select
Next ws
End Sub
Sub printpdf()
Application.ScreenUpdating = False
chemin = "C:\Users\flege\OneDrive\Bureau\QUITTANCES CHOISEUL\" ' adapter le chemin
Suffixe = " ( " & Format(Sheets("Locataires").Range("E3"), "mmmm yyyy") & " )"
For Each ws In ThisWorkbook.Worksheets
Select Case ws.Name
Case "Locataires", "Quittance modiffiable" 'ne pas imprimer ces feuilles
Case Else
nf = chemin & ws.Name & Suffixe & ".pdf"
On Error Resume Next
Kill nf 'on efface le fichier pdf s'il existe déjà
On Error Resume Next
ws.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
nf, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
False
End Select
Next ws
End Sub
Comme l'a fort justement suggéré Rheeem, si tu as compris le principe tu peux modifier le format que j'ai arbitrairement imposé pour le nom du fichier (préfixe au lieu de suffixe, mois écrit en nombre plutôt qu'en texte, etc.).
Je viens de relire ta question initiale, et c'est d'ailleurs un préfixe que tu demandais, et moi j'ai proposé un suffixe... 🙄
Si tu n'arrives pas à donner le format exact que tu veux pour les noms de tes fichiers, n'hésite pas à le dire, on verra ce qu'on peut faire. 😉
bonsoir
juste en passant moi les gestions d'erreurs sauf si indispensables, je m'en passe
VB:
Sub printpdf()
Dim chemin$, ws As Worksheet, Nf$
Application.ScreenUpdating = False
chemin = "C:\Users\flege\OneDrive\Bureau\QUITTANCES CHOISEUL" ' adapter le chemin
If Dir(chemin, vbDirectory) = "" Then MsgBox "le dossier est inaccessible" & vbCrLf & "Vérifiez l'existence du dossier", vbInformation: Exit Sub
For Each ws In ThisWorkbook.Worksheets
Select Case Left(ws.Name, 6)
Case "Appart"
Nf = chemin & "\" & ws.Name & "_" & Format([Locataires!E3].value, "mmmm yyyy") & ".pdf"
If Dir(Nf) <> "" Then Kill Nf 'on efface le fichier pdf s'il existe déjà
ws.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Nf, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
Case Else
End Select
Next ws
Application.ScreenUpdating = True
End Sub
Tu utilises les crochets pour faire référence à une cellule de la feuille. Excel n'interprétera cela qu'au moment de l'exécution; Et pas au moment de la compilation.
Faisons un test supprimons le "s" de locataires, que va t-il se passer selon toi ? Excel ne va rien voir au moment de la compilation, mais au moment de l'exécution tu va avoir droit à une belle fenêtre du débogueur.
Cette erreur pourrait être interceptée par une gestion d'erreur, n'est-ce pas ? Où mieux une fonction pourrait renvoyer une variable de type Excel.Worksheet, il ne resterait plus qu' a tester si elle est égale à 'Nothing', et décider de la suite à donner...
Mon conseil même si cela demande un peu plus d'investissement et d'écritures. et pour respecter le SRP
Utiliser de petite fonction qui n'ont qu'un rôle
Tester la validité d'un chemin.
Tester la présence d'une feuille.
Etc...
La méthode PrintPdf comme son nom l'indique ne devrait qu'imprimer le fichier au format PDF. (Ici elle l'exporte) son nom prête à confusion, Non ?
Patrick, Je prends quand même note que le code était déjà pré rédigé, et que tu l'as juste adapté. 😉
@flegeo.d@gmail.com puisque vous avez : un tableau de locataires, et un feuille modèle pour l'impression des quittances, pourquoi ne pas l'utiliser ? Vous pourriez les enregistrer au format Pdf dans un répertoire de votre choix et ne garder, dans votre classeur que le strict minimum.
Vous pourriez aussi ajouter une colonne dans le tableau locataires pour y ajouter par exemple un acompte qui aurait été versé.
bonjour @valtraze
argument non recevable
pour la simple et bonne raison que le"s" peut très bien être oublié dans l'autre contexte( en variablisation
exemple ici
le résultat serait le même ca plante une ligne plus haut c'est tout
après oui je suis d'accords presque tout ce que les débutants gèrent avec on error peut l'être autrement
@flegeo.d@gmail.com puisque vous avez : un tableau de locataires, et un feuille modèle pour l'impression des quittances, pourquoi ne pas l'utiliser ? Vous pourriez les enregistrer au format Pdf dans un répertoire de votre choix et ne garder, dans votre classeur que le strict minimum.
Vous pourriez aussi ajouter une colonne dans le tableau locataires pour y ajouter par exemple un acompte qui aurait été versé.
là oui par contre j'abonde deux fois même c'est ce que j'ai pensé la première fois que j'ai ouverts le fichier
mais je me suis dit peut être fait il toutes ses quittances et les imprimes toutes en même temps
d'ailleurs n'est il pas fait dans ce sens le code
cela dit oui après impression on peut virer
c'est un choix
Bonjour à tous, Patrick
On ne se comprends pas bien, ce que je pointe c'est le fait que tu dise que si tu peux te passer de la gestion d'erreur tu le fait. Dans ce cas là elle devient nécessaire et même obligatoire, je dirais. Car si il y a un problème, c'est le débogueur qui va prendre le relais avec une belle fenêtre de débogage.
Pour ma part, (ce n'est peut-être pas la meilleure méthode) j'initialise toujours mes tableaux dans un module 'Factory' avec une fonction qui renvoie un 'ListObject', comme cela plus besoin de me tracasser sur le nom du tableau et de sa feuille parente. L'avantage c'est que l'on a plus qu'a tester si le 'ListObject' est à 'Nothing'. Et cela ne lève pas d'erreur.
Donc pour moi la gestion d'erreur est pratiquement obligatoire :
Quand on travaille avec le propriété 'EnableEvents' de l'application. (Tout le monde comprendra pourquoi.)
Si l'on travaille sur des 'ListObjects', 'ListRows' etc...
Si l'on travaille sur une feuille qui peut être protégée.
Etc....
Dans tout les cas, je pars sur le principe que ce n'est pas le code le plus court le meilleur, (Comme j'entends souvent sur le forum.)
Pour ma part, (ce n'est peut-être pas la meilleure méthode) j'initialise toujours mes tableaux dans un module 'Factory' avec une fonction qui renvoie un 'ListObject', comme cela plus besoin de me tracasser sur le nom du tableau et de sa feuille parente. L'avantage c'est que l'on a plus qu'a tester si le 'ListObject' est à 'Nothing'. Et cela ne lève pas d'erreur.
On ne se comprends pas bien, ce que je pointe c'est le fait que tu dise que si tu peux te passer de la gestion d'erreur tu le fait. Dans ce cas là elle devient nécessaire et même obligatoire
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD