Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Ouvrir PDF depuis Excel : Question ?

4 réponses
Avatar
Excel...lent
Bonjour,

Dans une de mes applic j'utilise le code suivant pour ouvrir un fichier
format PDF depuis EXCEL et cela fonctionne au poil.
Si le fichier n'existe il ne se passe rien, même pas un code error.
ma question : Est-il possible de faire en sorte que si le fichier n'est pas
trouvé j'affiche une MsgBox pour en informer l'utilisateur ?
J'ai trouvé ce code sur le net mais je ne sais plus où, si son auteur se
reconnaît qu'il veuille bien me pardonner de ne pas le citer car je ne me
souviens plus ou j'ai "gratté" ce code...

Merci de vos conseils.

Cordialement.

Excel...lent


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

Const SW_SHOWNORMAL = 1

Private Sub OuvrirPdf()

ShellExecute 0, "open", Toto.pdf, "", "", SW_SHOWNORMAL

End Sub

4 réponses

Avatar
Jacques93
Bonjour Excel...lent,

l'API ShellExecute renvoie un code > 32 si elle a réussie, sinon c'est
un code erreur :

<http://msdn2.microsoft.com/en-us/library/ms647732.aspx>

Tu peux dans un odule utiliser ceci :

Option Explicit

' Codes erreur ShellExecute

Private Const SE_ERR_FNF = 2 ' file not found
Private Const SE_ERR_PNF = 3 ' path not found
Private Const SE_ERR_ACCESSDENIED = 5 ' access denied
Private Const SE_ERR_OOM = 8 ' out of memory
Private Const SE_ERR_DLLNOTFOUND = 32

Private Const SE_ERR_SHARE = 26
Private Const SE_ERR_ASSOCINCOMPLETE = 27
Private Const SE_ERR_DDETIMEOUT = 28
Private Const SE_ERR_DDEFAIL = 29
Private Const SE_ERR_DDEBUSY = 30
Private Const SE_ERR_NOASSOC = 31

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 Const SW_SHOWNORMAL = 1

Public Function OuvrirPdf(pdfName As String) As Boolean
Dim lResult As Long
Dim Msg As String

lResult = ShellExecute(0, "open", pdfName, "", "", SW_SHOWNORMAL)
If lResult <= 32 Then
Select Case lResult
Case SE_ERR_FNF: Msg = "Fichier non trouvé"
Case SE_ERR_PNF: Msg = "Chemin non trouvé"
Case SE_ERR_ACCESSDENIED: Msg = "Acces refusé"
Case SE_ERR_OOM: Msg = "Dépassement mémoire"
Case SE_ERR_DLLNOTFOUND: Msg = "Dll no trouvée"

Case SE_ERR_SHARE: Msg = "Violation de partage"
Case SE_ERR_ASSOCINCOMPLETE: Msg = "Association incomplète"
Case SE_ERR_DDETIMEOUT: Msg = "DDE TimeOut"
Case SE_ERR_DDEFAIL: Msg = "DDE Failed"
Case SE_ERR_DDEBUSY: Msg = "DDE occupé"
Case SE_ERR_NOASSOC: Msg = "Pas d'association"
Case Else: Msg = "Erreur n° " & lResult
End Select
MsgBox Msg & vbCrLf & pdfName, vbOKOnly
OuvrirPdf = False
Else
OuvrirPdf = True
End If
End Function


Bonjour,

Dans une de mes applic j'utilise le code suivant pour ouvrir un fichier
format PDF depuis EXCEL et cela fonctionne au poil.
Si le fichier n'existe il ne se passe rien, même pas un code error.
ma question : Est-il possible de faire en sorte que si le fichier n'est pas
trouvé j'affiche une MsgBox pour en informer l'utilisateur ?
J'ai trouvé ce code sur le net mais je ne sais plus où, si son auteur se
reconnaît qu'il veuille bien me pardonner de ne pas le citer car je ne me
souviens plus ou j'ai "gratté" ce code...

Merci de vos conseils.

Cordialement.

Excel...lent


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

Const SW_SHOWNORMAL = 1

Private Sub OuvrirPdf()

ShellExecute 0, "open", Toto.pdf, "", "", SW_SHOWNORMAL

End Sub




--
Cordialement,

Jacques.

Avatar
perso
Bjr Excel..lent

une autre solution proche de ton code:

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 ShellOuvrePourExcellent()

Dim Fichier As String, Chemin As String, Texte As String
On Error GoTo GestErr

Fichier = "doc deauville.pdf" ' A adapter
Chemin = "c:UsersPatrick" ' A adapter

If Dir(Chemin) = "" Then GoTo GestErr
Dir (Fichier)

ShellExecute 0, "open", Chemin & Fichier, "", "", 1
Exit Sub

GestErr:
Texte = "Le fichier " & Fichier & " n'existe pas"
If Dir(Chemin) = "" Then Texte = "Le chemin " & Chemin & "
n'existe pas"
MsgBox Texte, vbCritical, "Erreur"


End Sub

Cela gère 2 erreurs: si le chemin n'existe pas ou le fichier n'existe
pas alors msgbox avec description de l'erreur
Sinon
Ouverture du fichier PDF

Bonne journée à toi, cela te convient t'il ?

Pat REDNEF
Avatar
Excel...lent
Bonjour à tout les deux,

Désolé pour ma réponse tardive. Pas de pc à la maison en ce moment.
Je jongle avec celui du boulot.

Merci pour vos deux solutions.

J'essaie les deux dès que je peux et je vous tiens au courant.

Encore merci.

Cordialement.

Marc
Avatar
Excel...lent
Bonjour à tout les deux,

Alors j'ai enfin eu le temps d'essayer vos soluces. Les deux me vont tres
bien. J'ai donc l'embarras du choix.

Merci encore à vous deux pour votre aide.

Cordialement.

Marc