Ouvrir un PDF à une page donnée

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 699 fois - Téléchargée 10 fois

Contenu du snippet

Creer un lien pour ouvrir un PDF à une page donnée. Le lien hypertexte d'Excel, n'ouvre le PDF qu'à la 1ère page, malgrè l'ajout en fin de lien de "#page=3".
Voici un snippet qui va créer un lien dans la colonne A. Une boite de dialogue vous invite à choisir le PDF et ensuite une InputBox vous permet de choisir le numéro de la page à ouvrir.
Il suffit d'aller dans le module de la feuille concernée et de mettre ce code:

Option Explicit
Dim strPath As String
Dim ligne As Long
Dim colonne As Long
Dim page As Long
Dim nom As String
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Application.Intersect(Target, Range("A:A")) Is Nothing Then ' lien dans la colonne A, a adapter
On Error Resume Next
ligne = Target.Row
colonne = Target.Column
If Target.Value = "" Then
Ouvrir
page = InputBox("Entrez le numéro de page", "Choisir Page PDF", "1")
Cells(ligne, colonne + 2) = page
Else
nom = Target.Value 'nom fichier
strPath = Range("B" & ligne).Value 'chemin fichier
page = Range("C" & ligne).Value ' numero page
OuvrirPDF2
End If
End If
End Sub
'choisir pdf
Sub Ouvrir()
Dim intChoice As Integer
'Supprimer tous les autres filtres
Call Application.FileDialog(msoFileDialogOpen).Filters.Clear
'Ajouter un filtre personnalisé
Call Application.FileDialog(msoFileDialogOpen).Filters.Add( _
    "PDF Files Only", "*.pdf")
'faire la boîte de dialogue de fichier visible pour l'utilisateur
intChoice = Application.FileDialog(msoFileDialogOpen).Show
'déterminer quel choix l'utilisateur a fait
If intChoice <> 0 Then
    'obtenir le chemin de fichier sélectionné par l'utilisateur
    strPath = Application.FileDialog( _
        msoFileDialogOpen).SelectedItems(1)
    'le chemin du fichier dans la feuille 1
    Cells(ligne, colonne + 1) = strPath 'chemin fichier pdf
nom = Mid(strPath, InStrRev(strPath, "") + 1)
Cells(ligne, colonne) = nom 'nom pdf
End If
End Sub
'ouvrir pdf à la page exacte
Sub OuvrirPDF2()
Dim WshShell As Object, PDFExec As Object
Dim CheminReader As String
 CheminReader = "C:Program Files (x86)AdobeAcrobat Reader DCReaderAcroRd32.exe" 'adapter le chemin d'Adobe de votre pc
    Set WshShell = CreateObject("WScript.Shell")
    Set PDFExec = WshShell.Exec(CheminReader & " /a page=" & page & "=OpenActions " & strPath)
    Set PDFExec = Nothing
    Set WshShell = Nothing
 End Sub


Nouvelle version:

Option Explicit
Dim strPath As String
Dim ligne As Long
Dim colonne As Long
Dim page As Long
Dim nom As String
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Application.Intersect(Target, Range("A:A")) Is Nothing Then ' lien dans la colonne A, a adapter
On Error Resume Next
ligne = Target.Row
colonne = Target.Column
If Target.Value = "" Then
Ouvrir
page = InputBox("Entrez le numéro de page", "Choisir Page PDF", "1")
Cells(ligne, colonne + 2) = page
Else
nom = Target.Value 'nom fichier
strPath = Range("B" & ligne).Value 'chemin fichier
page = Range("C" & ligne).Value ' numero page
 ThisWorkbook.FollowHyperlink strPath
 SendKeys "+^n" & page & "~"
 SendKeys "{NUMLOCK}"
End If
End If
End Sub
'choisir pdf
Sub Ouvrir()
Dim intChoice As Integer
'Supprimer tous les autres filtres
Call Application.FileDialog(msoFileDialogOpen).Filters.Clear
'Ajouter un filtre personnalisé
Call Application.FileDialog(msoFileDialogOpen).Filters.Add( _
    "PDF Files Only", "*.pdf")
'faire la boîte de dialogue de fichier visible pour l'utilisateur
intChoice = Application.FileDialog(msoFileDialogOpen).Show
'déterminer quel choix l'utilisateur a fait
If intChoice <> 0 Then
    'obtenir le chemin de fichier sélectionné par l'utilisateur
    strPath = Application.FileDialog( _
        msoFileDialogOpen).SelectedItems(1)
    'le chemin du fichier dans la feuille 1
    Cells(ligne, colonne + 1) = strPath 'chemin fichier pdf
nom = Mid(strPath, InStrRev(strPath, "") + 1)
Cells(ligne, colonne) = nom 'nom pdf
End If
End Sub



Bonne programmation

A voir également

Ajouter un commentaire

Commentaires

cs_Le Pivert
Messages postés
6426
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
10 décembre 2019
91 -
Bonjour,

Dans la transcription du code, les antislash sont absents. Il faut lire:


C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe


Pour avoir le chemin, voir ceci de PCPT que je remercie:

http://www.codyx.org/snippet_recuperer-chemin-programme-associe-fichier-apres-son-extension_544.aspx#1708

remplacer ceci:

 '   retour
    If lRet > 32 Then
        GetExePathFileFromExtention = Left$(sBuffer, InStr(sBuffer, vbNullChar) - 1)
          'a ajouter
          Debug.Print GetExePathFileFromExtention
    Else
        GetExePathFileFromExtention = vbNullString
    End If


vous aurez votre chemin dans Execution en bas

J'espere que cette explication vous sera utile!

@+ Le Pivert
cs_Le Pivert
Messages postés
6426
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
10 décembre 2019
91 -
Bonjour,

Voici une nouvelle version, que je n'ai pas pu ajouter au snippet!
A mettre dans le module de la feuille qui recevra les infos.
Au premier double clic les infos sont enregistrées.
Ensuite le double clic sur le nom du PDF l'ouvre à la page souhaitée.

Option Explicit
Dim strPath As String
Dim ligne As Long
Dim colonne As Long
Dim page As Long
Dim nom As String
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Application.Intersect(Target, Range("A:A")) Is Nothing Then ' lien dans la colonne A, a adapter
On Error Resume Next
ligne = Target.Row
colonne = Target.Column
If Target.Value = "" Then
Ouvrir
page = InputBox("Entrez le numéro de page", "Choisir Page PDF", "1")
Cells(ligne, colonne + 2) = page
Else
nom = Target.Value 'nom fichier
strPath = Range("B" & ligne).Value 'chemin fichier
page = Range("C" & ligne).Value ' numero page
 ThisWorkbook.FollowHyperlink strPath
 SendKeys "+^n" & page & "~"
 SendKeys "{NUMLOCK}"
End If
End If
End Sub
'choisir pdf
Sub Ouvrir()
Dim intChoice As Integer
'Supprimer tous les autres filtres
Call Application.FileDialog(msoFileDialogOpen).Filters.Clear
'Ajouter un filtre personnalisé
Call Application.FileDialog(msoFileDialogOpen).Filters.Add( _
    "PDF Files Only", "*.pdf")
'faire la boîte de dialogue de fichier visible pour l'utilisateur
intChoice = Application.FileDialog(msoFileDialogOpen).Show
'déterminer quel choix l'utilisateur a fait
If intChoice <> 0 Then
    'obtenir le chemin de fichier sélectionné par l'utilisateur
    strPath = Application.FileDialog( _
        msoFileDialogOpen).SelectedItems(1)
    'le chemin du fichier dans la feuille 1
    Cells(ligne, colonne + 1) = strPath 'chemin fichier pdf
nom = Mid(strPath, InStrRev(strPath, "\") + 1)
Cells(ligne, colonne) = nom 'nom pdf
End If
End Sub



Voilà, bonne programmation

@+ Le Pivert
jordane45
Messages postés
27005
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 décembre 2019
318 > cs_Le Pivert
Messages postés
6426
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
10 décembre 2019
-
Bonjour,
Si je ne me trompe pas.. la mise à jour a bien été ajoutée.
Par contre j'ai corrigé les balises de code. Il semble que tu ais oublié d'y préciser le LANGAGE.
cs_Le Pivert
Messages postés
6426
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
10 décembre 2019
91 -
Bonjour,
Merci jordane45 pour la mise à jour et la correction.
Problème résolu pour ma part
Cordialement
@+ Le Pivert

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.