Macro qui ne fonctionne pas

Vieupot

XLDnaute Occasionnel
Bonsoir

Notre ami DOUBLE ZERO m'avait donné les bases d'une macro que je devais adapter à mon projet
J'ai du mal " adapter" ... !
Cette macro à pour but d'afficher un document au format PDF correspondant à un numéro de facture
J'indique manuellement le numéro à rechercher en I5
pour exemple j'indique" 1" en I5 et je devrais voir apparaitre la facture enregistrée " 1 " avec extension PDF
J'ai entré les données ci-dessous dans un module standard. Je précise que mon fichier Excel et mes fichiers PDF sont dans le même dossier. Si pas de facture message "Dossier inexistant "

J'ai le message suivant au lancement :Erreur de compilation Sub ou fonction non définie
A la création de la macro je dois inscrire "Sub" manuellement alors qu'il me semble que ça se marque tout seul
Vous comprendrez en me lisant que je suis débutant en la matière

Sub Fichier_Pdf_ouvrir()

cherche_et_affiche_fichier_pdf (cette indication ne s'enregistre pas de couleur verte dans le module)


Dim fichier_nom As String, emplacement As String
On Error GoTo fin
fichier_nom = [I5].Value & ".pdf"

emplacement = "G:\AAAA asso\Compta\compta_AAAA_2017\"
CreateObject("WScript.Shell").Run emplacement & fichier_nom
Exit Sub
fin: MsgBox "Fichier inexistant."
End Sub

Quelqu'un aurait-il la gentillesse de me dire pourquoi dans mon module Sub n'est pas en bleu.. et l'explication macro pas en vert
C
ordialement
 

chris

XLDnaute Barbatruc
Bonjour

La fenêtre espion devrait afficher "G:\AAAA asso\Compta\compta_AAAA_2017\1.pdf" quand tu y places emplacement & fichier_nom

Non le disque externe est sans importance. Sauf si tu n'as pas tous les droits d'accès à ce disque

Pour tester, crée un fichier test.bat sur ton ton disque C: avec dedans une ligne "G:\AAAA asso\Compta\compta_AAAA_2017\1.pdf" (avec les "") et lance ce fichier test.bat en double cliquant dessus : le pdf doit s'ouvrir.

Autres test : dans l'explorateur de fichiers, dans la barre d'adresse, cliques à droite de l'adresse. Elle se mets en texte : colle ton chemin d'accès G:\AAAA asso\Compta\compta_AAAA_2017\1.pdf (sans "") : le fichier doit s'ouvrir
 

cathodique

XLDnaute Barbatruc
Bonsoir,

J'avais effectué des recherches dans ce sens. Je partage avec vous la solution que j'avais trouvé et adapté.
VB:
Option Explicit
'Dans le haut du module, déclaration de l'API
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 Ouvrir_Un_Fichier_PDF()
    Dim Fichier As String, NomFichier As String, Chemin As String

    NomFichier = [I5].Value & ".pdf"

    Chemin = "I:\VBA - Fichiers\"   'tu adaptes cette ligne à ton chemin
    Fichier = Chemin & NomFichier
    If Dir(Fichier) <> "" Then
        ShellExecute 0, "open", Fichier, "", "", 0
    Else
        MsgBox "Fichier inexistant."
    End If
End Sub
Bonne soirée à toutes et à tous

La source de ce code est ici.

Si tu veux aller plus loin ici explication de la fonction ShellExecute.
 
Dernière édition:

Vieupot

XLDnaute Occasionnel
Bonjour Chris et Cat

Chris : Comme suggéré j'ai fait une copie de l'adresse enregistrée dans le chemin d'accès du code Vba, et l'ai copié dans la barre d'adresse.
Le dossier s'ouvre parfaitement et j'y vois mon fichier pdf et mon fichier excel. E si j'ajoute l'extansion 1PDF et que je relance la recherche le dossier contenant le fichier PDF s'ouvre !
C'est à ne rien y comprendre sauf que je dois avoir fait une erreur dans le code puisque toi tu as fait l'essai et ça fonctionne. Même si la solution apportée par catho fonctionne Je voudrais pour moi même avoir une explication mais ne vais pas abuser de ta gentillesse ! J'ai d'autant plus de mal à comprendre que j'avais fait fait un copié collé du code à partir de la dicussion.

Catho: Ton code fonctionne parfaitement ça me dépanne car j'ai pris beaucoup de retard, mais grâce à vous deux , votre disponibilités et vos conseils j'avance

Un grand merci

Bernard
 

chris

XLDnaute Barbatruc
Bonjour

Je ne saurais te dire.
Soit une erreur dans le code : poste éventuellement la copie d'écran de l'éditeur VBA avec les 3 variables affichées dans les fenêtres espions et locales.
Mais peut-être une incompatibilité avec tes versions Windows-Excel et WScript...

Le code initial et le code de Cathodique font tous deux appel au shell donc si ce dernier fonctionne, ne t'embête pas...
 

cathodique

XLDnaute Barbatruc
Bonsoir,

Content que ça te fasses gagner du temps. Moi aussi, j'ai fait des recherches pour comprendre pourquoi le code du post#1 fonctionnait chez Chris et pas chez toi. Chez aussi il n'a pas fonctionnait.

Mais j'ai trouvé cette ligne de code qui le fait fonctionner. Donc remplace la ligne CreateObject par la ligne ci-dessous.
VB:
    CreateObject("WScript.Shell").Run CreateObject("Scripting.FileSystemObject").GetFile(emplacement & fichier_nom).ShortPath
Bonne soirée.
 

Vieupot

XLDnaute Occasionnel
Encore merci à vous, je vais également tester la modif de Cathodique dès que j'aurai un peu plus de temps et vous tiendrez informé
A bientôt chers amis contributeurs....j'ai encore beaucoup à faire :( et surtout beaucoup à apprendre :).
Mais j'avance !
Bernard
 

Discussions similaires

Statistiques des forums

Discussions
312 104
Messages
2 085 349
Membres
102 869
dernier inscrit
radyreth