IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

[VBA] Ouverture d'un fichier PDF à une page précise


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 4
    Points : 3
    Points
    3
    Par défaut [VBA] Ouverture d'un fichier PDF à une page précise
    Bonjour à tous,
    Je travaille actuellement sur un fichier Excel doté d'une macro qui a pour but de simplifier l'accès à certaines données. Cette dernière doit entre autres permettre l'ouverture d'un fichier PDF à une page précise.
    J'ai déjà un code qui permet l'ouverture de fichiers PDF, qui voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            y = "cmd /c start acrord32.exe /A page=" & Target & " " & chemincdc
            x = Shell(y, vbNormalFocus)
            Workbooks(nomfichiersource).Close
    -chemincdc est une variable texte (string), correspondant à l'emplacement du fichier à ouvrir
    -page est une variable de type integer correspondant au numéro de la page

    Ce code fonctionne, mais je rencontre cependant un problème. La macro étant vouée à être utilisée par plusieurs personnes sur plusieurs postes, les version d'Acrobat Reader de ces postes peuvent changer. Or ce code ne fonctionne que pour les versions 6.0 (à vérifier), auriez-vous une solution qui permettrait d'ouvrir un fichier PDF peu importe la version d'Acrobat Reader se trouvant sur le pc ?

    J'avais pensé à un code recherchant l'exécutable selon la version, mais je ne parviens pas à le mettre en oeuvre.

    Bien cordialement et merci d'avance,
    Jambon_beurre
    EDIT : merci d'avoir déplacé le sujet, je n'avais pas vu cette rubrique du forum, au temps pour moi.

  2. #2
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Points : 2 553
    Points
    2 553
    Par défaut
    Sujet très commun.

    Il te suffit de repérer les chemins possibles pour tes versions et de mettre un if en testant l'existance du dit dossier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub OuvrirPDF2(ByVal sFichier As String, numPage As Long)
    Dim WshShell As Object, PDFExec As Object
    Dim CheminReader As String, CheminPDF As String
     
        CheminReader = "C:\Program Files\Adobe\Reader 9.0\Reader\acrord32.exe"
        CheminPDF = sFichier
     
        Set WshShell = CreateObject("WScript.Shell")
        Set PDFExec = WshShell.Exec(CheminReader & " /a page=" & numPage & "=OpenActions " & CheminPDF)
     
        Set PDFExec = Nothing
        Set WshShell = Nothing
     
    End Sub

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    J'y avais déjà pensé, mais ta solution nécessite de connaître l'emplacement de l'exécutable Acrobat ainsi que son nom, ce qui n'est pas le cas pour moi (pour mon poste, ce n'est pas un problème, mais pour les autres si).
    C'est en effet commun, mais pas si évident que ça.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Une astuce en utilisant l'API Windows:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Option Explicit
     
    Private Declare Function FindExecutable Lib "shell32.dll" Alias "FindExecutableA" _
    (ByVal lpFile As String, ByVal lpDirectory As String, ByVal lpResult As String) As Long
     
    Private Sub OuvrirPdf()
     
      Dim strAcroPath As String, strFichier As String
      Dim intPage As Integer
     
      strAcroPath = String(128, 32)
      strFichier = "" 'A COMPLETER
      intPage = 5 'A COMPLETER
     
      If FindExecutable(strFichier, vbNullString, strAcroPath) <= 32 Then
        MsgBox "Adobe Acrobat Reader n'a pas été trouvé sur cet ordinateur", vbOKOnly + vbCritical, "Message d'erreur"
      Else
        strAcroPath = Left$(strAcroPath, InStr(strAcroPath, Chr$(0)) - 1)
        Shell strAcroPath & " /a page=" & intPage & " " & strFichier, vbNormalFocus
      End If
     
    End Sub

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup, ça fonctionne parfaitement.
    Par contre j'ai du mal à comprendre quoi fait quoi, enfin surtout la fonction FindExecutable, ce qu'elle retourne et le strAcroPath = String(128, 32).
    Serait-il possible d'avoir des explications et/ou un tuto sur le sujet (j'aimerais bien être capable de le faire moi-même par la suite) ?
    Merci d'avance

  6. #6
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Points : 2 553
    Points
    2 553
    Par défaut
    Pour un portabilité 64 bits:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Private Declare Ptrsafe Function FindExecutable Lib "shell32.dll" Alias "FindExecutableA" _
    (ByVal lpFile As String, ByVal lpDirectory As String, ByVal lpResult As String) As Long

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    En fait, google m'a aidé à trouver ce que je cherchais. Merci pour le coup de pouce !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 31/01/2015, 00h26
  2. [XL-2003] Ouvrir un pdf à une page précise depuis une base documentaire sur serveur
    Par vergezzois dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/02/2013, 18h59
  3. [XL-2003] Ouvrir un fichier pdf à une page précise
    Par dlight dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/02/2011, 16h43
  4. [AC-2000] ouverture d'un fichier PDF via VBA
    Par etoileetoile dans le forum VBA Access
    Réponses: 5
    Dernier message: 08/10/2009, 21h06
  5. Ouverture d'un PDF sur une page précise fonctionne de façon aléatoire
    Par cahnory dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 31/08/2009, 09h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo