XL 2013 Ouvrir une fenetre d'ouverture de fichier avec le chemin du classeur courant

juicelink

XLDnaute Nouveau
Bonjour tout le monde :)

je me permets de vous embêter car je ne trouve pas la solution à mon problème malgré mes recherches
Je souhaite via vba permettre à l'utilisateur de selectionner un fichier excel qui me permettra de faire plein de trucs avec
je souhaiterai que le chemin proposé par défaut soit le chemin du classeur courant (celui via lequel est lancé la macro)

j'ai beau mettre le code qui me semblait adéquat, il me propose systématiquement le chemin C:\Users\[utilisateur]\Documents

voila mon code :
le FichierSource étant celui que l'utilisateur choisira

Code:
Sub MaisPourquoiCaMarchePas()
Dim FichierSource As String

ChDir Workbooks(ActiveWorkbook.Name).Path
FichierSource = Application.GetOpenFilename()
    If FichierSource = "Faux" Then Exit Sub
Workbooks.Open FichierSource

End Sub


auriez vous une idée s'il vous plait ?
merci beaucoup et très bonne journée,
julien
 
Solution
À moins que le classeur actif soit sur un chemin réseau. Dans ce cas il faut changer de stratégie.
Il vous faut ce code :
VB:
#If VBA7 Then
    Private Declare PtrSafe Function SetCurrentDirectory Lib "kernel32" _
        Alias "SetCurrentDirectoryA" (ByVal lpPathName As String) As Long
#Else
    Private Declare Function SetCurrentDirectory Lib "kernel32" _
        Alias "SetCurrentDirectoryA" (ByVal lpPathName As String) As Long
#End If
Et faire :
VB:
SetCurrentDirectory ActiveWorkbook.Path

Jacky67

XLDnaute Barbatruc
Bonjour tout le monde :)

je me permets de vous embêter car je ne trouve pas la solution à mon problème malgré mes recherches
Je souhaite via vba permettre à l'utilisateur de selectionner un fichier excel qui me permettra de faire plein de trucs avec
je souhaiterai que le chemin proposé par défaut soit le chemin du classeur courant (celui via lequel est lancé la macro)

j'ai beau mettre le code qui me semblait adéquat, il me propose systématiquement le chemin C:\Users\[utilisateur]\Documents

voila mon code :
le FichierSource étant celui que l'utilisateur choisira

Code:
Sub MaisPourquoiCaMarchePas()
Dim FichierSource As String

ChDir Workbooks(ActiveWorkbook.Name).Path
FichierSource = Application.GetOpenFilename()
    If FichierSource = "Faux" Then Exit Sub
Workbooks.Open FichierSource

End Sub


auriez vous une idée s'il vous plait ?
merci beaucoup et très bonne journée,
julien
Bonjour,
Essaye avec
VB:
ChDir ThisWorkbook.Path
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil

;)
VB:
Sub MaisPourquoiCaMarche()
Dim FichierSource
FichierSource = Application.GetOpenFilename("Excel My Love (*.xl??), *.xl??")
If FichierSource = False Then FichierSource = ThisWorkbook.Path
MsgBox "J'ai sélectionné:" & Chr(13) & FichierSource
End Sub
 

Dranreb

XLDnaute Barbatruc
À moins que le classeur actif soit sur un chemin réseau. Dans ce cas il faut changer de stratégie.
Il vous faut ce code :
VB:
#If VBA7 Then
    Private Declare PtrSafe Function SetCurrentDirectory Lib "kernel32" _
        Alias "SetCurrentDirectoryA" (ByVal lpPathName As String) As Long
#Else
    Private Declare Function SetCurrentDirectory Lib "kernel32" _
        Alias "SetCurrentDirectoryA" (ByVal lpPathName As String) As Long
#End If
Et faire :
VB:
SetCurrentDirectory ActiveWorkbook.Path
 

Phil69970

XLDnaute Barbatruc
Bonjour à vous tous

Voir le code original ici

VB:
Sub MaisPourquoiCaMarchePas()
Dim chemin As String
Dim TempDrive As String
Dim ThePath As String
Dim UserDir As String
Dim UserDrive As String

UserDrive = Left(CurDir, 1) 'On Mémorise les Paramètres du User
UserDir = CurDir  ' idem

chemin = ThisWorkbook.path

TempDrive = Left(chemin, 1) 'le lecteur mappé sur un serveur réseau
ThePath = chemin 'à ajuster au répertoire contenant tes classeurs

ChDrive TempDrive
ChDir ThePath

'Recupération du chemin et nom fichier d'extraction
chemin = Application.GetOpenFilename

ChDrive UserDrive 'On remet les paramètres du User
ChDir UserDir 'idem

End Sub

@Phil69970
 

juicelink

XLDnaute Nouveau
Bonsoir le fil

;)
VB:
Sub MaisPourquoiCaMarche()
Dim FichierSource
FichierSource = Application.GetOpenFilename("Excel My Love (*.xl??), *.xl??")
If FichierSource = False Then FichierSource = ThisWorkbook.Path
MsgBox "J'ai sélectionné:" & Chr(13) & FichierSource
End Sub

hello !
merci de ton message
alors ca ne fonctionne pas mieux non plus, mais le truc trop fort c'est que dans le msgbox, il affiche le bon chemin !
 

Staple1600

XLDnaute Barbatruc
Re

C'était évident, non? lol
VB:
Sub MaisPourquoiCaMarcheMieux()
Dim FichierSource
FichierSource = Application.GetOpenFilename("Excel My Love (*.xl??), *.xl??")
If FichierSource = False Then FichierSource = ThisWorkbook.Path
Workbooks.Open FichierSource
End Sub
test OK chez moi
(je le sais, je viens de le faire pendant que ma tisane infuse ;)
 

juicelink

XLDnaute Nouveau
Bonjour à vous tous

Voir le code original ici

VB:
Sub MaisPourquoiCaMarchePas()
Dim chemin As String
Dim TempDrive As String
Dim ThePath As String
Dim UserDir As String
Dim UserDrive As String

UserDrive = Left(CurDir, 1) 'On Mémorise les Paramètres du User
UserDir = CurDir  ' idem

chemin = ThisWorkbook.path

TempDrive = Left(chemin, 1) 'le lecteur mappé sur un serveur réseau
ThePath = chemin 'à ajuster au répertoire contenant tes classeurs

ChDrive TempDrive
ChDir ThePath

'Recupération du chemin et nom fichier d'extraction
chemin = Application.GetOpenFilename

ChDrive UserDrive 'On remet les paramètres du User
ChDir UserDir 'idem

End Sub

@Phil69970

Hello !
quand la macro arrive sur le "ChDrive TempDrive", j'ai ce message d'erreur "Erreur d'execution '5' : argument ou appel de procédure incorrect"

en effet, le chemin visé se trouve sur un lecteur réseau
 

juicelink

XLDnaute Nouveau
À moins que le classeur actif soit sur un chemin réseau. Dans ce cas il faut changer de stratégie.
Il vous faut ce code :
VB:
#If VBA7 Then
    Private Declare PtrSafe Function SetCurrentDirectory Lib "kernel32" _
        Alias "SetCurrentDirectoryA" (ByVal lpPathName As String) As Long
#Else
    Private Declare Function SetCurrentDirectory Lib "kernel32" _
        Alias "SetCurrentDirectoryA" (ByVal lpPathName As String) As Long
#End If
Et faire :
VB:
SetCurrentDirectory ActiveWorkbook.Path

Bingo !
ça marche impec
merci beaucoup !!!!
 

Discussions similaires

Statistiques des forums

Discussions
312 069
Messages
2 085 041
Membres
102 764
dernier inscrit
nestu