Macro pour enregistrer le classeur en xls et les feuille en pdf.

Fermé
Ams - 24 janv. 2015 à 17:13
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 26 janv. 2015 à 12:03
Bonjour,

J'ai un classeur qui contient plusieurs feuilles...jusqu'ici tout roule;-)

Je souhaite créer une macro qui enregistre au format .pdf uniquement les feuilles qui ont la cellule A1=1, et le classeur entier au format excel classique.

Les fichiers générés (càd les .pdf et le .xls) devraient être enregistrés dans le même dossier que le dossier où se trouve le fichier original qui a été modifié.

Les noms des fichiers .pdf devraient avoir en commun: "Feuil4!A2" et "Feuil4!F2" et "Feuil4!F5". Et se différencier à la fin par le nom de la feuille.

Le nom de l'unique fichier xls ne contiendrait que: "Feuil4!A2" et "Feuil4!F2" et "Feuil4!F5".

J'ai l'impression que c'est ultra chaud à faire...et j'y comprend rien en macro..mais je sais qu'il y a pas mal de personnes extrêmement compétentes par ici alors j'espère!

Merci beaucoup de m'avoir lu;-)

Axel

P.s: pour les chemin des fichier je ne sais pas si ça à un impact mais je suis sur mac histoire de compliquer encore un peu les choses...

Merci++++

A voir également:

7 réponses

cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
25 janv. 2015 à 11:13
Bonjour,

Pour que ce classeur fonctionne, il faut avoir Office 2007 ou plus récente:

http://www.cjoint.com/data3/3Azlvr4DstT.htm
0
Merci beaucoup++++ pour votre aide mais ça ne fonctionne pas vraiment...

En fait, la macro enregistre uniquement le classeur et ne génère pas de pdf.

Il faudrait que les feuilles contenant la valeur 1 en cellule A1 soit enregistrée en pdf, dans le meme classeur que celui d'origine avec un nom de fichier qui soit: la valeur de la cellule C1 de la feuille 1 et le nom de la feuille qui est enregistrée en pdf (dans laquelle se trouve le bouton de la macro).

http://cjoint.com/?3AzmNgyrZ1w
0
J'ai créé ça pour enregistrer le classeur entier au nom souhaité au format excel:

Sub Rec()
ActiveWorkbook.SaveAs Filename:=[C1].Value & "." & [I1].Value & ".xls"
' Rec Macro
'
' Touche de raccourci du clavier : Option+Cmd+r
'
End Sub

Il ne reste plus qu'à ajouter l'enregistrement en pdf des feuilles contenant 1 dans la cellule A1 avec le même nom que pour le classeur (Filename:=[C1].Value & "." & [I1].Value) mais avec en plus à la fin le nom de la feuille...

Pensez-vous que ce soit possible?

Merci encore+++
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
25 janv. 2015 à 13:50
Les noms des fichiers .pdf devraient avoir en commun: "Feuil4!A2" et "Feuil4!F2" et "Feuil4!F5". Et se différencier à la fin par le nom de la feuille.


a aucun moment il est question de la Cellule C1

comme explication dernier post:

Il faudrait que les feuilles contenant la valeur 1 en cellule A1 soit enregistrée en pdf, dans le meme classeur que celui d'origine avec un nom de fichier qui soit: la valeur de la cellule C1 de la feuille 1 et le nom de la feuille qui est enregistrée en pdf (dans laquelle se trouve le bouton de la macro).


Voici donc la nouvelle mouture:

http://www.cjoint.com/data3/3Azn3xi2hWe.htm
0
Pardon je me suis mal exprimé la première fois.

Votre première mouture marche à la perfection pour enregistrer les feuilles présentant 1 en cellule A1 au format pdf.

En fait je voudrais juste ajouter l'enregistrement du classeur au format xls.
J'ai créé cette macro mais je n'arrive pas à combiner celle ci et la votre sur le même boutton.

Sub Rec()
ActiveWorkbook.SaveAs Filename:=[C1].Value & "." & [I1].Value & Format([I4], "_dd_mm_yy") & ".xls"
End Sub
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
25 janv. 2015 à 14:27
Faire Alt F11 et cliquer dans ThisWorkbook en haut a gauche.
Mettre ce code:

Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & [C1].Value & "." & [I1].Value & Format([I4], "_dd_mm_yy") & ".xls"
End Sub



0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
je suis désolé ça ne fonctionne pas...
Votre dernière version enregistre simplement en pdf la feuille active.
Les autres feuille présentant 1 en A1 ne sont plus enregistrée.

Je suis paumé
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
25 janv. 2015 à 18:37
Dans le classeur envoyé, il n'y a que la Feuil4 qui contient un 1 en A1, il n'a rien en C1!
dans la feuil1 en A1: Nom
dans la feuil5 en A1: 0
dans la feuil6 en A2: 1

Voici le code modifié qui n'enregistre que la feuille4 sans nom car absent!

Option Explicit
Dim nom, chemin As String
Sub pdf()
Dim Ws As Worksheet
    For Each Ws In Worksheets
        If Ws.Range("A1").Value = "1" Then
          nom = Ws.Range("C1").Value
          save_pdf
          MsgBox "La feuille: " & nom & " est enregistrée en pdf dans le dossier de ce classeur."
          End If
    Next Ws
End Sub
Sub save_pdf()
chemin = ThisWorkbook.Path & "\Feuil4_A2_Feuil4_F2_Feuil4_F5_" & nom & ".pdf"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        chemin, Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
        False
End Sub




0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
26 janv. 2015 à 08:03
J'ai bien tout relu et pour résumer:

Il faut enregistrer en pdf au nom de la feuille les feuilles ayant A1=1

enregistrer le classeur en xls au nom se trouvant sur la feuille1 en C1

donc voici le code:

Option Explicit
Dim nom, chemin As String
Sub pdf()
Dim Ws As Worksheet
    For Each Ws In Worksheets
    'enregistrement en pdf au nom de la feuille
        If Ws.Range("A1").Value = "1" Then
          nom = Ws.Name
          save_pdf
          MsgBox "La feuille: " & nom & " est enregistrée en pdf dans le dossier de ce classeur."
          End If
    Next Ws
    'enregistrement du classeur xls au nom se trouvant sur la feuille1 en C1
    Sheets("Feuil1").Select
    ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & [C1].Value & "." & [I1].Value & Format([I4], "_dd_mm_yy") & ".xls"
End Sub
Sub save_pdf()
chemin = ThisWorkbook.Path & "\Feuil4_A2_Feuil4_F2_Feuil4_F5_" & nom & ".pdf"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        chemin, Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
        False
End Sub



J'espère avoir tout compris!

0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
26 janv. 2015 à 12:03
Bonjour,

Salut Le Pivert,

Ton code m'a l'air correct.
Cependant, à lire ceci : je suis désolé ça ne fonctionne pas...
Votre dernière version enregistre simplement en pdf la feuille active.
Les autres feuille présentant 1 en A1 ne sont plus enregistrée.
Je suis paumé

je me dit qu'Ams ne doit pas lancer la bonne procédure. En effet, ce résultat est celui de ta Sub save_pdf.
Pour pallier ce souci, je mettrais la variable nom, non pas en variable publique, mais en paramètre de ta deuxième Sub.
Comme ceci :
Option Explicit
Dim chemin As String
Sub pdf()
Dim Ws As Worksheet, nom As String
    For Each Ws In Worksheets
    'enregistrement en pdf au nom de la feuille
        If Ws.Range("A1").Value = "1" Then
          nom = Ws.Name
          save_pdf nom
          MsgBox "La feuille: " & nom & " est enregistrée en pdf dans le dossier de ce classeur."
          End If
    Next Ws
    'enregistrement du classeur xls au nom se trouvant sur la feuille1 en C1
    Sheets("Feuil1").Select
    ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & [C1].Value & "." & [I1].Value & Format([I4], "_dd_mm_yy") & ".xls"
End Sub
Sub save_pdf(nom As String)
chemin = ThisWorkbook.Path & "\Feuil4_A2_Feuil4_F2_Feuil4_F5_" & nom & ".pdf"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        chemin, Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
        False
End Sub


Ainsi, via ALT+F8, tu n'as plus qu'une seule procédure qui apparait.
Cela limite les erreurs.
0