ShellExecute pour ouvrir un PDF [Résolu]

Signaler
Messages postés
13
Date d'inscription
mardi 28 septembre 2004
Statut
Membre
Dernière intervention
30 mars 2011
-
Messages postés
13
Date d'inscription
mardi 28 septembre 2004
Statut
Membre
Dernière intervention
30 mars 2011
-
Bonjour,



<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
 




Je débute sur Vb et j’ai un petit problème pour un code.


Je souhaite à l’aide d’un bouton ouvrir un PDF en chemin relatif sur une page précise.



 




J’utilise le code ci-dessous qui fonctionne très bien mais il me manque juste la partie du code pour préciser la page que je souhaite ouvrir.



 




Private Sub CommandButton2_Click()



   



  Dim hwnd As Long



  ShellExecute hwnd, "open", ActiveWorkbook.Path & "\agriculture-gda08.pdf", "", "", 1



 




Exit Sub


End sub

Merci

12 réponses

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
65
CommandButton2_Click est une procédure appelée automatiquement lorsque l'on clique sur le bouton nommé CommandButton2

si tu t'amuses a modifier ses parametres, VBA va se perdre.
----------

ces lignes sont a placer dans la partie déclaration (tout en haut) du code de ta form:

Private Declare Function FindExecutable Lib "shell32.dll" Alias "FindExecutableA" (ByVal lpFile As String, ByVal lpDirectory As String, ByVal lpResult As String) As Long
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

----------------
Cette fonction est a coller telle quelle:


Private Sub OpenPDF(ByRef vsFilePath As String, Optional ByVal vnPage As Long = 1)
Dim sBuffer As String
Dim nLength As Long
sBuffer = Space$(260)
nLength = FindExecutable(vsFilePath, vbNullString, sBuffer)
If nLength Then
nLength = InStr(sBuffer, vbNullChar)
If nLength Then
sBuffer = Left$(sBuffer, nLength - 1)
ShellExecute 0&, "open", sBuffer, "/A page=" & Trim$(Str$(vnPage)) & " """ & vsFilePath & """", vbNullString, 1
End If
End If
End Sub


---------------
Enfin, pour ouvrir le PDF, il te suffit d'appeler la fonction OpenPDF en lui spécifiant le chemindu document a ouvrir :


OpenPDF ActiveWorkbook.Path & "\Fiche PFE\Conseil Général\agriculture-gda08.pdf", 40

ainsi, pour effectuer le chargement lors d'un click sur le bouton2:

Private sub CommandButton2_Click ()
OpenPDF ActiveWorkbook.Path & "\Fiche PFE\Conseil Général\agriculture-gda08.pdf", 40
End Sub


----------
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
65
à quoi te sert ici ton hWnd ? pour faire joli ?
le Exit Sub aussi ?

suffisais de chercher un brin ^^

http://www.codyx.org/snippet_ouvrir-fichier-pdf-page-precise_561.aspx

en gros, ajouter /A page=12
pour ouvrir en page 12.

reprenons, donc:

Private Sub CommandButton2_Click()
ShellExecute 0&, "open", ActiveWorkbook.Path & "\agriculture-gda08.pdf", "/A page=3", vbNullString, 1
End sub
Messages postés
13
Date d'inscription
mardi 28 septembre 2004
Statut
Membre
Dernière intervention
30 mars 2011

Un grand merci à toi!

J'essairai ton code ce soir, mais il me semblait avoir déjà essayé en mettant "/A page=3".

Merci pour ta réactivité.

Bye
Messages postés
13
Date d'inscription
mardi 28 septembre 2004
Statut
Membre
Dernière intervention
30 mars 2011

Re,

C'est bien ce qu'il me semblait; quand j'utilise ton code et lorsque j'appuie sur le bouton rien ne se passe. Le pdf ne s'ouvre même plus...
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
65
j'ai mal lu la source dont je t'ai passé le lien, a savoir:

http://www.codyx.org/snippet_ouvrir-fichier-pdf-page-precise_561.aspx

le /A page=xx est a placer avant le nom du PDF à ouvrir...


Private Declare Function FindExecutable Lib "shell32.dll" Alias "FindExecutableA" (ByVal lpFile As String, ByVal lpDirectory As String, ByVal lpResult As String) As Long
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Private Sub OpenPDF(ByRef vsFilePath As String, Optional ByVal vnPage As Long = 1)
Dim sBuffer As String
Dim nLength As Long
sBuffer = Space$(260)
nLength = FindExecutable(vsFilePath, vbNullString, sBuffer)
If nLength Then
nLength = InStr(sBuffer, vbNullChar)
If nLength Then
sBuffer = Left$(sBuffer, nLength - 1)
ShellExecute 0&, "open", sBuffer, "/A page=" & Trim$(Str$(vnPage)) & " """ & vsFilePath & """", vbNullString, 1
End If
End If
End Sub

Private Sub Form_Load()
OpenPDF "H:\Data\Doc\Win32 Core API.pdf", 40
End Sub
Messages postés
13
Date d'inscription
mardi 28 septembre 2004
Statut
Membre
Dernière intervention
30 mars 2011

Bonjour,

tu veux donc dire que le code est :

Private Sub CommandButton2_Click()
   
ShellExecute 0&, "open", "/A page=3", ActiveWorkbook.Path & "\Fiche PFE\Conseil Général\agriculture-gda08.pdf", vbNullString, 1
 
End Sub

Si c'est le cas j'ai déja essayé et ça ne fonctionne pas non plus...
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
65
non, j'ai pas dit ca, et ce serait idiot.

le fichier a executer n'est pas "/A page=3"

ces parametres sont a reserver pour l'executable de Acrobat Reader.

on souhaites executer :

AcroRd32.exe /A page=3 C:\monDossier\MonFichier.pdf

ce que fait le code que je t'ai proposé (le chemin vers AcroRd32 ou tout autre lecteur PDF définit par défaut est retrouvé dynamiquement)
Messages postés
13
Date d'inscription
mardi 28 septembre 2004
Statut
Membre
Dernière intervention
30 mars 2011

Donc je dois utiliser quel code sachant que je souhaite garder le chemin relatif?
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
65
je t'ai filé une fonction permettant d'ouvrir un fichier dont tu files le chemin, et la page.

te suffit alors de faire:

OpenPDF ActiveWorkbook.Path & "\agriculture-gda08.pdf"
Messages postés
13
Date d'inscription
mardi 28 septembre 2004
Statut
Membre
Dernière intervention
30 mars 2011

Re, j'ai fais ce code

Private Sub CommandButton2_Click(ByRef vsFilePath As String, Optional ByVal vnPage As Long = 1)
   
  Dim sBuffer As String
Dim nLength As Long
    sBuffer = Space$(260)
    nLength = FindExecutable( vsFilePath, vbNullString, sBuffer)
    If nLength Then
        nLength = InStr(sBuffer, vbNullChar)
        If nLength Then
            sBuffer = Left$(sBuffer, nLength - 1)
            ShellExecute 0&, "open", sBuffer, "/A page=2" & Trim$(Str$(vnPage)) & " """ & vsFilePath & """", vbNullString, 1
        End If
    End If
End Sub


Private Sub Form_Load()
    OpenPDF ActiveWorkbook.Path & "\Fiche PFE\Conseil Général\agriculture-gda08.pdf", 40
End Sub

ce qui apparait en gras n'est pas bon apparement
Messages postés
13
Date d'inscription
mardi 28 septembre 2004
Statut
Membre
Dernière intervention
30 mars 2011

Désolé, je suis perdu avec tout ce code...
Messages postés
13
Date d'inscription
mardi 28 septembre 2004
Statut
Membre
Dernière intervention
30 mars 2011

Merci beaucoup pour ta patience et tes explications, ça marche impeccablement.

Tu me sauve, j'étais vraiment bloqué

Bonne journée