Comment ouvrir un dossier avec VBA

Résolu
supercopain -  
 debutant_en_macro -
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

Résumé de la discussion

Une demande porte sur une macro Excel/VBA qui ouvre automatiquement un dossier dont le nom est issu d'une cellule ou d'une liste, notamment en utilisant des identifiants comme E1234. Plusieurs solutions ont été partagées, incluant l’utilisation de ShellExecute pour lancer l’exploration du dossier, et des variantes avec des méthodes FSO (FileSystemObject) pour repérer le dossier correspondant et l’ouvrir. Des échanges évoquent aussi la préparation d’un message d’avertissement ou de progression et des optimisations pour éviter de scanner tous les dossiers à chaque exécution, notamment en limitant la recherche à la correspondance.

Bobot (l'IA à votre service)
  1. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    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