Noms de fichiers pdf dynamiques

Bonjour à tous,

En me basant sur le code décrit sur la page "save-each-page-break-as-seperate-pdf.913811/" du site Mr Excel, je parviens à extraire chacune des 35 pages de ma feuille Excel sur la base des sauts de page verticaux.

J'ai réussi à adapter le code initialement prévu pour les sauts de page horizontaux mais bloque sur le nommage automatique des fichiers.

Chaque nom de fichier doit comporter le nom d'une personne situé en I3 sur la première page, en Q3 sur la deuxième, en Z3 sur la troisième... et ainsi de suite. En résumé la ligne reste la même mais la colonne varie, ce que j'essaie de définir avec la variable "Columnwithname" ci-dessous, sur la base du "Rwstart" du code plus haut. Voici ma tentative:

Sub exportPages()

Set Sht = Worksheets("Relevé mensuel")
' The variable Sht now holds the sheet that should be printed, so we can use that in the macro instead of repeating Worksheets("Sheet1")
ExportDir = "C:\Users\****\Desktop\Data\*****"
' A string/text with the export directory, should end with a \
NrPages = Sht.VPageBreaks.Count + 1
' Using the Sht object, count the number of horizontal page breaks and add one to know the number of pages

For p = 1 To NrPages
    ' Loop though the pages, actually the loop is only there as a kind of "counter"
    If p = 1 Then
        Columnwithname = Columns("I")
        ' The first page starts at the top and has no page break before it, so the column with your name is I
    Else
        Columnwithname = Sht.VPageBreaks(p - 1).Location.Column
        ' Page 2 starts after Pagebreak 1, this code finds the column of the page break (=the column directly after it)
    End If

    FoundName = Sht.Range(Cells(3, "Columnwithname")).Value
    ExportName = FoundName & "_" & p & ".pdf"
    ' Create a variable with the name in the sheet

    Sht.ExportAsFixedFormat Type:=xlTypePDF, Filename:=ExportDir & ExportName, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, From:=p, to:=p, OpenAfterPublish:=False
    ' Export the current page with the current name to the default location
Next

Set Sht = Nothing
' Clean up variables

End Sub

Le problème se situe là:

FoundName = Sht.Range(Cells(3, "Columnwithname")).Value

Je n'arrive pas à trouver la syntaxe pour donner l'instruction: dans "Columnwithname" récupérer la valeur de la ligne 3. J'ai également essayé:

FoundName = Sht.Range(Columnwithname & Rows(3)).Value
FoundName = Sht.Range(Columnwithname (3,1)).Value

Je sens pourtant que je ne suis pas loin, je vois bien le nom que je cherche en "Columnwithname (3, 1)"

capture

J'espère qu'il ne s'agit que d'un petit problème de syntaxe!

Si vous avez besoin de plus d'infos, n'hésitez pas.

Par avance merci,

K

Re!

J'ai essayé de trouver la solution tout seul ces 3 derniers jours...mais je m'arrache les cheveux!

Est-ce qu'une version anonymisée de ma feuille vous permettrait de m'aider plus facilement?

Je l'espère:

15sample.xlsm (27.72 Ko)

Bien à vous,
K

Bonjour et

Merci d'avoir joint un fichier qui permet effectivement de mieux comprendre la problématique

Et voici le code

Option Explicit

Sub exportPages()
  Dim Col As Long, NrPages As Integer, P As Integer
  Dim CellWithName As String
  Dim ExportDir As String, ExportName As String
  Dim Sht As Worksheet
  ' Définir la feuille du traitement
  Set Sht = Worksheets("Relevé mensuel")
  ' Définir le chemin d'enregistrement
  ExportDir = "Z:\"
  ' Nombre de page de l'impression
  NrPages = Sht.VPageBreaks.Count + 1
  ' Dernière colonne de la première page
  Col = Range("I1").Column
  ' Poour chaque page
  For P = 1 To NrPages
    ' Calculer la position de la cellule avec le nom
    CellWithName = Sht.Cells(3, (P * Col) - 1)
    ' Définir le nom duy fichier
    ExportName = "Relevé" & CellWithName & "_" & P & ".pdf"
    ' Exporter la page avec le nom définit
    Sht.ExportAsFixedFormat Type:=xlTypePDF, Filename:=ExportDir & ExportName, Quality:=xlQualityStandard, _
      IncludeDocProperties:=True, IgnorePrintAreas:=False, From:=P, To:=P, OpenAfterPublish:=False
  Next
  ' Effacer al variable objet pour libérer la mémoire
  Set Sht = Nothing
End Sub

Attention !
Le premier prénom n'est pas à la bonne place, dans la cellule I3 au lieu de H3 fusionnée

@+

Bonsoir,

Merci infiniment! C'est beau, ça marche !

Si je comprends bien:

 Col = Range("I1").Column

Veut dire: " "Col",la dernière colonne de la 1ère page, est la colonne ayant pour première cellule "I1" "

Et

CellWithName = Sht.Cells(3, (P * Col) - 1)

Veut dire: "la cellule avec le nom est en ligne 3 de la dernière colonne de la page - 1, donc l'avant dernière colonne.

Mais "*" c'est l'opérateur de multiplication non? Tu pourrais m'expliquer comment fonctionne (P * Col) ?

Bonne soirée!

K

Bonjour

Si je comprends bien:

 Col = Range("I1").Column

Veut dire: " "Col",la dernière colonne de la 1ère page, est la colonne ayant pour première cellule "I1" "

Oui, si on veut
Je définit simplement le numéro de colonne de la cellule "I1"

CellWithName = Sht.Cells(3, (P * Col) - 1)

Veut dire: "la cellule avec le nom est en ligne 3 de la dernière colonne de la page - 1, donc l'avant dernière colonne.

Mais "*" c'est l'opérateur de multiplication non? Tu pourrais m'expliquer comment fonctionne (P * Col) ?

vous savez calculer

L'utilisation de l'instruction "debug.print (P * Col) - 1" vous en dira plus

Bonsoir,

L'utilisation de l'instruction "debug.print (P * Col) - 1" vous en dira plus

Je vais essayer ça.

Merci encore et bonne continuation!

Rechercher des sujets similaires à "noms fichiers pdf dynamiques"