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 SubLe problème se situe là:
FoundName = Sht.Range(Cells(3, "Columnwithname")).ValueJe 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)).ValueFoundName = Sht.Range(Columnwithname (3,1)).ValueJe sens pourtant que je ne suis pas loin, je vois bien le nom que je cherche en "Columnwithname (3, 1)"
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:
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 SubAttention !
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").ColumnVeut 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").ColumnVeut 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) ?
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!