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 SubMerci 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 SubMaintenant 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 Subpeux-ê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 ?
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 SubSi 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 SubIl 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...
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.
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
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 SubSalut,
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 SubBonjour,
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,
