Indiquer dans une feuille PDF le nom qu'elle porte en haut à droite VBA

Bonjour,

J'ai dans un dossier plusieurs PDF, quans je saisis chaque document je lui donne un numéro exemple 350 608 703 etc ensuite dans le PDF je renomme pareil 350 608 703 en haut à droite ou il y a riend d'écrit dans le PDF.

Je voudrais savoir si en VBA il est possible de lancer une MACRO qui indiquerait dans chaque page de PDF, le nom que le PDF porte

J'ai trouver cette macro mais cela ne fonctionne pas, peux être c'est tout simplement pas bon dés le départ

Sub AjouterNomFichierAuPDF()
    Dim NomFichier As String
    Dim CheminPDF As String
    Dim AppPDF As Object
    Dim Page As Object
    Dim Texte As Object

    ' Récupérez le chemin du fichier PDF
    CheminPDF = ThisWorkbook.Path & "\" & "C:\Users\maver\Desktop\TEST"

    ' Récupérez le nom du fichier PDF
    NomFichier = Left(ThisWorkbook.Name, InStrRev(ThisWorkbook.Name, ".") - 1)

    ' Ouvrez le fichier PDF
    Set AppPDF = CreateObject("AcroExch.App")
    AppPDF.Hide
    AppPDF.Open (CheminPDF)

    ' Accédez à la première page du PDF
    Set Page = AppPDF.GetActiveDoc.GetAVPageView.GetPage(0)

    ' Créez un objet texte pour afficher le nom du fichier
    Set Texte = Page.CreateTextAnnotation
    Texte.Rect = Array(500, 700, 600, 750)  ' Coordonnées pour placer le texte en haut à droite
    Texte.Contents = NomFichier

    ' Enregistrez et fermez le PDF
    AppPDF.GetActiveDoc.Save 1, CheminPDF
    AppPDF.Exit

    ' Libérez les objets
    Set Texte = Nothing
    Set Page = Nothing
    Set AppPDF = Nothing
End Sub

Merci d'avance pour votre aide

Salut,

CheminPDF = ThisWorkbook.Path & "\" & "C:\Users\maver\Desktop\TEST"

Ici tu as déjà une erreur, soit tu récupère le chemin de ton classeur, soit tu le met en dur mais pas les deux.

Donc le code devrait ressembler à ceci :

Sub AjouterNomFichierAuPDF(Optional ByVal FullName As String)
    Dim FileName As String
    Dim PathTemp As String
    Dim AppPDF As Object
    Dim Page As Object
    Dim Texte As Object

    If FullName = vbNullString Then
        ' // on reconstruit le nom de fichier
        FileName = Left(ThisWorkbook.Name, InStrRev(ThisWorkbook.Name, ".") - 1) & ".pdf"
        PathTemp = ThisWorkbook.Path & IIf(Right$(ThisWorkbook.Path, 1) <> "\", "\", vbNullString)
        FullName = PathTemp & FileName
    End If
    If Dir(FullName, vbNormal) > vbNullString Then
        Set AppPDF = CreateObject("AcroExch.App")
        AppPDF.Hide
        AppPDF.Open (FullName)

        ' Accédez à la première page du PDF
        Set Page = AppPDF.GetActiveDoc.GetAVPageView.GetPage(0)

        ' Créez un objet texte pour afficher le nom du fichier
        Set Texte = Page.CreateTextAnnotation
        Texte.Rect = Array(500, 700, 600, 750)   ' Coordonnées pour placer le texte en haut à droite
        Texte.Contents = FileName

        ' Enregistrez et fermez le PDF
        AppPDF.GetActiveDoc.Save 1, PathTemp
        AppPDF.Exit
    Else
        MsgBox "Oupss... nous n'avons pas trouvé " & FullName & " peut être l'avez-vous déplacé ou supprimé ?"
    End If
    ' Libérez les objets
    If Not Texte Is Nothing Then Set Texte = Nothing
    If Not Page Is Nothing Then Set Page = Nothing
    If Not AppPDF Is Nothing Then Set AppPDF = Nothing
End Sub

Maintenant si les Pdf proviennent des feuilles de ton classeur il doit être plus simple de modifier les feuilles avant leur export.

Acrobat est un logiciel payant, je ne sais pas si cela peut fonctionner...

Bonjour,

Mes fichier PDF sont dans un dossier et j'utilise ADOBE ACROBAT 10.0

Je voudrais que le chemin soit dans la macro directement

J'ai essayer avec le code suivant et rien ne se passe mon fichier PDF quand je l'ouvre il n'es pas renommés

Sub AjouterNomFichierAuPDF(Optional ByVal FullName As String)
    Dim FileName As String
    Dim PathTemp As String
    Dim AppPDF As Object
    Dim Page As Object
    Dim Texte As Object

    If FullName = vbNullString Then
        ' // on reconstruit le nom de fichier
        FileName = Left(ThisWorkbook.Name, InStrRev(ThisWorkbook.Name, ".") - 1) & ".pdf"
        PathTemp = ThisWorkbook.Path & IIf(Right$(ThisWorkbook.Path, 1) <> "\", "\", vbNullString)
        FullName = PathTemp & FileName
    End If
    If Dir(FullName, vbNormal) > vbNullString Then
        Set AppPDF = CreateObject("AcroExch.App")
        AppPDF.Hide
        AppPDF.Open (FullName)

        ' Accédez à la première page du PDF
        Set Page = AppPDF.GetActiveDoc.GetAVPageView.GetPage(0)

        ' Créez un objet texte pour afficher le nom du fichier
        Set Texte = Page.CreateTextAnnotation
        Texte.Rect = Array(500, 700, 600, 750)   ' Coordonnées pour placer le texte en haut à droite
        Texte.Contents = FileName

        ' Enregistrez et fermez le PDF
        AppPDF.GetActiveDoc.Save 1, PathTemp
        AppPDF.Exit
    Else
        MsgBox "Oupss... nous n'avons pas trouvé " & FullName & " peut être l'avez-vous déplacé ou supprimé ?"
    End If
    ' Libérez les objets
    If Not Texte Is Nothing Then Set Texte = Nothing
    If Not Page Is Nothing Then Set Page = Nothing
    If Not AppPDF Is Nothing Then Set AppPDF = Nothing
End Sub

peux-être j'ai oublié quelque chose, dans référence j'ai bien cocher adobe acrobat pourtant ou peux-etre le nom du fichier doit être mis dans le code

en tt cas la rien ne se passe merci pour votre aide

Cordialement,

Salut,

N'ayant pas personnellement Adobe, je ne peux pas faire de test.

Je te conseille de mettre un point d'arrêt sur : If FullName = vbNullString Then ensuite tu colles un espion sur AppPdf ceci fait il ne te reste qu'à faire du pas à pas pour visualiser si tout se passe bien, et regarder si AppPdf n'est pas à Nothing.

Comment lances-tu la procédure AjouterNomFichierAuPDF ?

Bonjour,

Je ne sais pas mettre un espion et que veux tu dire par mettre un point d'arrêt

Pour lancer la procédure j'appui sur lancer la macro

La j'ai un pb voir image si dessous, je ne comprend pas ce qu'il me demande j'ai pas le nom de la macro

capture d ecran 2023 12 31 122003

Cordialement,

Salut,

Tu as ce message car Excel ne reconnait aucune macro que tu puisse lancer.

1er test : sur une macro de ce type sans paramètres :

Public Sub Test1()
'...
'...
'...
End Sub

Si tu met le curseur à l'intérieur et que tu appuis sur F5 ou F8 Excel va lancer la sub en pas à pas si F8 en mode normal si F5.

Maintenant si la procédure contient un paramètre comme ci-dessous Excel ne la lancera pas puisqu'il ne connait pas la valeur du paramètre.

Public Sub Test2 (Byval Value as String)
Value = Value * 2
End Sub

Il te faut alors passer par exemple par la fenêtre d'execution pour l'exécuter.

Concernant Le point d'arrêt c'est avec la touche F9 ou bien en cliquant sur le coté sur une ligne exécutable, donc par sur un Dim etc...

000361

Un fois le point d'arrêt mis en place si tu lances la procédure Excel va s'arrêter sur le point d'arrêt cela te permet de pouvoir visualiser l'état de certaines variables sur l'exemple ci-dessous en passant le curseur sur ColorIndex je vois sa valeur.

000362

Pour ajouter un espion c'est un peu pareil tu sélectionnes une variable par exemple .Weight dans mon exemple tu la met en surbrillance et tu va dans le menu Débogage puis Ajouter un espion tu confirmes il s'ajoute dans la fenêtre des espions.

Dans ton cas il serait bien d'ajouter AppPdf aux espions puis de mettre un point d'arrêt sur If FullName = vbNullString Then et de lancer la macro ensuite tu fais du pas à pas avec F8 et tu vérifie la valeur de tes variables. Si Excel n'a pas pu instancier AppPdf elle sera à Nothing.

Dans l'exemple ci-dessous je lance un commande bidon et tu vois que dans la fenêtre d'espions lstR est égal = Nothing

000364

Ce sont les bases de la programmation et je te conseille fortement de lire quelques sujets, et ne pas partir tête baissée dans l'écriture de code.

Bonjour

Merci pour tes conseils

J'ai mis cela comme MACRO et je la trouve quand je l'exécute par contre il met qu'il y a un problème sur la ligne

"If Dir(FullName, vbNormal) > vbNullString Then" il me la met en jaune

Sub AjouterNomFichierAuPDF()
    Dim FileName As String
    Dim PathTemp As String
    Dim AppPDF As Object
    Dim Page As Object
    Dim Texte As Object

    If FullName = vbNullString Then
        ' // on reconstruit le nom de fichier
        FileName = Left(ThisWorkbook.Name, InStrRev(ThisWorkbook.Name, ".") - 1) & ".pdf"
        PathTemp = ThisWorkbook.Path & IIf(Right$(ThisWorkbook.Path, 1) <> "\", "\", vbNullString)
        FullName = PathTemp & FileName
    End If
    If Dir(FullName, vbNormal) > vbNullString Then
        Set AppPDF = CreateObject("AcroExch.App")
        AppPDF.Hide
        AppPDF.Open (FullName)

        ' Accédez à la première page du PDF
        Set Page = AppPDF.GetActiveDoc.GetAVPageView.GetPage(0)

        ' Créez un objet texte pour afficher le nom du fichier
        Set Texte = Page.CreateTextAnnotation
        Texte.Rect = Array(500, 700, 600, 750)   ' Coordonnées pour placer le texte en haut à droite
        Texte.Contents = FileName

        ' Enregistrez et fermez le PDF
        AppPDF.GetActiveDoc.Save 1, PathTemp
        AppPDF.Exit
    Else
        MsgBox "Oupss... nous n'avons pas trouvé " & FullName & " peut être l'avez-vous déplacé ou supprimé ?"
    End If
    ' Libérez les objets
    If Not Texte Is Nothing Then Set Texte = Nothing
    If Not Page Is Nothing Then Set Page = Nothing
    If Not AppPDF Is Nothing Then Set AppPDF = Nothing
End Sub

Salut,

N'étant pas devin. Tu as quoi comme message d'erreur ?

Je pense que la valeur de FullName n'est pas encore bonne. Regarde à quoi elle correspond. au moment de l'erreur.

Bonjour,

Oui j'ai une fenêtre qui s'ouvre et me dit

erreur d'exécution 52

Nom ou numéro de fichier incorrect

Cordialement,

Re,

Met un point d'arrêt sur la lige qui plante et regarde la valeur de FullName à mon avis c'est pas bon.

Ajoute un Debug.Print pour voir

Sub AjouterNomFichierAuPDF()
    Dim FileName As String
    Dim PathTemp As String
    Dim AppPDF As Object
    Dim Page As Object
    Dim Texte As Object

    If FullName = vbNullString Then
        ' // on reconstruit le nom de fichier
        FileName = Left(ThisWorkbook.Name, InStrRev(ThisWorkbook.Name, ".") - 1) & ".pdf"
        PathTemp = ThisWorkbook.Path & IIf(Right$(ThisWorkbook.Path, 1) <> "\", "\", vbNullString)
        FullName = PathTemp & FileName
    End If

    ' // Ajoute un Debug.print
    Debug.Print FullName

    If Dir(FullName, vbNormal) > vbNullString Then
        Set AppPDF = CreateObject("AcroExch.App")
        AppPDF.Hide
        AppPDF.Open (FullName)

        ' Accédez à la première page du PDF
        Set Page = AppPDF.GetActiveDoc.GetAVPageView.GetPage(0)

        ' Créez un objet texte pour afficher le nom du fichier
        Set Texte = Page.CreateTextAnnotation
        Texte.Rect = Array(500, 700, 600, 750)   ' Coordonnées pour placer le texte en haut à droite
        Texte.Contents = FileName

        ' Enregistrez et fermez le PDF
        AppPDF.GetActiveDoc.Save 1, PathTemp
        AppPDF.Exit
    Else
        MsgBox "Oupss... nous n'avons pas trouvé " & FullName & " peut être l'avez-vous déplacé ou supprimé ?"
    End If
    ' Libérez les objets
    If Not Texte Is Nothing Then Set Texte = Nothing
    If Not Page Is Nothing Then Set Page = Nothing
    If Not AppPDF Is Nothing Then Set AppPDF = Nothing
End Sub

Bonjour,

Merci mais j'ai la même chose toujours la même erreur

Après si c'est pas possible je le ferais à la main au pire

Cordialement,

Bonjour,

Le fait que mon fichier PDF est sur onedrive cela n'est pas un problème pour la macro

Je ne pense pas mais bon

Cordialement,

Re,

Tu ne montre pas à quoi resemble le chemin, donc difficile de te répondre...

Bonjour,

Voici le fichier dessus j'ai indiqué le chemin dans ce chemin j'ai mes fichiers PDF

En réalité quand je lance la macro alors elle devrait écrire dans chaque fichier PDF le nom qu'il porte

Cordialement,

18rename-pdf.xlsm (17.85 Ko)
Rechercher des sujets similaires à "indiquer feuille pdf nom porte haut droite vba"