Definir Chemin d'un dossier pour macro

Delux

XLDnaute Occasionnel
Bonjour a tous et a toutes,

Desole pour les accents je bosse sur QWERTY.

Je me creuse la tete depuis plusieurs jours pour essayer de definir un chemin de repertoire qui va etre utilise par une macro.

J'aimerais pouvoir definir le repertoire ("pfile") moi meme, en choisissant le dossier, car les fichiers a selectionner pour ma macro pourront etre sauvegardes dans differents repertoires:

Code:
pfile = ActiveWorkbook.Path & "\Users\"
nfile = Dir(pfile & "*.xls")

J'ai bien trouve des macros pour selectionner des chemins d'acces vers les dossiers mais je n'arrive pas a les appliquer pour que "pfile" se modifie en fonction de la selection.

Code:
Sub test()

Dim Dossier As FileDialog
Set Dossier = Application.FileDialog(msoFileDialogFolderPicker)
MsgBox "Select a folder where the Users' templates are saved"
Dossier.Show
MsgBox Dossier.SelectedItems(1)

End Sub

Quelqu'un aurait-il une solution?

Merci d'avance

Cordialement,

Delux
 

kjin

XLDnaute Barbatruc
Re : Definir Chemin d'un dossier pour macro

Bonsoir,
avec ce code cela devrait ouvrir directement dans le répertoire pIni, chez moi ça ouvre
Effectivement, ça ne fonctionne que si pIni est déclaré variant (et non string...avec la froidure sans doute) ou indiqué littéralement dans le paramètre !
Sinon, utiliser la méthode NameSpace du Shell
Code:
Sub RechercheDossier()
Dim oSh As Object, pIni As Object, pfile As Object
Set oSh = CreateObject("Shell.Application")
Set pIni = oSh.Namespace("D:\")
On Error Resume Next
Set pfile = oSh.BrowseForFolder(0&, "Sélectionnez un dossier", &H1 + &H40 + &H200 + &H4000, pIni)
If Not pfile Is Nothing Then
    MsgBox pfile.items.Item.Path
End If
On Error GoTo 0
Set pIni = Nothing
Set pfile = Nothing
Set oSh = Nothing
End Sub
En outre, j'avais mal placé la gestion d'erreur pour le cas ou l'item sélectionné est un fichier et non un dossier (on peut aussi tester la propriété FolderItem.Isfolder du Shell) et surtout j'avais oublié d'éteindre la lumière en sortant
A+
kjin
 

jpb388

XLDnaute Accro
Re : Definir Chemin d'un dossier pour macro

bonjour a tous
pour choisir un chemin je connais cela

Code:
Sub test()
ch = Application.GetSaveAsFilename
MsgBox ch
End Sub
peut on m'expliquer la différence entre les deux et ainsi de connaitre l'intérêt de choisir celle ci ou celle la

merci d'avance
 

kjin

XLDnaute Barbatruc
Re : Definir Chemin d'un dossier pour macro

Bonjour,
La question était d'ouvrir une boite de dialogue qui permette de lister les dossiers et les fichiers et de renvoyer le chemin du dossier choisi en appuyant sur OK
Il y a plusieurs solutions, celle que j'ai transmise en est une parmi d'autre mais elle répond exactement
On peut, pourquoi pas, utiliser GetSaveAsFilename, mais appuyer sur le bouton enregistrer pour choisir un dossier peut dérouter, d'autant qu'il faut renseigner le nom du fichier; A cela s'ajoute que le classeur n'existant pas à ce moment, il faudra extraire le chemin de la variable renvoyée
Code:
Dim x
x = Application.GetSaveAsFilename(fileFilter:="Classeurs Excel (*.xls), *.xls")
If x <> False Then
    For i = 1 To Len(x)
        If Mid(x, i, 1) = "\" Then pfile = Mid(x, 1, i)
    Next
    MsgBox pfile
End If
A+
kjin
 

Yaloo

XLDnaute Barbatruc
Re : Definir Chemin d'un dossier pour macro

Bonjour à tous,

Merci kjin pour cette explication.

Bonsoir,

Effectivement, ça ne fonctionne que si pIni est déclaré variant (et non string...avec la froidure sans doute) ou indiqué littéralement dans le paramètre !
Sinon, utiliser la méthode NameSpace du Shell
Code:
Sub RechercheDossier()
Dim oSh As Object, pIni As Object, pfile As Object
Set oSh = CreateObject("Shell.Application")
Set pIni = oSh.Namespace("D:\")
On Error Resume Next
Set pfile = oSh.BrowseForFolder(0&, "Sélectionnez un dossier", &H1 + &H40 + &H200 + &H4000, pIni)
If Not pfile Is Nothing Then
    MsgBox pfile.items.Item.Path
End If
On Error GoTo 0
Set pIni = Nothing
Set pfile = Nothing
Set oSh = Nothing
End Sub
En outre, j'avais mal placé la gestion d'erreur pour le cas ou l'item sélectionné est un fichier et non un dossier (on peut aussi tester la propriété FolderItem.Isfolder du Shell) et surtout j'avais oublié d'éteindre la lumière en sortant
A+
kjin

A+

Martial
 

Discussions similaires

Statistiques des forums

Discussions
312 675
Messages
2 090 799
Membres
104 667
dernier inscrit
gwtr