Erreur à l'ouverture d'un .pdf avec l'API ShellExecute

Résolu/Fermé
Hama' Messages postés 4 Date d'inscription mercredi 8 mai 2013 Statut Membre Dernière intervention 15 mai 2013 - 14 mai 2013 à 14:28
Hama' Messages postés 4 Date d'inscription mercredi 8 mai 2013 Statut Membre Dernière intervention 15 mai 2013 - 15 mai 2013 à 09:53
Bonjour à tous,

J'arrive au terme du développement d'un petit logiciel de gestion de cabinet médical et je viens vers vous pour une aide sur l'utilisation de l'API ShellExecute.

Le formulaire concerné dispose d'une liste déroulante alimentée par la base de données patient. La sélection du patient entraîne l'affichage de son nom et de son prénom dans 2 TextBox et active un bouton.
Au clic sur ce bouton, j'aimerais ouvrir un fichier .pdf de rapport lié au patient.

Voilà mon code VBA :

Option Explicit

#If Win64 Then 'La machine utilisée tourne en 64 bits
   Declare PtrSafe 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
#Else
   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
#End If

Private Sub CmdOuv_Click()
   Dim chemin, nom, prenom As String
   nom = LCase(NomTextBox.Value) 'De même pour prenom
   chemin = "C:\BLABLA\" & nom & "_" & prenom & ".pdf"
   OuvrirShellExecute (chemin)
End Sub

Public Function OuvrirShellExecute(strFichier)
   ShellExecute 0, "open", strFichier, vbNullString, vbNullString, 1
End Function

Et l'erreur générée au clic sur le bouton :
"Des constantes, chaînes de longueur fixe, tableaux, types définis par l'utilisateur et instructions Declare ne sont pas autorisés comme membres Public de modules d'objet."

Quelqu'un saurait-il m'éclairer ?

Merci d'avance,



A voir également:

2 réponses

f894009 Messages postés 17211 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 23 décembre 2024 1 711
14 mai 2013 à 20:35
Bonjour,

a mettre dans un module, pas dans le vba du formulaire (au passage petite erreur dans l'appel de ShellExecute, voir correction ci-dessous)

Option Explicit

#If Win64 Then 'La machine utilisée tourne en 64 bits
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
#Else
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
#End If

Public Function OuvrirShellExecute(strFichier, Chemin_fichier)
ShellExecute 0, "open", strFichier, vbNullString, Chemin_fichier, 1
End Function



dans formulaire:

Private Sub CmdOuv_Click()
Dim chemin, nom, prenom As String
nom = LCase(NomTextBox.Value) 'De même pour prenom
chemin = "C:\BLABLA\" & nom & "_" & prenom & ".pdf"
rep="C:\BLABLA\"
OuvrirShellExecute (chemin,rep)
End Sub


A+
1
Hama' Messages postés 4 Date d'inscription mercredi 8 mai 2013 Statut Membre Dernière intervention 15 mai 2013
15 mai 2013 à 09:53
Merci beaucoup, ça fonctionne !

Pour ceux que ça intéresserait, petite erreur de recopie, pour les systèmes en 64 bits, il faut mettre :
Declare PtrSafe Function ShellExecute ...blablabla
Et pour appeler la fonction
OuvrirShellExecute chemin,rep
0