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 des fichiers d'un rep. dans un combobox integré à un ruban perso


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4
    Par défaut Lister des fichiers d'un rep. dans un combobox integré à un ruban perso
    Bonjour à tout le forum !

    J'ai un léger soucis, j'aimerai lister les fichier d'un répertoire (bien défini) dans un combobox (intégré à un groupe de control DANS mon ruban perso), je me suis servi d'un tuto dispo sur le net, cependant je planche pour récuperer les noms de chaque fichier dans la procédure ci dessous (tout fonctionne bien pour le reste) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub ComboLabel(control As IRibbonControl, index As Integer, ByRef returnedVal)
    ChDir "C:\Users\nikovb\Documents\XLS"
    path2 = Dir("*.*", 16)
    While path2 <> ""
    returnedVal = path2
    path2 = Dir
    Wend
    End Sub
    Quand j'execute le code pas à pas, la valeur de 'returnedval' change bien et m'indique à chaque boucle un nom de fichier different, mais une fois la procedure finie, je n'ai que le nom du fichier le plus recent (autant de fois qu'il y a d'item dans le repertoire.)

    Si quelqu'un pouvait me venir en aide svp, ou me donner un petit indice, je chercherais

    Merci d'avance !

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 45
    Par défaut
    Salut,

    La solution est de mettre la liste des noms de fichiers dans un tableau.

    essaie ça :
    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
    Option Explicit
     
    Sub test()
     
        Dim liste() As String
     
        liste = ListerFichiersRepertoire("C:")
     
    End Sub
     
    Public Function ListerFichiersRepertoire(ByVal Repertoire As String) As String()
     
        Dim fso As Object, Dossier As Object, NomDossier
        Dim Files As Object, File As Object, i As Integer
        Dim buffer() As String
     
        Set fso = CreateObject("Scripting.FileSystemObject")
        NomDossier = Repertoire 'ChoisirDossier
        If NomDossier = "" Then Exit Function
        Set Dossier = fso.getfolder(NomDossier)
     
        Set Files = Dossier.Files
        If Files.Count <> 0 Then
            ReDim buffer(Files.Count - 1)
            For Each File In Files
            '    SetAttr Repertoire + File.Name, vbNormal
                buffer(i) = File.Name
                i = i + 1
            Next
        End If
     
        ListerFichiersRepertoire = buffer
     
    End Function

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4
    Par défaut
    Merci j'ai donc adapté ta solution et essayé.

    Mais je n'ai pas de nom de fichier qui s'affiche dans le control de mon ruban :'(

    N'y a t il pas un moyen de boucler dans la procédure du control directement
    et ainsi recup le nom du fichier ?


    Je mets les procedures du control combobox de mon ruban personnel :

    Là, pas de soucis la variable me retourne le bon nombre de fichier present dans le repertoire voulu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub NbItemCombo(control As IRibbonControl, ByRef returnedVal)
    ChDir "C:\rep_exemple\"
    path2 = Dir("*.*", 16)
     
        While path2 <> ""
            returnedVal = returnedVal + 1
            path2 = Dir
        Wend
     
    End Sub
    Par contre ici, erreur, j'ai le nom de fichier le plus récent qui se repete autant de fois que j'ai de fichier dans mon repertoire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Sub ComboLabel(control As IRibbonControl, index As Integer, ByRef returnedVal)
    ChDir "C:\rep_exemple\"
    path2 = Dir("*.*", 16)
        While path2 <> ""
            returnedVal = path2
            path2 = Dir
        Wend
     
    End Sub
    Et ici pas de soucis, le fichier s ouvre bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Sub ChangeCombo1(control As IRibbonControl, text As String)
    Workbooks.Open "C:\rep_exemple\" & text
    Sheets(1).Activate
    End Sub

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Salut :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    repertoire = "C:\rep_exemple\"
    path2 = Dir(repertoire & "*.*", vbNormal Or vbHidden)
        While path2 <> ""
            returnedVal = path2
                 MsgBox path2
            path2 = Dir
      Wend

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4
    Par défaut
    salut,

    ah ce bon vieux Msgbox... j 'y avais pensé oui, mais bizarement ca tourne en boucle et ne s arrete jamais..
    du coup je l'ai retiré de la procédure pour tester sans, et ta derniere soluce, Ucfoutu, me retourne le meme resultat que precedement :/, j'ai toujours le nom de fichier le plus recent qui se repete autant de fois qu'il y a de fichier ..
    ah si seulement ce control ne me servait qu'a changer de feuilles !

    Ce que je ne comprend pas, pour quel raison la variable ne garde pas en memoire les anciennes valeurs trouvées (noms trouvés dans le rep).

    Car là je viens de tester en enregistrant l'index des fichiers trouvés dans la variable, ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub ComboLabel(control As IRibbonControl, index As Integer, ByRef returnedVal)
     
    Repertoire = "C:\rep_exemple\"
    path2 = Dir(Repertoire & "*.*", vbNormal Or vbHidden)
        While path2 <> ""
            returnedVal = index
                 ' MsgBox path2
            path2 = Dir
      Wend
    End Sub
    Et dans le combobox j'ai bien 0-1-2... jusqu'à 10 qui s'affichent, et non pas 10-10-10-10... (..11 fois de suite) ..erf j'espere être clair dans mes propos..desolé :s

    Merci encore pour votre aide, qui me fait tout de même avancé.

  6. #6
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Par défaut
    bonsoir

    Dans le fichier xml de personnalisation :

    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
    <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="RubanCharge"
    >
    <ribbon startFromScratch="false">
    <tabs>
    <tab id="OngletPerso" label="OngletPerso" visible="true">
       <group id="Projet01" label="Projet 01">
          <!-- getItemCount="NbItemCombo" va définir le nombre d'items dans la combobox. --> 
          <!-- getItemLabel="ComboLabel" permet d'alimenter la combobox. -->
          <!-- onChange="ChangeCombo1" gère l'évènement 'Change' dans la combobox. -->
          <comboBox id="Combo1" label="Choix : " getItemCount="NbItemCombo" getItemLabel="ComboLabel"
             onChange="ChangeCombo1" />
       </group>
    </tab>
    </tabs>
    </ribbon>
    </customUI>

    Dans le module objet ThisWorkbook du classeur :

    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
    Option Explicit
     
    Private Sub Workbook_Open()
        Dim Chemin As String, Fichier As String
        Dim i As Integer
     
        'Définit le répertoire contenant les fichiers
        Chemin = "C:\Documents and Settings\mimi\dossier\"
     
        'Boucle sur tous les fichiers du répertoire.
        Fichier = Dir(Chemin & "*.*")
     
        Do While Len(Fichier) > 0
            i = i + 1
            'écrit le résultat dans le tableau.
            ReDim Preserve Tableau(1 To i)
            Tableau(i) = Fichier
            Fichier = Dir()
        Loop
    End Sub


    Dans un module standard du classeur :

    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
    Option Explicit
     
    Public MonRuban As IRibbonUI
    Public Tableau() As String
     
    'Callback for customUI.onLoad
    'Est déclenché lors du chargement du ruban personnalisé.
    Sub RubanCharge(ribbon As IRibbonUI)
        Set MonRuban = ribbon
    End Sub
     
     
    'Callback for Combo1 getItemCount
    Sub NbItemCombo(control As IRibbonControl, ByRef returnedVal)
        'Définit le nombre d'éléments dans la combobox
        returnedVal = UBound(Tableau)
    End Sub
     
     
    'Callback for Combo1 getItemLabel
    Sub ComboLabel(control As IRibbonControl, index As Integer, ByRef returnedVal)
        'Alimente le Combobox à partir des données du tableau
         returnedVal = Tableau(index + 1)
    End Sub
     
     
    'Callback for Combo1 onChange
    Sub ChangeCombo1(control As IRibbonControl, text As String)
        'Renvoie l'élément sélectionné dans la combobox
        MsgBox text
    End Sub


    bonne soirée
    michel

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 12/06/2015, 01h44
  2. [XML] Lister des fichiers dans des répertoires
    Par voxiz dans le forum Bibliothèques et frameworks
    Réponses: 10
    Dernier message: 16/02/2010, 17h25
  3. [c#] lister des fichiers dans une zone de liste !
    Par vto59 dans le forum Windows Mobile
    Réponses: 1
    Dernier message: 14/01/2010, 15h51
  4. Lister des fichiers contenus dans un répertoire
    Par mithrendil dans le forum Langage
    Réponses: 5
    Dernier message: 01/05/2007, 10h27
  5. Lister des fichiers dans un repertoire
    Par K.othmane dans le forum Langage
    Réponses: 1
    Dernier message: 23/12/2005, 12h14

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