ShellExecute pour ouvrir un PDF [Résolu]

drogba28 13 Messages postés mardi 28 septembre 2004Date d'inscription 30 mars 2011 Dernière intervention - 30 mars 2009 à 12:50 - Dernière réponse : drogba28 13 Messages postés mardi 28 septembre 2004Date d'inscription 30 mars 2011 Dernière intervention
- 31 mars 2009 à 13:27
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
Afficher la suite 

Votre réponse

12 réponses

Meilleure réponse
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 31 mars 2009 à 13:17
3
Merci
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


----------

Merci Renfield 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de Renfield
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 30 mars 2009 à 13:22
0
Merci
à 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
Commenter la réponse de Renfield
drogba28 13 Messages postés mardi 28 septembre 2004Date d'inscription 30 mars 2011 Dernière intervention - 30 mars 2009 à 13:33
0
Merci
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
Commenter la réponse de drogba28
drogba28 13 Messages postés mardi 28 septembre 2004Date d'inscription 30 mars 2011 Dernière intervention - 30 mars 2009 à 13:52
0
Merci
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...
Commenter la réponse de drogba28
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 30 mars 2009 à 14:09
0
Merci
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
Commenter la réponse de Renfield
drogba28 13 Messages postés mardi 28 septembre 2004Date d'inscription 30 mars 2011 Dernière intervention - 31 mars 2009 à 11:45
0
Merci
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...
Commenter la réponse de drogba28
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 31 mars 2009 à 11:51
0
Merci
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)
Commenter la réponse de Renfield
drogba28 13 Messages postés mardi 28 septembre 2004Date d'inscription 30 mars 2011 Dernière intervention - 31 mars 2009 à 12:35
0
Merci
Donc je dois utiliser quel code sachant que je souhaite garder le chemin relatif?
Commenter la réponse de drogba28
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 31 mars 2009 à 12:37
0
Merci
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"
Commenter la réponse de Renfield
drogba28 13 Messages postés mardi 28 septembre 2004Date d'inscription 30 mars 2011 Dernière intervention - 31 mars 2009 à 12:46
0
Merci
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
Commenter la réponse de drogba28
drogba28 13 Messages postés mardi 28 septembre 2004Date d'inscription 30 mars 2011 Dernière intervention - 31 mars 2009 à 12:51
0
Merci
Désolé, je suis perdu avec tout ce code...
Commenter la réponse de drogba28
drogba28 13 Messages postés mardi 28 septembre 2004Date d'inscription 30 mars 2011 Dernière intervention - 31 mars 2009 à 13:27
0
Merci
Merci beaucoup pour ta patience et tes explications, ça marche impeccablement.

Tu me sauve, j'étais vraiment bloqué

Bonne journée
Commenter la réponse de drogba28

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.