Ouvrir un PDF dans UserForm à une page précise

Dull

XLDnaute Barbatruc
Salut le Forum :)

C'est plutôt la dernière partie qui me pose problème "à une page précise"

Je dispose d'un fichier où la BDD est configurée de la façon suivante:

ABCDEFGH
Code
Libellé
HT
TTC
Fournisseur
Type
conditionnement
page
A3210Attache lettre0.250.27Buro StockBureauBoite de 10067

en Double cliquant dans la ColB l'USF s'ouvre bien mais à la 1ère page
ma question:
quel argument à ajouter dans le code

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Set C = Sheets("Feuil1").Columns("B").Find(What:=Target)
If Not C Is Nothing Then Cancel = True: UserForm9.WebBrowser1.Navigate ThisWorkbook.Path & "\" & "8_burostock_cat_2010.pdf": UserForm9.Show 0
End Sub

afin que ça tombe sur la page de la ColH

j'ai lu plusieurs posts ou on pouvait faire cela avec
Code:
".../A page=" & C.Offset(, 8) & " =OpenActions..."
mais impossible de l'intégrer à mon code

Merci pour vos contributions

PS: Fichiers à mettre dans le même dossier

Bonne Journée
 

Pièces jointes

  • 8_burostock_cat_2010.pdf
    940.8 KB · Affichages: 77
  • 8_burostock_cat_2010.pdf
    940.8 KB · Affichages: 91
  • 8_burostock_cat_2010.pdf
    940.8 KB · Affichages: 95
  • WebBrowser1 PDF.xlsm
    22.6 KB · Affichages: 76

john

XLDnaute Impliqué
Re : Ouvrir un PDF dans UserForm à une page précise

Bonjour,
Me suis penché sur ton problème et j'ai trouvé une solution à celui-ci, mais l'ocx utilisé est un shareware, donc il affiche sa "pub" sur ton document.
Ci-dessous le lien où tu peux télécharger l'ocx

Je joins le fichier, j'espère que ça pourra t'aider...
J'ai chercher un ocx d'adobe pour faire pareil, mais je n'en ai pas trouvé...
Bonne journée.
John
 

Pièces jointes

  • 311213d1404978402-ouvrir-un-pdf-dans-userform-une-page-precise-webbrowser1-pdf.xlsm
    26.7 KB · Affichages: 73

job75

XLDnaute Barbatruc
Re : Ouvrir un PDF dans UserForm à une page précise

Bonjour Dull, john,

Avec l'envoi de touches après une temporisation d'une seconde :

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
n = Val(Cells(Target.Row, "I"))
If n Then
  Cancel = True
  Application.OnTime Now + 1 / 86400, "Touches" 'temporisation 1 seconde
  UserForm9.WebBrowser1.Navigate ThisWorkbook.Path & "\" & "8_burostock_cat_2010.pdf"
  UserForm9.Show 0
End If
End Sub
Dans Module1 :

Code:
Public n As Byte
Public Const NUMLOCK = &H90
Public Declare Function GetKeyState Lib "User32" (ByVal nVirtKey As Long) As Long
 
Sub Touches()
'si le PDF n'a pas plus de 20 pages
SendKeys "{LEFT 20}{RIGHT " & n - 1 & "}"
Application.OnTime 1, "ActiveNumlock"
End Sub

Sub ActiveNumlock()
'verrouillage du pavé numérique s'il est déverrouillé
If GetKeyState(NUMLOCK) <> 1 Then SendKeys "{NUMLOCK}"
End Sub
En effet sur Excel 2010 l'envoi de touches déverrouille le pavé numérique...

Fichiers joints.

A+
 

Pièces jointes

  • 8_burostock_cat_2010.pdf
    940.8 KB · Affichages: 91
  • 8_burostock_cat_2010.pdf
    940.8 KB · Affichages: 91
  • WebBrowser1 PDF(1).xlsm
    25.8 KB · Affichages: 70
  • 8_burostock_cat_2010.pdf
    940.8 KB · Affichages: 76

job75

XLDnaute Barbatruc
Re : Ouvrir un PDF dans UserForm à une page précise

Re,

En testant mieux je vois qu'une temporisation d'une seconde n'est pas toujours suffisante.

Alors 2 secondes...

Code:
Application.OnTime Now + 2 / 86400, "Touches" 'temporisation 2 secondes
A+
 

Dull

XLDnaute Barbatruc
Re : Ouvrir un PDF dans UserForm à une page précise

Salut john, job75:), le Forum

Tout d'abord Merci de vous êtres penché sur mon problème
John: je n'aime pas trop ajouter des ocx et autre dll qui pourraient poser problèmes sur d'autres applications. Je te remercie tout de même pour ta participation :)

Gérard: Alors comment dire... Même sur le fichier que tu as envoyé le double click m'ouvre l'USF toujours à la 1ère page:confused:.
Alors peut-être ne t'ai-je pas tout dit:eek:

1/ A vrai dire le double clic ne se fait pas sur la feuille mais dans une ListBox
2/ Le catalogue fait 92 pages. J'ai vu où changer le paramètre.

Mais ne vous inquiétez pas c'était juste un plus que je voulais mettre. Je vais garder la solution d'ouvrir directement Adobe qui fonctionne correctement

Code:
Private Sub ListBox2_Click()
Dim Compte As Integer, C As Range
Dim sPDFfile As String, sAdobeCommand As String
Const cAdobeReaderExe As String = "C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe"
TextBox4 = ListBox2.Column(3)
If Compte = 0 Then
    CommandButton4.Enabled = True
    CommandButton1.Enabled = True
    CommandButton5.Enabled = True
End If
If ListBox2.ListIndex = -1 Then Exit Sub
    CommandButton3.Enabled = True
   
    sPDFfile = ThisWorkbook.Path & "\8_burostock_cat_2010.pdf"
    Set C = Feuil1.Columns("B").Find(What:=ListBox2.Column(3))
    If Not C Is Nothing Then

    sAdobeCommand = " /a ""page=" & C.Offset(, 7) & "=Open Actions"" "
   
    Shell cAdobeReaderExe & sAdobeCommand & Chr(34) & sPDFfile & Chr(34), vbNormal
    End If
End Sub

Merci encore et Bonne Journée
 

kiki29

XLDnaute Barbatruc
Re : Ouvrir un PDF dans UserForm à une page précise

Salut, quasiment la même chose
Code:
Option Explicit

Sub SelectionFichier()
Dim Fichier As Variant
    ChDir ThisWorkbook.Path & "\"

    Fichier = Application.GetOpenFilename("Fichier PDF (*.pdf), *.pdf")
    If Fichier <> False Then OuvrirPDF Fichier, 3

End Sub

Private Sub OuvrirPDF(ByVal sFichier As String, ByVal numPage As Long)
Dim WshShell As Object, PDFExec As Object
Dim sCheminReader As String

    sCheminReader = "C:\Program Files\Adobe\Reader 11.0\Reader\acrord32.exe"

    Set WshShell = CreateObject("WScript.Shell")
    Set PDFExec = WshShell.Exec(sCheminReader & " /a page=" & numPage & "=OpenActions " & sFichier)

    Set PDFExec = Nothing
    Set WshShell = Nothing
End Sub

Pour remédier au problème intermittent lié aux SenKeys multiples que les DoEvents ne résolvent pas toujours et qui se traduit par une désactivation des NumLock CapsLock ScrollLock PauseLock, voir ici
 
Dernière édition:

Dull

XLDnaute Barbatruc
Re : Ouvrir un PDF dans UserForm à une page précise

Salut kiki29, Re le Fil, le Forum

Merci de t'être intéressé au problème Philippe:). Bien sur j'avais trouvé ton fabuleux Tuto sur la relation PDF Excel sur Developpez.net et essayé plusieurs manipulations qui n'ont rien donné. Malgré tout je suis sur qu'une solution existe et si quelqu'un peut trouver tu es l'une des rares personnes à pouvoir le faire:).

Encore merci Philippe et Bonne Soirée à toutes et à tous
 

kiki29

XLDnaute Barbatruc
Re : Ouvrir un PDF dans UserForm à une page précise

Salut, j'avais cela qui fonctionnait parfaitement avec le reader 9.0 mais plante grave avec le 11, comme d'ailleurs le fichier de David.
Warum ??? bref à essayer quand même.
Code:
Option Explicit

'   Cocher Référence
'   Adobe Acrobat Browser Control Type Library 1.0

Private Sub LoadPDF(sNomFichier As String, iNumPage As Long)
    With UserForm1.AcroPDF1
        .Height = UserForm1.Height - 20
        .Width = UserForm1.Width - 5
        .src = sNomFichier
        .setShowScrollbars True
        .SetShowToolbar True
        .setPageMode "thumbs"
        .setLayoutMode "SinglePage"
        .setCurrentPage iNumPage
        .setView "Fit"
        .setZoom 58
    End With
    UserForm1.Show
End Sub

Sub Tst()
    LoadPDF ThisWorkbook.Path & "\" & "Fusion.pdf", 3
End Sub
 
Dernière édition:

david84

XLDnaute Barbatruc
Re : Ouvrir un PDF dans UserForm à une page précise

Plus simple en utilisant setCurrentPage :
Code:
Private Sub UserForm_Initialize()
Dim Chemin As String
Dim C As Range
Dim NumPage As Long
Set C = ActiveCell
NumPage = C.Offset(, 7)
Chemin = ThisWorkbook.Path & "\" & "8_burostock_cat_2010.pdf"
With Me.AcroPDF1
  .LoadFile (Chemin)
  .setCurrentPage NumPage
End With
End Sub
A+

Edit :
Code:
Salut, j'avais cela qui fonctionnait parfaitement avec le reader 9.0 mais plante grave avec le 11, comme d'ailleurs le fichier de David.
J'ai testé avec la version 10 sans problème...

Edit 2 : ton code fonctionne également sans problème avec la version 10
 
Dernière édition:

david84

XLDnaute Barbatruc
Re : Ouvrir un PDF dans UserForm à une page précise

Bonjour,
REMARQUE : Ce code se vautre avec le Reader 11.0.07 mais fonctionne avec le Reader 11.0.06
pour trouver le Reader 11.0.06 aller ici.
J'ai téléchargé la version indiquée et effectivement cela fonctionne.
Ceci dit quelle que soit la version j'ai toujours ce message "Cette application est sur le point d'initialiser les contrôles ActiveX potentiellement non sûrs......."
As-tu trouvé un moyen d'éviter l'apparition de ce message ?
A+
 

david84

XLDnaute Barbatruc
Re : Ouvrir un PDF dans UserForm à une page précise

Suite

Pour y parvenir il faut modifier la base de registre.

Il est possible de le faire via l'utilisation d'API Windows.

J'ai testé le fichier placé ici sur un ordinateur équipé de Windows XP et d'Office 2003 et cela fonctionne a priori correctement.

Non testé sur Windows 7 ou 8.

Penser à faire un export de la base de registre par sécurité avant de tester.
A+

Edit : code également testé sous Windows 7+Excel 2010 : fonctionne correctement. En plus le code est bien documenté ce qui permet de le comprendre.
Bravo à son concepteur !
 
Dernière édition:

kiki29

XLDnaute Barbatruc
Re : Ouvrir un PDF dans UserForm à une page précise

Salut, dans le code du post 21 il n'y qu'une userform à créer et aucune référence supplémentaire à cocher ni d'activeX AcroPDF1 à déposer sur l'userform. De ce fait aucun message concernant l'activex n'apparaitra.

Code:
.....
Dim oPDF As Object
      Set oPDF = UserForm1.Controls.Add("AcroPDF.PDF.1", "DisplayPDF")
.....
 
Dernière édition:

david84

XLDnaute Barbatruc
Re : Ouvrir un PDF dans UserForm à une page précise

Salut, dans le code du post 21 il n'y qu'une userform à créer et aucune référence supplémentaire à cocher ni d'activeX AcroPDF1 à déposer sur l'userform. De ce fait aucun message concernant l'activex n'apparaitra.

Code:
.....
Dim oPDF As Object
      Set oPDF = UserForm1.Controls.Add("AcroPDF.PDF.1", "DisplayPDF")
.....
Exact !
Le fait d'inclure l'ajout de ce contrôle dans le code permet effectivement d'éviter ce message.
Cest bon à savoir...bien vu !
A+
 

Discussions similaires

Statistiques des forums

Discussions
312 104
Messages
2 085 335
Membres
102 865
dernier inscrit
FreyaSalander