Code VBA pour trouver chemin d'acces fichier
Bonsoir à tous
Toujours plein de joie à partager mes difficultés avec vous.
J'espère un jour pouvoir apporter des solutions aux problèmes d'autres personnes.
Sur ceux voici mon soucis:
J'ai un DOSSIER contenant des fichiers PDF et un fichier EXCEL. A partir du fichier Excel il y'a des macros qui permettent d'éditer certains fichiers pdf du DOSSIER.
Le pire est que sur chaque machine ou le DOSSIER doit étre installé, je suis obligé d'adapter les chemins d'accès ce qui est fastidieux.
Je souhaiterai ci-possible qu'on m'aide à automatiser le chemin d'accès de sorte que quelque soit l'emplacement du dossier et de la session de l'utilisateur, que ca prenne automatiquement le chemin d'accès des fichiers.
Ci-dessous un modèle de code :
Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
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
Sub Imprimer_P()
Dim NomFichier As String
Dim x As Long
x = FindWindow("XLMAIN", Application.Caption)
NomFichier = "C:\Documents and Settings\PA0171\mes documents\SGIIOC\conditions générales.pdf"
ShellExecute x, "print", NomFichier, "", "", 1
End SubN.B : si tous les codes contenus dans les modules et dont le chemin d'accès =
"C:\Documents and Settings\PA0171\mes documentsest la partie qui doit s'adapter à la machine de chaque utilisateur.
Merci
Bonsoir Zombe ::wink:
Essaye avec ce code
Sub Imprimer_P()
Dim NomFic As String, sPath As String
Dim x As Long
x = FindWindow("XLMAIN", Application.Caption)
sPath = Environ("USERPROFILE")
sPath = sPath & "\mes documents\SGIIOC\"
NomFic = "conditions générales.pdf"
ShellExecute x, "print", sPath & NomFic, "", "", 1
End SubA+
Merci BrunoM45 pour ta proposition.
Je l'ai testé sous ma session et ca marche bien chez moi.
Et si par exemple je place le dossier dans C que dois-je faire pour que ca marche également? Faut-il tout simplement remplacer mes documents par C tout simplement?
Dans un code qui me permet d'envoyer des mails à mes clients, je joint des pièces dont le chemin d'accès est :"C:\Documents and Settings\PA0171\mes documents\SGIIOC\conditions générales.pdf". Peut-on également faire de sorte que le chemin d'accès des pièces-jointes s'adaptent automatiquement à la session de l'utilisateur?
N.B : les fichiers à joindre se trouvent aussi dans le même dossier SGIIOC.
Bonne compréhension
Bonjour Zombe
Et si par exemple je place le dossier dans C que dois-je faire pour que ca marche également? Faut-il tout simplement remplacer mes documents par C tout simplement?
Il faut mettre dans la variable "sPath" le chemin d'accès complet au fichier
C'est ce que j'ai fait ans mon code, comme tu l'avais demandé dans ton 1er postDans un code qui me permet d'envoyer des mails à mes clients, je joint des pièces dont le chemin d'accès est :"C:\Documents and Settings\PA0171\mes documents\SGIIOC\conditions générales.pdf". Peut-on également faire de sorte que le chemin d'accès des pièces-jointes s'adaptent automatiquement à la session de l'utilisateur?
sPath = Environ("USERPROFILE")Récupère le chemin d'accès du profil utilisateur, si tu te log en tant que "PA0171"
le chemin d'accès sera : "C:\Documents and Settings\PA0171"
sPath = sPath & "\mes documents\SGIIOC\"Ensuite j'ajoute à ce chemin, le chemin d'accès du dossier "Mes documents" + dossier "SGIIOC"
J'espère que ce sera plus clair pour toi
A+
Merci pour tes brillantes explications qui m'ont permis de comprendre ton code.
J'ai tenté de d'ajuster avec le code ci-dessous notamment pour les pièces jointes mais je passe à côté.
Je préfère mettre tout le code afin que vous puissiez m'aider.
Sub Mail_PA()
' Works in Excel 2000, Excel 2002, Excel 2003, Excel 2007, Excel 2010, Outlook 2000, Outlook 2002, Outlook 2003, Outlook 2007, Outlook 2010.
' This example sends the last saved version of the Activeworkbook object .
Dim OutApp As Object
Dim OutMail As Object
Dim texte As String
Dim I As String
Dim NomFic As String, spath As String
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
I = Range("B29").Value
texte = texte & Range("B39").Value & " le, " & Range("E17").Value & vbCrLf & vbCrLf
texte = texte & "A" & vbCrLf
On Error Resume Next
With OutMail
.To = Range("b29").Value
.CC = ""
.BCC = ""
.Subject = "Bienvenue dans votre"
.Body = texte
.Attachments.Add ("C:\Documents and Settings\bf0117\mes documents\SGIIOC\Notice d'information.pdf")
.Attachments.Add ("C:\Documents and Settings\bf0117\bureau\mes documents\Notice d'information2.pdf")
.Send
End With
On Error GoTo 0
Set OutMail = Nothing
Set OutApp = Nothing
End Sub