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

Ams -  
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   -
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++++

7 réponses

  1. cs_Le Pivert Messages postés 8437 Statut Contributeur 731
     
    Bonjour,

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

    http://www.cjoint.com/data3/3Azlvr4DstT.htm
    0
    1. Ams
       
      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
    2. Ams
       
      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
  2. cs_Le Pivert Messages postés 8437 Statut Contributeur 731
     
    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
  3. Ams
     
    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
  4. cs_Le Pivert Messages postés 8437 Statut Contributeur 731
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Ams
     
    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
  7. cs_Le Pivert Messages postés 8437 Statut Contributeur 731
     
    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
  8. cs_Le Pivert Messages postés 8437 Statut Contributeur 731
     
    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
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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