IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Lister fichiers de dossier dans listbox ou userform


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 855
    Par défaut Lister fichiers de dossier dans listbox ou userform
    Bonjour

    J'ai différents dossiers (nommés par "nom des personnes"), dans lequel se trouve des photos, des documents, etc...
    J'ai un tableau Excel avec des noms (colonne A), prénoms (colonne B). En colonne C, j'aimerai mettre un lien hypertexte ou déclencheur pour que lorsque je clique dessus, la liste des fichiers présents dans le dossier s'affiche et que je puisse sélectionner son ouverture.

    Exemple : Dossier "Eric", dans le C, contient Photo1 (jpeg), photo2 (jpeg), fichier "essais" (fichier word), fichier "tab" (excel)
    Je clique sur le "déclencheur" de la colonne C, et une listebox ou un Userform s'affiche et liste les fichiers. Je sélectionne photo2 et l'image s'ouvre....

    J'ai regardé dans la FAQ : http://faqvbnet.developpez.com/?page=form_lb qui semblerait faire cette opération, mais je l'ai mis dans un classeur, en Thisworkbook, mais rien ne se passe.....Je pense que c'est normal car il n'y a pas le chemin, mais je ne vois pas comment je peux utiliser ce code....

    Une petite aide ?

    Merci,

    A+

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Teste ce qui suit et adapte. A mettre dans le module de la feuille, ajouter sur la feuille un bouton ActiveX ainsi qu'une ListBox ActiveX. Pour tester, il te faut adapter la constant Lecteur (ici D:\) et sélectionner la cellule contenant le nom du dossier que tu souhaite ouvrir puis tu clique sur le bouton, la ListBox devrait se remplir des noms des fichiers contenus dans le dossier ensuite, 1 clic dans la Listbox sur un nom devrait ouvrir le fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
     
    Private Declare Function OuvrirProg _
                    Lib "shell32.dll" _
                    Alias "ShellExecuteA" ( _
                    ByVal hwnd As Long, _
                    ByVal lpszOp As String, _
                    ByVal lpszFile As String, _
                    ByVal lpszParams As String, _
                    ByVal lpszDir As String, _
                    ByVal FsShowCmd As Long) As Long
     
    Dim Nom As String
    Const Lecteur As String = "D:\"
     
    Private Sub CommandButton1_Click()
     
        Dim Tbl() As String
        Dim I As Integer
     
        'ici, le nom du dossier est dans la cellule active, à adapter...
        Nom = ActiveCell
     
        'le lecteur est D, à adapter...
        Tbl = Fichiers(Lecteur & Nom)
     
        'en colonne "A" de la feuille active si pas vide
        If Not (Not Tbl) Then
     
            ListBox1.Clear
     
            For I = 1 To UBound(Tbl)
     
                ListBox1.AddItem Tbl(I)
     
            Next I
     
        End If
     
    End Sub
     
    Private Sub ListBox1_Click()
     
        Dim Retour As Long
        Dim Fichier As String
     
        Fichier = Lecteur & Nom & "\" & ListBox1.Text
     
        'au cas où "Nom" soit égal à ""
        Fichier = Replace(Fichier, "\\", "\")
     
        If InStr(ListBox1.Text, ".xls") Or InStr(ListBox1.Text, ".csv") Then
     
            Workbooks.Open (Fichier)
     
        Else
     
            Retour = OuvrirProg(0, "open", Fichier, vbNullString, vbNullString, 3)
     
        End If
     
    End Sub
     
    Function Fichiers(Chemin As String) As String()
     
        Dim TableauFichiers() As String
        Dim Fichier As String
        Dim I As Integer
     
        'complète le chemin le cas échéant
        If Right(Chemin, 1) <> "\" Then Chemin = Chemin & "\"
     
        'boucle dans le dossier jusqu'à la fin des fichiers et rempli le tableau
        Fichier = Dir(Chemin)
     
        Do While (Len(Fichier) > 0)
     
            I = I + 1
     
            ReDim Preserve TableauFichiers(1 To I)
     
            TableauFichiers(I) = Fichier
     
            Fichier = Dir()
     
        Loop
     
        Fichiers = TableauFichiers()
     
    End Function
    Hervé.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 855
    Par défaut
    Merci Theze,

    J'ai bien compris la manip, et ton code et je te remercie. Par contre, je ne suis pas très à l'aise avec les Userform et Listbox...et le code plante au premier et je pense qu'il doit manquer un truc dans ma ListBox1, mais je ne vois pas où....

    Si tu pouvais me donner un petit coup de main...merci (je mets l'exemple en PJ)

    Une autre question : est-on obligé de passer par un CommandButton ? En effet, j'ai 1000 lignes, donc, d'après ce que j'ai compris de ton code : on sélectionne en colonne A, le nom, on clique sur le CommandButton et la ListBox (enfin quand elle est bien configurée...) apparait. Je pensais mettre une croix, en colonne C, qui indiquerait si il existe un dossier (en mettant une "X" par exemple) et lorsque je clique dessus, cela génère la ListBox .....

    Merci pour ton aide,

    A+

  4. #4
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Bonjour,

    et ton code il plante quoi ?


    J'ai bien compris la manip, et ton code et je te remercie. Par contre, je ne suis pas très à l'aise avec les Userform et Listbox...et le code plante au premier

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 855
    Par défaut
    Merci bbil,

    j'ai le message :
    Erreur de Compilation : Membre de méthode ou de données introuvable
    et le code s'arrête au premier ListBox1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListBox1.AddItem Tbl(I)
    (J'ai mis en , c'est pour cela que je parle du "premier" ListBox1


    (Par contre, je n'ai pas compris pourquoi tu m'as enlevé ma PJ : je pense que c'est ma ListBox1 qui est mal déclarée, j'ai fait "insérer un Userform", j'ai mis une ListBox, renommé ListBox1, idem dans la partie "caption", et cela ne fonctionne pas....donc, je ne comprends pas où ça coince....d'où ma PJ...)


    Merci,

    A+

  6. #6
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Le code est bien placé dans un userfom , sur lequel se trouve une listbox nommée listbox1 ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. lister les fichiers d'un dossier dans un jar éxécutable
    Par Mageni dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 03/03/2010, 18h08
  2. Ordre des fichiers et dossiers dans un dossier
    Par piotrr dans le forum Windows
    Réponses: 1
    Dernier message: 19/08/2009, 01h18
  3. Recherche sur Format + resultat dans Listbox de Userform
    Par mater31 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/09/2008, 19h01
  4. Lister restauration du système dans ListBox
    Par shell13010 dans le forum Débuter
    Réponses: 1
    Dernier message: 11/04/2008, 08h54
  5. Lister le contenu d'un dossier dans une ListBox
    Par zidenne dans le forum Langage
    Réponses: 2
    Dernier message: 25/10/2005, 12h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo