Comment ouvrir un dossier avec VBA

Résolu/Fermé
supercopain - 20 avril 2011 à 23:21
 debutant_en_macro - 4 janv. 2013 à 17:12
Bonjour,

je suis à la recherche d'une macro qui ouvre un dossier dont le nom est dans une liste excel
exemple dans une liste récapitulative j'ai E1234
dans un dossier sur trouve plusieurs dossier, est seul est nommé E1234, blabla
lorsque la cellule de ma liste qui contient E1234 je veux cliquer sur un bouton pour ouvrir le fameux dossier du même nom.

merci beaucoup

<config>Windows xp /office 2003

14 réponses

Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 289
5 mai 2011 à 13:31
J'ai rajouté un message
Pense à mettre en résolu si c'est ok!

le message apparaîtra en bas à gauche de la feuille,
tous les 20 dossiers.
A l'endroit où tu vois 'Prêt'








Option Explicit
Public V As String

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 OuvreDossier()

Dim Target As Range


V = ""
Dim chainePath As String

Set Target = ActiveCell
chainePath = "G:\Docu\R&D\Rapports d'essais"
'chainePath = "C:\Data\2009"

If Not Intersect(Target, Range("A2:A20")) Is Nothing Then  ' la plage qui contient les essais
    Application.ScreenUpdating = False
   
    V = Left(Replace(ActiveCell.Value, "E", "E ", 1), 6)
    Call AfficherListeDossiers(chainePath, CreateObject("scripting.filesystemobject"), V)

    If V <> "" Then

        ShellExecute 0, "explore", V, "", "", 10
    End If
End If

End Sub


Public Sub AfficherListeDossiers(ByVal specdossier As String, ByRef Fso, ByVal leChemin)
'
Dim j As Integer
Dim msgStatusBarre As String

msgStatusBarre = Application.DisplayStatusBar ' sauvegarde

    Dim dossier, fd, sDossier  ' variable de type variant
   ' Set Fso = CreateObject("Scripting.FileSystemObject") ' créé un objet fileSystem
    Set dossier = Fso.GetFolder(specdossier)             ' dossier : héritage de fso
    Set sDossier = dossier.SubFolders                    'sDossier : héritage de dossier
    j = 0
    For Each fd In sDossier                 ' Scanne la collection sDossier
        j = j + 1
        If (j Mod 20) = 0 Then  ' mise à jour du message tous les 20 dossiers
            Application.StatusBar = j & " traités sur : " & sDossier.Count
        End If
        
        If InStr(1, fd.Name, V) > 0 Then
            V = fd
            Exit For
        End If

    Next
   Set sDossier = Nothing
   Set dossier = Nothing
   Application.StatusBar = False
   Application.DisplayStatusBar = msgStatusBarre
End Sub
1