Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/12/2011, 16h31   #1
Invité régulier
 
Inscription : décembre 2011
Messages : 31
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 31
Points : 9
Points : 9
Par défaut Créer un lien hypertexte après voir enregistrer sous PDF

Bonjour,

je suis depuis quelques jours sur une macro que je ne parviens pas à faire fonctionner malgré de nombreux essais suite à mes recherches sur la toile. Je suis relativement novice en VBA et mon problème va peut être vous sembler idiot...

Pour le contexte, tout d'abord mon fichier devra être utilisé par différentes personnes au sein de mon entreprise, d'où ma mission de créer un outil "simple d'utilisation"..
Au départ, j'ai créer un tableau en feuille1 de mon classeur (tableau que chacun devra remplir)
Ensuite, au travers d'une macro, un rapport concernant la dernière ligne remplie est automatiquement créé par click sur une commandbutton vers la feuille2 du classeur puis par une deuxième commandbutton, une seconde macro me créé: premièrement une sauvegarde sur le réseau de mon entreprise, du fichier excel puis me génère un PDF au travers de PDFcreator. Une boite de dialogue (créée par un userform) s'ouvre alors, permettant à l'utilisateur de choisir d'ouvrir ou non ce fichier PDF.

mon soucis est que je ne parviens pas à lancer l'ouverture du fichier en cas de click sur "oui" dans cette boite de dialogue.

J'ai essayé différentes méthodes sans succès..

Je suis sur une solution de créer un lien hypertexte dans ma feuille mais je ne parviens pas ensuite à l'ouvrir: message d'erreur "impossible d'ouvrir le fichier spécifié"

Tout d'abord, pour résoudre le fait de créer à chaque fois de nouveau rapport PDF je suis partis sur le fait de trouver le dernier fichier créé:

Voici le code que j'utilise:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
Function FindLastFile(Path As String)
 
   Dim fName As String
   Dim fDate As Date
 
    Dim fso
    Set fso = CreateObject("Scripting.FileSystemObject")
 
    Dim folder
    Set folder = fso.GetFolder(Path)
 
    Dim Files
    Set Files = folder.Files
 
    Dim File
    For Each File In Files
        If File.DateCreated > fDate Then
            fDate = File.DateCreated
            fName = File.Name
        End If
        Debug.Print File.Name, File.DateCreated, "=>", fName, fDate
    Next
 
    Set Files = Nothing
    Set folder = Nothing
    Set fso = Nothing
 
    FindLastFile = fName
 
End Function
 
'Ensuite, je l'utilise dans ma userform avec le code suivant:
 
Private Sub CommandButton1_Click()
' Créer lien hypertexte du rapport
Dim chemin As String
 
Range("z1").Select
 
chemin = "S:\Chemin\Dossier1\Dossier2\Rapports générés"
 
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:=FindLastFile(chemin)
 
   Unload Me
End Sub
N'ayant pas de code utilisable pour le moment, je ne suis pas parvenu à tester de code permettant ensuite l'ouverture de ce lien nouvellement créé

En espérant avoir été claire dans mes explications, quelqu'un aurait-il une solution s'il vous plaîiiiiiiiiiiiit?????

Merki!!
babou41287 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2011, 17h19   #2
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
N'oublie pas d'utiliser les balises CODE (en cliquant sur le # dans l'éditeur de message) quand tu écris du code.

Et regarde du coté de la fonction suivante :
Code :
ThisWorkbook.FollowHyperlink
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2011, 10h14   #3
Invité régulier
 
Inscription : décembre 2011
Messages : 31
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 31
Points : 9
Points : 9
Bonjour,

désolé pour les balises de code, j'ai été un peu vite dans ma rédaction...

Sinon, je ne parviens pas à utiliser"ThisWorkbook.FollowHyperlink" dans mon cas. j'ai essayé plusieurs fois en adressant la cellule, le texte dans la cellule ou le FindLastFile(chemin) sans succès... (Le problème étant que le nom de fichier va changer à chaque fois et je ne peux donc pas donner une adresse absolue..)

Je ne sais pas exactement où positionner cette fonction, ni comment l'adressée ...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
Private Sub CommandButton1_Click()
' Créer lien hypertexte du rapport
Dim chemin As String
Dim fname As String
 
Range("z1").Select
 
chemin = "S:\Chemin\dossier1\dossier2\rapports générés"
fname = FindLastFile(chemin)
 
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:=fname
 
ThisWorkbook.FollowHyperlink (range("z1").text)
Je ne sais pas si ça à un rapport avec le fait que ça ne fonctionne pas mais le lien hypertexte qu'Excel me créé suivant le code écrit dans mon précédent post, tronque une partie du chemin:
Au lieu d'avoir quelque chose du type "S:\Chemin\dossier1\dossier2\rapports générés", il m'indique "S:\Chemin\dossier1\rapports générés" avec un message d'erreur qui apparaît au click :"Impossible d'ouvrir le fichier spécifié". Pourtant dans mon code, le chemin ne contient pas d'erreur et il me note quand même le bon nom de fichier... (Quand je créé le lien hypertexte sans passage par le VBA, je n'ai aucun soucis d'ouverture, avec le chemin indiqué complet)

Merci d'avance!!
babou41287 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2011, 11h54   #4
Membre Expert
 
Avatar de Fvandermeulen
 
Frédéric Vandermeulen
Inscription : juillet 2007
Messages : 1 730
Détails du profil
Informations personnelles :
Nom : Frédéric Vandermeulen
Âge : 36
Localisation : Belgique

Informations forums :
Inscription : juillet 2007
Messages : 1 730
Points : 2 131
Points : 2 131
Salut,

Je ne pense pas que l'Hyperlink soit la meilleure solution.
Personnellement je préfèrerais solutionner le problème d'ouverture via l'userform.

Pour commencer, en créant le PDF est-ce que tu le sauvegarde ?
J'imagine que oui, tu as donc son nom.
Ensuite, pour ouvrir depuis l'userform, un code du genre...
Code :
1
2
3
4
5
6
7
8
9
10
11
12
Option Explicit
 
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
 
Sub OuvrirPdf()
Dim MyPDF As String
 
MyPDF = "LeNomDuPDF.pdf"
ShellExecute 0, "open", MyPDF, "", "", 1
 
End Sub
Reste à affecter à la variable MyPDF le nom de ton PDF que tu dois avoir quelques part dans ta procédure liée à l'userform.

Bonne continuation
__________________
N'oubliez pas le si votre problème est solutionné.
Fvandermeulen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2011, 18h01   #5
Invité régulier
 
Inscription : décembre 2011
Messages : 31
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 31
Points : 9
Points : 9
Merci pour ta réponse. Effectivement si je pouvais trouver une solution sans passer par un lien hypertexte ce serait l'idéal.

Malheureusement je n'arrive pas à utiliser ta proposition..

Tout d'abord, quelque soit l'endroit où je mets l'option explicit, j'ai une "erreur de compilation : Des constantes, chaines de longueur fixe, tableaux, types prédéfinis par l'utilisateur et Instruction Declare ne sont pas autorisés comme membres Public de modules d'objet " et je ne vois pas trop quelle référence il pourrait manquée (si c'est bien ça le problème...)

Sinon j'ai peut être "trouvé" une autre solution mais qui ne fonctionne pas tout à fait comme je le voudrait...
Elle me trouve bien le dernier fichier créé de mon répertoire et m'ouvre bien le bon fichier pdf...mais avec EXCEEEEEELLL.. et du coup j'ai des hiéroglyphes qui s'affichent!!!

Je ne sais pas comment appeler la bonne application d'ouverture de mon fichier (j'ai PDFcreator et Acrobat reader), et si pour l'appeler, il me faut spécifier un chemin complet, est ce qu'il existe un "tour de passe-passe" pour qu'excel le retrouve tout seul (normalement je ne serais pas la seule de mon service à utiliser le fichier et j'ai bien peur qu'on n'est pas tous la même version, au même endroit....)

Voici le code que j'ai trouvé sur la toile pour aller me chercher le bon fichier:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Function FindLastFile(Path As String)
 
   Dim fname As String
   Dim fDate As Date
 
    Dim fso
    Set fso = CreateObject("Scripting.FileSystemObject")
 
    Dim folder
    Set folder = fso.GetFolder(Path)
 
    Dim Files
    Set Files = folder.Files
 
    Dim File
    For Each File In Files
        If File.DateCreated > fDate Then
            fDate = File.DateCreated
            fname = File.Name
        End If
        Debug.Print File.Name, File.DateCreated, "=>", fname, fDate
    Next
 
    Set Files = Nothing
    Set folder = Nothing
    Set fso = Nothing
 
    FindLastFile = fname
 
Workbooks.Open Path & "\" & fname
 
 
 
End Function
Que j'appelle à l'aide de ma userform:
Code :
1
2
3
4
5
6
7
8
9
10
11
 
Private Sub CommandButton1_Click()
' "devrait ouvrir" le fichier pdf
Call FindLastFile("S:\chemin1\chemin2\Rapports générés\")
   Unload Me
End Sub
 
Private Sub CommandButton2_Click()
' ferme la boite de dialogue
    Unload Me
End Sub
Et merci encore du coup de main!!!
babou41287 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2011, 08h27   #6
Membre Expert
 
Avatar de Fvandermeulen
 
Frédéric Vandermeulen
Inscription : juillet 2007
Messages : 1 730
Détails du profil
Informations personnelles :
Nom : Frédéric Vandermeulen
Âge : 36
Localisation : Belgique

Informations forums :
Inscription : juillet 2007
Messages : 1 730
Points : 2 131
Points : 2 131
Salut,

La seule méthode que je connaisse pour ouvir le PDF hors Excel est celle que j'ai indiqué.

Je pense que ton message d'erreur vient du fait que tu aurais mis la procédure dans un module Private.

Reprend les modules que j'ai collé et, dans ton module Private renvoi vers la macro ouvrirPDF pour tester.

A+
__________________
N'oubliez pas le si votre problème est solutionné.
Fvandermeulen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2011, 09h56   #7
Invité régulier
 
Inscription : décembre 2011
Messages : 31
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 31
Points : 9
Points : 9
Merci merci beaucoup!!!

Finalement j'ai réussi à l'adapter à mon cas avec un petit ajout de message d'erreur en cas de fichier ou chemin non trouvé!!!!! Et tout marche très bien.

Bonne année et bonne santé!!!
babou41287 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2012, 11h09   #8
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
J'arrive un peu après la bataille (il faut bien prendre de vacances de temps en temps), mais pour une prochaine fois, voici comment tu peux utiliser FollowHyperlink (Tu peux bien sûr le faire depuis ton userForm, ça n'a en fait rien à voir avec les hyperlink de cellules) :
Code :
ThisWorkbook.FollowHyperlink FindLastFile("S:\Chemin\dossier1\dossier2\rapports générés")
(Si bien sûr FindLastFile te renvoie le chemin complet, je n'ai pas regardé en détail).
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2012, 12h31   #9
Invité régulier
 
Inscription : décembre 2011
Messages : 31
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 31
Points : 9
Points : 9
Merci pour l'info.. Je garde ça de côté au cas où!!effectivement ça pourra peut être m'être utile une prochaine fois!!

Et meilleurs voeux pour cette année!
babou41287 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h53.


 
 
 
 
Partenaires

Hébergement Web