[VBA EXCEL 2003]Lister les noms des dossiers d'un repertoire > listbox

Lister les noms des dossiers d'un repertoire > listbox [VBA EXCEL 2003] - VB/VBA/VBS - Programmation

Marsh Posté le 13-01-2006 à 16:47:51    

Bonjour et bonne année à tous,
 
je cherche à lister les noms des dossiers du repertoire c:\temp et les afficher dans un listbox
 
merci d'avance  
 
j'ai un code qui devrait fonctionner mais je vois pas comment l adapter

Code :
  1. Sub Aff_Feuilles()
  2.      a = 0
  3.      For Each Ws In ActiveWorkbook.Worksheets
  4.          If Ws.Name <> "Total" Then
  5.               If Ws.Name <> "!!!Base!!!" Then
  6.                     ReDim Preserve ListeFeuil(a)
  7.                     ListeFeuil(a) = Ws.Name
  8.                     a = a + 1
  9.                Else
  10.                End If
  11.           Else
  12.           End If
  13.      Next
  14.      If a = 0 Then
  15.           ReDim Preserve ListeFeuil(0)
  16.           ListeFeuil(0) = "aucune feuille"
  17.     Else
  18.     End If
  19. End Sub

Reply

Marsh Posté le 13-01-2006 à 16:47:51   

Reply

Marsh Posté le 13-01-2006 à 22:05:12    

Bonjour,
 
En utilisant la fonction Dir, cela fonctionne en VBA de Word (extrait de l'aide):
 
Sub ChercherRépertoire()
Dim Liste() As String
Dim a As Integer
a = 0
MyPath = "c:\temp\"
MyName = Dir(MyPath, vbDirectory)
Do While MyName <> ""
             ' Ignore le répertoire courant et le répertoire contenant le répertoire courant
    If MyName <> "." And MyName <> ".." Then
            ' Utilise une comparaison au niveau du bit pour vérifier que MyName est un répertoire.
        If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory Then
            ReDim Preserve Liste(a)
            Liste(a) = MyName
        End If  '
    End If
    MyName = Dir    ' Extrait l'entrée suivante
    Loop
ListBox.List = Liste
End Sub

 
Cordialement
 
Epéna

Reply

Marsh Posté le 14-01-2006 à 21:08:10    

La même procédure fonctionne en VBA Excel

Reply

Marsh Posté le 16-01-2006 à 12:10:15    

ok je te remercie je vais regarder

Reply

Marsh Posté le 16-01-2006 à 16:49:40    

j'ai un petit souci :)
 
http://img17.imageshack.us/img17/5194/untitled2copy5ro.th.jpg

Reply

Marsh Posté le 16-01-2006 à 21:18:28    

Bonjour,
Il faut déclarer la variable tableau. On peut faire comme ceci avec une procédure :
 

Code :
  1. Dim Liste() As String
  2. Private Sub CommandButton1_Click()
  3. Call ChercherRépertoire
  4. ListBoxClient.List = Liste
  5. End Sub
  6. Sub ChercherRépertoire()
  7. Dim a As Integer
  8. a = 0
  9. MyPath = "c:\temp\"
  10. MyName = Dir(MyPath, vbDirectory)
  11. Do While MyName <> ""
  12.              ' Ignore le répertoire courant et le répertoire contenant le répertoire courant
  13.     If MyName <> "." And MyName <> ".." Then
  14.             ' Utilise une comparaison au niveau du bit pour vérifier que MyName est un répertoire.
  15.         If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory Then
  16.             ReDim Preserve Liste(a)
  17.             Liste(a) = MyName
  18.             a = a + 1
  19.         End If  '
  20.     End If
  21.     MyName = Dir    ' Extrait l'entrée suivante
  22.     Loop
  23. End Sub


 
Ou bien de cette façon avec une fonction qui renvoit un tableau (Type variant++++++)
 

Code :
  1. Private Sub CommandButton1_Click()
  2. Dim Liste As Variant
  3. Répertoire = "c:\temp\"
  4. Liste = ChercherRépertoire(Répertoire)
  5. ListBoxClient.List = Liste
  6. End Sub
  7. Function ChercherRépertoire(MyPath) As Variant    'La fonction renvoie un tableau
  8. Dim MaListe() As String
  9. Dim a As Integer
  10. a = 0
  11. MyName = Dir(MyPath, vbDirectory)
  12. Do While MyName <> ""
  13.              ' Ignore le répertoire courant et le répertoire contenant le répertoire courant
  14.     If MyName <> "." And MyName <> ".." Then
  15.             ' Utilise une comparaison au niveau du bit pour vérifier que MyName est un répertoire.
  16.         If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory Then
  17.             ReDim Preserve MaListe(a)
  18.             MaListe(a) = MyName
  19.             a = a + 1
  20.         End If  '
  21.     End If
  22.     MyName = Dir    ' Extrait l'entrée suivante
  23.     Loop
  24. ChercherRépertoire = MaListe
  25. End Function


 
Cela devrait fonctionner
Cordialement
 
Epéna

Reply

Marsh Posté le 17-01-2006 à 17:09:47    

j'ai toujours l erreur  
"impossible de definir la propriété list ?

Reply

Marsh Posté le 17-01-2006 à 21:11:48    

Est-ce que le tableau liste a bien été déclaré  dans la zone déclarative pour la procédure?
Dim Liste() As String
 
ou pour la fonction
Private Sub CommandButton1_Click()
Dim Liste As Variant
 
Cela fonctionne en word et excel 97

Reply

Marsh Posté le 18-01-2006 à 10:12:13    

c'est bon ça marche c est parce qu'il y avait pas de repertoire dans le c:\Temp  
 
merci beaucoup

Reply

Marsh Posté le 18-01-2006 à 10:17:58    

voici mon travail corrigé :
 
'la fonction de recherche de nom de repertoire et stockage dans un array

Code :
  1. Function ChercherRépertoire(MyPath) As Variant    'La fonction renvoie un tableau
  2. Dim MaListe() As String
  3. Dim a As Integer
  4. a = 0
  5. MyName = Dir(MyPath, vbDirectory)
  6. Do While MyName <> ""
  7.              ' Ignore le répertoire courant et le répertoire contenant le répertoire courant
  8.     If MyName <> "." And MyName <> ".." Then
  9.             ' Utilise une comparaison au niveau du bit pour vérifier que MyName est un répertoire.
  10.         If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory Then
  11.             ReDim Preserve MaListe(a)
  12.             MaListe(a) = MyName
  13.             a = a + 1
  14.         End If  '
  15.     End If
  16.     MyName = Dir    ' Extrait l'entrée suivante
  17.     Loop
  18.     If a = 0 Then
  19.           ReDim Preserve MaListe(0)
  20.           MaListe(0) = "-----Aucun Client-----"
  21.     Else
  22.     End If
  23.    
  24. ChercherRépertoire = MaListe
  25. End Function


 
la fonction pour rechercher un repertoire et le creer si besoin

Code :
  1. Function RépertoireExiste(Chemin As String) As Boolean
  2. On Error Resume Next
  3. RépertoireExiste = GetAttr(Chemin) And vbDirectory
  4.     If RépertoireExiste = True Then
  5.         Exit Function
  6.     Else
  7.         MkDir (Chemin)
  8.     End If
  9. End Function


 
enfin l'appel des fonctions pour remplir la listbox

Code :
  1. Private Sub Userform_initialize()
  2. Dim Liste As Variant
  3. Dim Répertoire As String
  4. Répertoire = "c:\Facturation\"
  5. Call RépertoireExiste("c:\Facturation\" )
  6. Liste = ChercherRépertoire(Répertoire)
  7. ListBoxClient.List = Liste
  8. End Sub


 
 
merci à vous pour le coup de pouce ( pied plutot ) @++

Reply

Marsh Posté le 18-01-2006 à 10:17:58   

Reply

Marsh Posté le 18-09-2006 à 10:10:18    

bonjour,
 
je commence a utiliser vba/excel depuis peu et la j'ai un probleme que je n'arrive pas à resoudre.
g bien lu tout ce qui ce trouve au dessus et je crois faire la meme chose ke ce que vous avez écrit cependant ca ne fonctionne pas :s
 
voila mon probleme. je veux afficher dans un listbox (ListInfosBox) les données d'une feuille excel cette feuille étant ouverte en parallele. le nombre de colonne et de ligne de cette feuille est variable mais il est recuperé o moment de l'ouverture.
je recupere toutes les données de la feuille dans un tableau et apres je veux mettre le tableau dans la listbox et ca me met le msg d'erreur suivant : "erreur d'execution '380' : impossible de définir la propriété list. valeur de propriete non valide"
 
voila mon code :  

Code :
  1. Sub Liste(iChoix As Integer)
  2.     Dim i As Integer, j As Integer, iCountRow As Integer, iCountCol As Integer
  3.     Dim wbInfosBaseBook As Workbook
  4.     Dim wsFeuille As Worksheet
  5.     Dim tabValTemp() As Variant
  6.          
  7.     Set wbInfosBaseBook = Application.Workbooks.Open("U:\Data\Workspace\semaine2\Projet\FichiersUtiles\InfosBase.xls" )
  8.    
  9.     Set wsFeuille = wbInfosBaseBook.Worksheets(iChoix + 1)
  10.     iCountRow = wsFeuille.Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row 
  11.     For i = 1 To iCountRow + 1
  12.         For j = 1 To iCountCol
  13.            tabValTemp(i, j) = Range("A1" ).Offset(i, j)
  14.         Next j
  15.         j = 1
  16.     Next i
  17.                    
  18.    ListInfosBox.List = tabValTemp
  19. End Sub


 
merci d'avance pour vos réponse
 
bye
 
Naya

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed