Lien hypertexte vers PDF qui changent de nom

DoudouNours

XLDnaute Junior
Bonjour,

J'aurai voulu savoir s'il était possible de conserver un lien hypertexte vers un PDF qui change de nom ou plutôt juste la fin du nom. (son indice)
Exemple:

J'ai plusieurs dossiers sur un serveur dans lesquels on y trouve un seul pdf par dossier. Par contre j'ai quand même des dossiers d'archivages dans chacun.

Actuellement j'ai créé un tableau excel avec les liens hypertexte vers les dossiers plutôt que les PDF car ils changent de nom.(d'indice)
Ex : Article822 indA.pdf peut devenir Article822 indB.pdf et le indA.pdf passe alors dan le dossier d'archivage.

J'aimerai pouvoir accéder directement aux pdf même s'ils changent d'indice car ils ont pleins de pages (env 300 pages chacun) et je voudrais au final les renvoyer vers une page précise rien qu'en cliquant sur mon lien.

Est-ce possible ?
-peut-être en demandant d'aller chercher le seul pdf dans dans tel dossier.
-en visant le pdf sur les premiers caractères (sans compter la fin au changement d'indice)
-le pdf vers la page précice existe t-il réellement ?

Je vous remercie d'avance pour votre aide.

David
 

Dranreb

XLDnaute Barbatruc
Re : Lien hypertexte vers PDF qui changent de nom

Bien. Ce n'est pas une erreur: c'est l'effet normal du Stop.
Le premier MonLien qu'il trouve est quand même bizarre.
F5 permet de continuer l'exécution.
Faites le. Ça va afficher le suivant. Espérons qu'il sera mieux…

P.S. Mettez d'abord en commentaire les instruction qui suivent jusqu'au Next MonLien à garder.
Mettre en commentaire ça veut dire mettre une apostrophe tout devant pour qu'elle ne soit plus exécutable.

Faites un clic droit dans l'explorateur quelque part dans le projet VBA du classeur. Insertion, Module. Mettez y cette procédure :
VB:
Sub Test()
Dim MonLien As Hyperlink
For Each MonLien In Worksheets("Feuil1").Hyperlinks
   If MsgBox("Cellule " & MonLien.Range.Address(False, False) & ":" _
      & vbLf & "   MonLien.Address = """ & MonLien.Address & """," _
      & vbLf & "   MonLien.SubAddress = """ & MonLien.SubAddress & """." _
      & vbLf & "Continuer ?", vbYesNo, "Test de mise au point") = vbNo Then Exit Sub
   Next MonLien
End Sub
Assurez vous que la feuille contient des liens d'origines qui n'ont pas été détruits par des essais malheureux puis exécutez la (par touche F5 dessus par exemple).

J'ai fait l'essai dans votre dernier classeur joint. Il m'affiche bien en Cellule B2:C3: MonLien.Addresse = "\\SOMEGA\ etc.
pas de SubAddress. Cela me conforte dans l'avis que ma procédure du #12 devrait fonctionner.

Peut être vaudrait-il mieux l'agrémenter de plus de contrôles et de MsgBox d'information :
VB:
Private Sub Workbook_Open()
Dim Lien As Hyperlink, Adr As String, Chemin As String, _
   Ancien As String, P As Long, Nouveau As String
For Each Lien In Worksheets("Feuil1").Hyperlinks
   Adr = Lien.Address: P = InStrRev(Adr, "\")
   Chemin = Left$(Adr, P)
   Ancien = Mid$(Adr, P + 1)
   On Error Resume Next
   Nouveau = Dir(Chemin & "*.pdf")
   If Err Then
      MsgBox "Lien hypertexte en " & Lien.Range.Address & ", erreur en interrogeant :" _
         & vbLf & Chemin & "*.pdf" & vbLf & Err.Description, _
         vbCritical, "Ouverture " & Me.Name
   ElseIf Nouveau = "" Then
      MsgBox "Lien hypertexte en " & Lien.Range.Address & ", fichier suivant inexistant :" _
         & vbLf & Chemin & "*.pdf", vbExclamation, "Ouverture " & Me.Name
   ElseIf Nouveau <> Ancien Then
      Err.Clear: Lien.Address = Chemin & Nouveau
      If Err Then
         MsgBox "Lien hypertexte en " & Lien.Range.Address & ", erreur en tentant de le corriger :" _
           & vbLf & Err.Description, vbCritical, "Ouverture " & Me.Name
      Else
         MsgBox "Lien hypertexte en " & Lien.Range.Address & ", fichier changé. Ancien nom :" _
            & vbLf & """" & Ancien & """, nouveau nom :" & vbLf & """" & Nouveau & """.", _
            vbInformation, "Ouverture " & Me.Name
         End If
      End If
   On Error GoTo 0: Next Lien
End Sub
Chez moi le Dir plante et donne donc lieu au 1er message …erreur en interrogeant… Normal je n'ai pas ce dossier en ligne. S'il plante aussi chez vous quel que soit le fichier, ça pourrait vouloir dire que le Dir ne supporte pas les références de dossiers de ce genre avec "\\" devant en guise de lettre de lecteur. Il faudrait alors sans doute changer le fusil d'épaule et recourir au Scripting.FileSystemObject … Dans ce cas, bonjour les dégats ! Beaucoup de mise au point en perspective à faire de votre coté, car je ne dispose d'aucune adresse de réseau pour effectuer des tests à votre place. Enfin, on verra …
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Lien hypertexte vers PDF qui changent de nom

Bonjour
Début
VB:
Private Sub Workbook_Open()
Dim Feui As Worksheet, Lien As Hyperlink, Adr As String, Chemin As String, _
   Ancien As String, P As Long, Nouveau As String
For Each Feui In Me.Worksheets
   For Each Lien In Feui.Hyperlinks
Le reste est pareil à partir de Adr = etc. Fin après Next Lien:
VB:
   Next Feui
End Sub
Mettez peut être aussi devant chaque MsgBox :
VB:
         Application.Goto Lien.Range
si ça ne dérange pas, car là on ne sait plus de l'adresse de cellule de quelle feuille ils parlent.
 
Dernière édition:

DoudouNours

XLDnaute Junior
Re : Lien hypertexte vers PDF qui changent de nom

Un grand merci, ca fonctionne.

Pas besoin d'utiliser Application.Goto Lien.Range

Vous n'aviez pas d'idée pour faire en sorte que sur certains de mes liens, on puisse directement accéder à une page voulue ??
 

DoudouNours

XLDnaute Junior
Re : Lien hypertexte vers PDF qui changent de nom

Par contre il se passe une chose que je n'avais pas prévue.

Dans ma feuille 1 il y a des liens hypertextes vers le serveur donc, mais aussi de simples liens vers les feuilles du classeur car il y en a beaucoup.

Avec notre formule, ces liens vers les feuilles du classeur se modifient à l'ouverture eux aussi et ne devraient pas du coup. Il faudrait faire en sorte que la formule n'atteigne seulement les liens du serveur.

Est-ce possible cela ?
 

Dranreb

XLDnaute Barbatruc
Re : Lien hypertexte vers PDF qui changent de nom

Je pense que la page dans le PDF s'indique au SubAddress, or la procédure n'y touche pas.
VB:
Private Sub Workbook_Open()
Dim Feui As Worksheet, Lien As Hyperlink, Adr As String, Chemin As String, _
   Ancien As String, P As Long, Nouveau As String
For Each Feui In Me.Worksheets
   For Each Lien In Feui.Hyperlinks
      Adr = Lien.Address
      If Left$(Adr, 2) = "\\" Then
         P = InStrRev(Adr, "\")
         Chemin = Left$(Adr, P)
         Ancien = Mid$(Adr, P + 1)
         On Error Resume Next
         Nouveau = Dir(Chemin & "*.pdf")
         If Err Then
            Application.Goto Lien.Range
            MsgBox "Lien hypertexte en '" & Feui.Name & "'!" & Lien.Range.Address & ", erreur en interrogeant :" _
               & vbLf & Chemin & "*.pdf" & vbLf & Err.Description, _
               vbCritical, "Ouverture " & Me.Name
         ElseIf Nouveau = "" Then
            MsgBox "Lien hypertexte en '" & Feui.Name & "'!" & Lien.Range.Address & ", fichier suivant inexistant :" _
               & vbLf & Chemin & "*.pdf", vbExclamation, "Ouverture " & Me.Name
         ElseIf Nouveau <> Ancien Then
            Err.Clear: Lien.Address = Chemin & Nouveau
            If Err Then
               MsgBox "Lien hypertexte en '" & Feui.Name & "'!" & Lien.Range.Address & ", erreur en tentant de le corriger :" _
                 & vbLf & Err.Description, vbCritical, "Ouverture " & Me.Name
            Else
               MsgBox "Lien hypertexte en '" & Feui.Name & "'!" & Lien.Range.Address & ", fichier changé. Ancien nom :" _
                  & vbLf & """" & Ancien & """, nouveau nom :" & vbLf & """" & Nouveau & """.", _
                  vbInformation, "Ouverture " & Me.Name
               End If
            End If
         On Error GoTo 0: End If
      Next Lien
   Next Feui
End Sub
 

Dranreb

XLDnaute Barbatruc
Re : Lien hypertexte vers PDF qui changent de nom

Qu'est-ce que vous attendez pour ajouter manuellement un lien vers une page précise d'un PDF puis exécuter la procédure Test indiquée au #31 pour voir comment il est fait du point de vue Address et SubAddress ?
 

DoudouNours

XLDnaute Junior
Re : Lien hypertexte vers PDF qui changent de nom

Pour ajouter un lien vers une page précise, je ne connais que cette manière:

blabla.pdf#page=7 mais sans succès.

AU #31 comme vous dites, vous parlez du module à rajouter ?

Sub Test()
Dim MonLien As Hyperlink
For Each MonLien In Worksheets("Feuil1").Hyperlinks
If MsgBox("Cellule " & MonLien.Range.Address(False, False) & ":" _
& vbLf & " MonLien.Address = """ & MonLien.Address & """," _
& vbLf & " MonLien.SubAddress = """ & MonLien.SubAddress & """." _
& vbLf & "Continuer ?", vbYesNo, "Test de mise au point") = vbNo Then Exit Sub
Next MonLien
End Sub


Celui-ci ?
 

Dranreb

XLDnaute Barbatruc
Re : Lien hypertexte vers PDF qui changent de nom

Oui. Mais entre temps je viens de faire la même recherche sur le Net.
Rien de ce que j'ai pu trouver, notamment avec les #Page= et #NamedDest= derrière le nom de fichier ne marche chez moi.
Vraiment de la merde Acrobat !
À part l'idée géniale de départ de baser le truc sur une imprimante virtuelle pour pouvoir créer un document depuis n'importe quelle application capable d'imprimer, il n'ont jamais su le faire évoluer de manière à ce qu'il soit vraiment pratique.
La preuve c'est qu'on est toujours obligé de constituer des listes dans d'autres applications comme Excel, avec des liens.
C'est bien parce qu'on ne trouve pas ce qu'il faudrait dans Acrobat.
Il ne leur est par exemple jamais venu à l'esprit la possibilité d'affecter des attributs à des parties de documents PDF, de façon à ce que ce soit l'utilisateur final qui puisse se définir une liste de liens rien qu'en sélectionnant les attributs qui l'intéressent.
J'espère que les PDF vont peu à peu disparaître au profit de pages HTML…
Je crois qu'il va falloir considérer que c'est impossible d'atteindre un page précise depuis un lien Excel, à moins d'une programmation très lourde effectuée dans une Worksheet_FollowHyperlink.
 
Dernière édition:

DoudouNours

XLDnaute Junior
Re : Lien hypertexte vers PDF qui changent de nom

Bonjour Dranreb

Je voulais déjà vous remercier pour avoir trouvé la formule correspondante à ce que je chercher à faire.

Je voudrais également vous faire partager un fichier comprenant une formule pour accéder vers un pdf à une page voulue avec l'utilisation d'infobulle car j'ai retrouvé de vieux échanges que j'avais fait sur ce forum avec l'aide d'un adhérant. Nous avions trouvé plusieurs façons et mon but et de voir avec vous s'il était possible de les combiner avec notre dernier fichier.

Nos échangent étaient dans ce lien:

https://www.excel-downloads.com/threads/lien-hypertexte-vers-pdf.162473/

Merci
 

Pièces jointes

  • PDF VERS PAGE PRECISE COMBOS.zip
    45.5 KB · Affichages: 25

Dranreb

XLDnaute Barbatruc
Re : Lien hypertexte vers PDF qui changent de nom

Bonsoir.
Effectivement ça peut être un bon compromis.
Reproduisez un code très voisin dans une Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink) en remplaçant ActiveCell.Hyperlinks(1) par Target tout simplement. Par exemple :
VB:
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
Dim SpIB() As String, U As Long
ThisWorkbook.FollowHyperlink Target.Address
If Target.ScreenTip = "" Then Exit Sub 
SpIB = Split(Target.ScreenTip, " "): U = UBound(SpIB): If U = 0 Then Exit Sub
If SpIB(U - 1) <> "Page" Then Exit Sub
Application.Wait Now + 1 / 86400 ' 1 jour / 86400 = 1 seconde
SendKeys "{DOWN " & SpIB(U) & "}"
End Sub
 
Dernière édition:

DoudouNours

XLDnaute Junior
Re : Lien hypertexte vers PDF qui changent de nom

ok, vous remplacez cela dans la feuille 1 à la place de

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim s
If Selection.Rows.Count = 9 Then 'si 9 lignes sélectionnées
On Error Resume Next
s = Split(ActiveCell.Hyperlinks(1).ScreenTip, "-Page=") 'utilisation de l'info-bulle
If Err = 0 Then
ActiveCell.Select
ThisWorkbook.FollowHyperlink ThisWorkbook.Path & "\" & s(0) 'pour ici
'ThisWorkbook.FollowHyperlink s(0) 'si chemin d'accès dans l'info-bulle
Application.Wait Now + 3 / 86400 'Excel 2003 => temporisation 1 secondes
SendKeys "{DOWN " & s(1) - 1 & "}"
End If
End If
End Sub


nous sommes d'accord ?
 

Dranreb

XLDnaute Barbatruc
Re : Lien hypertexte vers PDF qui changent de nom

Non, dans la ou les feuilles de l'autre classeur qui comportent des liens hypertexes.
On suppose qu'une info-bulle pourra être ajoutée, contenant des groupes de caractères séparés par des espaces. Si l'avant dernier est le mot "Page", le dernier est envoyé par le SendKeys

P.S. j'ai fait des essais. J'en ai conclu :
1) - ThisWorkbook.FollowHyperlink Target.Address doit être supprimé : fait double emploi avec le suivi normal du lien qui a quand même lieu aussi.
2) - SendKeys "{PGDN " & SpIB(U) & "}" semble mieux pour atteindre une page. DOWN ne descend que d'une ligne.

P.S.2 J'ai regardé un peu les menus dans Acrobat Reader, j'en ai déduit que le SendKeys correct pour atteindre une page serait celui ci :
VB:
SendKeys "^n" & SpIB(U) & "{ENTER}"
 
Dernière édition:

DoudouNours

XLDnaute Junior
Re : Lien hypertexte vers PDF qui changent de nom

Bonjour,

Pour bien comprendre.

J'ai rentré ceci dans VB pour chaque feuille ou j'ai des liens :


Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
Dim SpIB() As String, U As Long
If Target.ScreenTip = "" Then Exit Sub
SpIB = Split(Target.ScreenTip, " "): U = UBound(SpIB): If U = 0 Then Exit Sub
If SpIB(U - 1) <> "Page" Then Exit Sub
Application.Wait Now + 1 / 86400 ' 1 jour / 86400 = 1 seconde
SendKeys "^n" & SpIB(U) & "{ENTER}"
End Sub


Mais que dois-je rentrer pour les pages ?
C'est toujours dans l'info bulle ?
par exemple seulement -page=2
 

Discussions similaires

Réponses
2
Affichages
635

Statistiques des forums

Discussions
312 273
Messages
2 086 701
Membres
103 373
dernier inscrit
Edouard007