XL 2016 VBA - Sélection de feuilles excel pour impression PDF

charleselrahc

XLDnaute Nouveau
Bonjour à tous,

Je suis nouveau ici, je ne parviens pas à réaliser un code VBA me permettant de sélectionner un ensemble de feuilles dont le nom est du type Feuil1 , Feuil2...
En effet j'ai déja une macro qui me crée automatiquement ces feuilles mais je ne peux pas prévoir jusqu'a quel nombre elles vont être, si elles seront toutes présentes (un utilisateur peux supprimer Feuil2 par exemple) ou encore si elles existent !

Le but étant d'imprimer le tout (avec d'autres pages) en PDF.

Je ne sais pas si j'ai été suffisament clair mais je vous remercie de m'avoir lu.
Charles.
 

danielco

XLDnaute Accro
Bonjour,

Peux-tu préciser ce que tu entends par "imprimer en pdf" ? Est-ce que tu veux créer un fichier pdf ? Pour la sélection des feuilles, est-ce que tu souhaites les choisir depuis une liste ? Sinon, de quelle façon ? Précise aussi ce que tu entends par " le tout (avec d'autres pages)".

Cordialement.

Daniel
 

kiki29

XLDnaute Barbatruc
Salut, voir dans un premier temps ici
Une approche avec la possibilité de fusion en 1 seul pdf de l'ensemble des feuilles, ou de génération des feuilles sélectionnées de façon séparée, de gestion des doublons via un indice, le tout dans un dossier créé automatiquement et nommé par défaut Dossier PDFs à la racine de l'application. L'ensemble des feuilles ( visibles ou pas ) est listé via le bouton Récap. Accessoirement pour une fusion on peut modifier l'ordre des fichiers dans la liste.

Pour la fusion avec des pdf extérieurs il te faudra Acrobat ( pas le Reader ) ou PDFCreator 1.7.3
voir dans un second temps ici pour une autre appli.
 
Dernière édition:

charleselrahc

XLDnaute Nouveau
Bonjour, merci pour vos réponses.

J'ai déjà une macro me permettant de créer un PDF :

VB:
Dim devis As String
Dim nom_projet As String

ref = Sheets("Calcul").Range("E6")
devis = Sheets("Calcul").Range("E7")
nom_projet = Sheets("Calcul").Range("E5")

            
If Sheets("Calcul").Range("E21") = "4" Then
        Sheets(Array("Page de garde (1)", "CGV (2)", "Offre client (1)", "Schémas 4T")).Select
    Else
        Sheets(Array("Page de garde (1)", "CGV (2)", "Offre client (1)", "Schémas 6T")).Select

End If

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=ThisWorkbook.Path & "\" & ref & "_" & devis & " " & nom_projet & " - " & "Offre de prix.pdf", Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False

Sheets("Offre client (1)").Activate
End Sub

Je souhaite pouvoir sélectionner en plus de cela d'autres feuilles excels qui sont créées automatiquement via une autre macro mais leurs nombre varie et leurs noms aussi. Ces feuilles ont un nom du type "Feuil1", "Feuil2", "Feuil18"...
Je ne souhaite pas les sélectionner manuellement à partir d'une liste mais pouvoir les sortir en PDF dès quelles existent !

Merci d'avance pour vos conseils!
 

charleselrahc

XLDnaute Nouveau
Bonjour Daniel,

Je pensais avoir répondu dans mon précédent message :

- Je souhaite les sélectionner dès qu'elles existent, elles sont crées automatiquement si nécessaire, sinon elles n'existent pas.

- J'entends par " le tout (avec d'autres pages)" que comme tu peux le voir avec mon code, j'exporte déjà des feuilles en PDF, j'aimerais ajouter les feuilles créées automatiquements à la suite.

J'espère avoir été clair.
Merci
 

danielco

XLDnaute Accro
Il serait plus logique que la macro qui crée la feuille gère l'export en PDF. La macro suivante se déclenche à la création d'une nouvelle feuille. Mets-la dans le module ThisWorkbook.

VB:
Private Sub Workbook_NewSheet(ByVal Sh As Object)
  Dim devis As String
  Dim nom_projet As String
 
  ref = Sheets("Calcul").Range("E6")
  devis = Sheets("Calcul").Range("E7")
  nom_projet = Sheets("Calcul").Range("E5")
 
              
  If Sheets("Calcul").Range("E21") = "4" Then
          Sheets(Array(Sh.Name, "Page de garde (1)", "CGV (2)", "Offre client (1)", "Schémas 4T")).Select
      Else
          Sheets(Array(Sh.Name, "Page de garde (1)", "CGV (2)", "Offre client (1)", "Schémas 6T")).Select
 
  End If
 
  ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=ThisWorkbook.Path & "\" & ref & "_" & devis & " " & nom_projet & " - " & "Offre de prix.pdf", Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
 
  Sheets("Offre client (1)").Activate
End Sub

Daniel
 

charleselrahc

XLDnaute Nouveau
Je ne souhaite pas créer un PDF à la création de chaque feuille mais bien avec une commande à part.

Le but étant d'utiliser le fichier excel pour un projet, les feuilles vont se créer et c'est à la toute fin que l'opérateur va pouvoir choisir de créer le PDF.

Pour cela je pense qu'il me faudrait insérer un For dans mon code pour sélectionner les pages une à une mais je ne sais pas comment faire. Est-ce possible de créer quelque chose du genre : For i = "Feuil1" to "FeuilN" ?
 

charleselrahc

XLDnaute Nouveau
Nouvelles depuis que la macro permettant de créer ces feuilles à été utilisé.

VB:
Sub CopyImp()
    If Worksheets("Données du projet").Cells(21, 15).Value = 1 Then
        Sheets("Chaud").Select
        Cells.Copy
        Worksheets.Add.Select
        Cells.PasteSpecial Paste:=xlPasteValues
        Cells.PasteSpecial Paste:=xlPasteFormats
            Sheets("Données du projet").Activate
    Else
   
    If Worksheets("Données du projet").Cells(21, 15).Value = 2 Then
        Sheets("Chaud").Select
        Cells.Copy
        Worksheets.Add.Select
        Cells.PasteSpecial Paste:=xlPasteValues
        Cells.PasteSpecial Paste:=xlPasteFormats
        Sheets("Froid").Select
        Cells.Copy
        Worksheets.Add.Select
        Cells.PasteSpecial Paste:=xlPasteValues
        Cells.PasteSpecial Paste:=xlPasteFormats
            Sheets("Données du projet").Activate
   
    Else
   
    MsgBox ("   ")
   
    End If
    End If
       
End Sub
 

danielco

XLDnaute Accro
Ca implique de conserver la trace des feuilles existantes avant l'exécution de cette macro. Donc, celle-ci doit les lister sur une feuille et enregistrer le classeur afin que, si le classeur est fermé, on sache quelles étaient les feuilles déjà exportées. Es-tu d'accord ?

Daniel
 

danielco

XLDnaute Accro
Non testé :

VB:
Sub test()


Dim devis As String
Dim nom_projet As String
Dim Tabl() As String
Dim Sh As Worksheet
Dim I As Integer

ref = Sheets("Calcul").Range("E6")
devis = Sheets("Calcul").Range("E7")
nom_projet = Sheets("Calcul").Range("E5")
I = -1
For Each Sh In Sheets
  If Left(Sh.Name, 5) = "Feuil" Then
    I = I + 1
    ReDim Preserve Tabl(I)
    Tabl(I) = Sh.Name
  End If
Next Sh
I = I + 1
ReDim Preserve Tabl(I)
Tabl(I) = Sheets("Page de garde (1)")
I = I + 1
ReDim Preserve Tabl(I)
Tabl(I) = Sheets("CGV (2)")
I = I + 1
ReDim Preserve Tabl(I)
Tabl(I) = Sheets("Offre client (1)")
I = I + 1
ReDim Preserve Tabl(I)
Tabl(I) = Sheets("Schémas " & Sheets("Calcul").Range("E21").Value & "T")

Sheets(Tabl).ExportAsFixedFormat Type:=xlTypePDF, Filename:=ThisWorkbook.Path & "\" & ref & "_" & devis & " " & nom_projet & " - " & "Offre de prix.pdf", Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False

Sheets("Offre client (1)").Activate
End Sub

Daniel
 

Discussions similaires

Statistiques des forums

Discussions
315 146
Messages
2 116 762
Membres
112 853
dernier inscrit
cedricmarie