Macro Choisir un classeur dans un dossier

franck70

XLDnaute Junior
Bonjour,

J'ai un problème tout bête (voir ridicule) mais je ne trouve rien sur internet ni sur le forum.

J'ai une macro qui commence par ouvrir un fichier dont le nom peut changer, mais qui est toujours dans le même dossier. Quel est le code pour ne pas ouvrir un fichier mais juste ouvrir le dossier et après, il y a juste à sélectionner le bon fichier ?

Merci beaucoup pour votre aide.
 

Staple1600

XLDnaute Barbatruc
Re : Macro Choisir un classeur dans un dossier

Bonsoir à tous


Tu dois chercher la lumière éteinte alors ;)

Un exemple possible
Code:
Sub a()
Dim MONDOSSIER$
MONDOSSIER = "c:\temp" ' à adapter selon besoin
Set ShellApp = CreateObject("Shell.Application").BrowseForFolder(0, "Il est beau mon dossier, il est frais", 0, MONDOSSIER)
End Sub

Et un autre (de la vieille école)
Code:
Option Explicit
Public Type BROWSEINFO
    hOwner As Long
    pidlRoot As Long
    pszDisplayName As String
    lpszTitle As String
    ulFlags As Long
    lpfn As Long
    lParam As Long
    iImage As Long
End Type
 
 '32-bit API declarations
Declare Function SHGetPathFromIDList Lib "shell32.dll" _
Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) _
As Long
 
Declare Function SHBrowseForFolder Lib "shell32.dll" _
Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long
 
 
Sub Test()
'code de daniel.c -> mars 2008
    Dim Msg As String
    Msg = "Choisir un dossier"
    MsgBox GetDirectory(Msg)
End Sub
 
Function GetDirectory(Optional Msg) As String
    Dim bInfo As BROWSEINFO
    Dim path As String
    Dim r As Long, x As Long, pos As Integer
     
     '   Root folder = Desktop
    bInfo.pidlRoot = 0&
     
     '   Title in the dialog
    If IsMissing(Msg) Then
        bInfo.lpszTitle = "Select a folder."
    Else
        bInfo.lpszTitle = Msg
    End If
     
     '   Type of directory to return
    bInfo.ulFlags = &H1
     
     '   Display the dialog
    x = SHBrowseForFolder(bInfo)
     
     '   Parse the result
    path = Space$(512)
    r = SHGetPathFromIDList(ByVal x, ByVal path)
    If r Then
        pos = InStr(path, Chr$(0))
        GetDirectory = Left(path, pos - 1)
    Else
        GetDirectory = ""
    End If
End Function
 
Dernière édition:

franck70

XLDnaute Junior
Re : Macro Choisir un classeur dans un dossier

Bonjour Staple1600,

Merci pour ton aide. J'ai peut-être pas utilisé les bons termes dans ma recherche, mais je t'assure que je n'ai rien trouvé

En utilisant ton code, il m'ouvre effectivement une boite de dialogue pour sélectionner un dossier, mais je n'ai pas les fichiers qui apparaissent pour sélectionner le bon fichier.
Par ailleurs, il "refuse" de mettre le chemin pré-indiqué. Il se met à la racine et non immédiatement dans le répertoire indiqué.

Il faut pas utiliser un getopenfilename ? J'ai trouvé ça sur l'aide de Microsoft. Si je spécifie le chemin quelque part dans getopenfilename, ça ne pourrait pas marcher ?

fileToOpen = Application _
.GetOpenFilename("Text Files (*.txt), *.txt")
If fileToOpen <> False Then
MsgBox "Open " & fileToOpen
End If

Merci encore pour ton aide
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Macro Choisir un classeur dans un dossier

Re

Ce ne sont que des exemples
(j'ai rajouté un seconde code dans mon premier message)

Désormais tu as désormais à ta disposition des mots-clés pour faire des recherches qui cette fois-ci aboutiront ;)
CreateObject("Shell.Application").BrowseForFolder
ou
SHBrowseForFolder

Sélectionnes un des deux mots en bleu puis clic-droit et choisis Rechercher XXXXX avec G..gle

Tu peux aussi cliquer Ce lien n'existe plus ce sera plus rapide ;)
Regardes notamment la procédure nommée Select_File_Or_Files_Windows
 
Dernière édition:

franck70

XLDnaute Junior
Re : Macro Choisir un classeur dans un dossier

Bon, voilà ce que j'ai réussi à pondre pour ceux qui rencontreraient un jour le même problème. C'est peut-être pas très académique, mais en tout cas, ça marche et c'est simple...

'Sélectionner le dossier par défaut dans lequel se trouve le fichier
ChDrive "G:"
ChDir "G:\Test"

'ouvre une boite de dialogue pour sélectionner le fichier et l'ouvrir
fileToOpen = Application _
.GetOpenFilename()
Workbooks.Open Filename:=fileToOpen
 

franck70

XLDnaute Junior
Re : Macro Choisir un classeur dans un dossier

Bonjour Staple1600

Je ne comprends pas l'intérêt de tes remarques. Ne t'en déplaise, j'avais vraiment cherché sur internet mais ce que j'avais trouvé ne correspondait jamais à ma demande.
J'ai contourné le problème en mélangeant une réponse à un autre problème un peu différent et un terme trouvé sur internet mais que je n'arrivais pas à utiliser seul.
Mais bon, si ça te fait plaisir de penser que les gens qui posent des questions n'ont pas regardé par eux-même, libre à toi...
 

Dranreb

XLDnaute Barbatruc
Re : Macro Choisir un classeur dans un dossier

Bonsoir.
C'est peut-être pas très académique
Bof, si, pour moi ça l'est, je suggèrerais juste un test derrière :
VB:
Dim FileToOpen As Variant
ChDrive "G:"
ChDir "G:\Test"
FileToOpen = Application.GetOpenFilename()
If VarType(FileToOpen) <> vbString Then Exit Sub ' Pour éviter plantage si opérateur renonce.
Workbooks.Open Filename:=fileToOpen
 

Discussions similaires

Réponses
19
Affichages
687
Réponses
11
Affichages
306

Statistiques des forums

Discussions
312 671
Messages
2 090 764
Membres
104 658
dernier inscrit
amomo