Résultats d'une macro suivant valeur Checkbox [Résolu]

Signaler
Messages postés
12
Date d'inscription
jeudi 14 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2007
-
Messages postés
12
Date d'inscription
jeudi 14 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2007
-
    Bonjour à tous,

Ma question est assez simple je pense mais étant encore vraiment débutant, j'ai quelque peu de mal à résoudre mon problème. J'aimerais en effet récupérer dans une feuille Excel une liste de fichiers dont le type (Word, ppt, txt...) dépend de ce que j'ai coché dans des checkbox.

Voilà le code actuel qui me permet de récupérer tous les fichiers (*.*) d'un répertoire donné.

------------------------------------------------------------------------------------------------------------------------------------

Sub ListFilesInFolder(bIncludeSubfolders As Boolean)
   
Dim fs As FileSearch
Dim fso As FileSystemObject
Dim wksDest As Worksheet
Dim i As Integer
Dim oFile As Scripting.File
Dim Dossier As Object
Dim NomDossier As String
Dim Nb&
Dim Field_Denomb As TextBox

    Set fs = Application.FileSearch
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set wksDest = Worksheets("Listing des Fichiers")
   
wksDest.Range("A1:IV65536").ClearContents
   
NomDossier = ChoixDossierFichier("")
If NomDossier = "" Then Exit Sub
   
    wksDest.Cells(1, 1) = "File name"
    wksDest.Cells(1, 2) = "Parent folder"
    wksDest.Cells(1, 3) = "Size in ko"
    wksDest.Cells(1, 4) = "Type"
    wksDest.Cells(1, 5) = "Date created"
    wksDest.Cells(1, 6) = "Date last modified"
    wksDest.Cells(1, 7) = "Date last accessed"
    wksDest.Cells(1, 8) = "Full path"
   
    With fs
        .LookIn = NomDossier
        .SearchSubFolders = bIncludeSubfolders
        .Filename = "*.*"
       
    If .Execute(SortBy:=msoSortByFileName, SortOrder:=msoSortOrderAscending) > 0 Then
            For i = 1 To .FoundFiles.Count
                Set oFile = fso.GetFile(.FoundFiles(i))
                wksDest.Cells(i + 1, 1) = oFile.Name
                wksDest.Cells(i + 1, 2) = oFile.ParentFolder.Path
                wksDest.Cells(i + 1, 3) = oFile.Size / 1024
                wksDest.Cells(i + 1, 4) = oFile.Type
                wksDest.Cells(i + 1, 5) = oFile.DateCreated
                wksDest.Cells(i + 1, 6) = oFile.DateLastModified
                wksDest.Cells(i + 1, 7) = oFile.DateLastAccessed
                wksDest.Cells(i + 1, 8) = oFile.Path
            Next i
        Else
            MsgBox "There were no files found."
        End If
    End With
End Sub
------------------------------------------------------------------------------------------------------------------------------

J'ai créé plusieurs Checkbox et j'aimerais que suivant ce qui est coché, mon code me ramène des .doc ou des .ppt, ou des .xls...
J'ai essayé d'introduire la commande If CheckBox1.Value True then ... .filename '*.doc' ... mais il semblerait qu'il y ait une erreur avec la commande With.
De plus, j'aimerais qu'une checkbox corresponde à plusieurs types d'extension (par exemple .doc et .rtf). Puis-je utiliser un .filename '*.doc' or .filename '*.rtf'?

Enfin, est-il possible non plus d'insérer tous les résultats dans la même et unique worksheet 'Listing des fichiers' mais de créer par Checkbox un onglet distinct (par exemple un onglet pour la liste des fichiers .doc et .rtf, un autre pour les .xls et .csv ... en bref, un onglet par checkbox cochée) ?

Merci par avance pour votre aide et très bonne année 2007 à tous!

Cello3135

11 réponses

Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
56
Salut,
Si j'ai bien compris
Puisque tu souhaites utiliser plusieurs Feuilles pour tes résultats (feuille dépendant de checkbox cochée ou non)
Pourquoi ne pas mieux découper ta procédure? et les appelés si les checkbox sont cochée. je pense à quelque chose du style.

=> Ce qui suit n'est qu'une ébauche mais cela devrait te donner des idées.
NOTE: Il faut teste si la feuille WsName (XLS, CSV...) existe sinon il faut la creer 
Private Sub CommandButton1_Click() 
If CheckBox1.Value Then Call ListFilesInFolder(True, "*.doc;*.rtf", "C:\Test", "Doc, Rtf") 
If CheckBox2.Value Then Call ListFilesInFolder(True, "*.xls;*.csv", "C:\Test", "XLS, CSV") 
'[...]
End Sub 

Sub ListFilesInFolder(bIncludeSubfolders As Boolean, Filter As String, NomDossier As String, WsName As String) 

Dim fs As FileSearch 
Dim fso As FileSystemObject 
Dim wksDest As Worksheet 
Dim i As Integer 
Dim oFile As Scripting.File 
Dim Nb& 

    Set fso = New FileSystemObject 
    Set wksDest = Worksheets(WsName) 

'wksDest.Range("A1:IV65536").ClearContents
wksDest.Cells.ClearContents 

If NomDossier = "" Then Exit Sub 

    wksDest.Cells(1, 1) = "File name" 
    wksDest.Cells(1, 2) = "Parent folder" 
    wksDest.Cells(1, 3) = "Size in ko" 
    wksDest.Cells(1, 4) = "Type" 
    wksDest.Cells(1, 5) = "Date created" 
    wksDest.Cells(1, 6) = "Date last modified" 
    wksDest.Cells(1, 7) = "Date last accessed" 
    wksDest.Cells(1, 8) = "Full path" 

    With Application.FileSearch 
        .LookIn = NomDossier 
        .SearchSubFolders = bIncludeSubfolders 
        .Filename = Filter 

        If .Execute(SortBy:=msoSortByFileName, SortOrder:=msoSortOrderAscending) > 0 Then 
            For i = 1 To .FoundFiles.Count 
                Set oFile = fso.GetFile(.FoundFiles(i)) 
                wksDest.Cells(i + 1, 1) = oFile.Name 
                wksDest.Cells(i + 1, 2) = oFile.ParentFolder.Path 
                wksDest.Cells(i + 1, 3) = oFile.Size / 1024 
                wksDest.Cells(i + 1, 4) = oFile.Type 
                wksDest.Cells(i + 1, 5) = oFile.DateCreated 
                wksDest.Cells(i + 1, 6) = oFile.DateLastModified 
                wksDest.Cells(i + 1, 7) = oFile.DateLastAccessed 
                wksDest.Cells(i + 1, 8) = oFile.Path 
            Next i 
        Else 
            MsgBox "There were no files found." 
        End If 
    End With 
End Sub 

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
Déjà : à ma connaissance (du moins sous VB) une checkbox n'a pas de valeur True ou False mais des valeurs 0 (con cochée), 1 (cochée) ou 2 (grisée)....
Messages postés
12
Date d'inscription
jeudi 14 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2007

En es-tu sûr? Il ne me semble pas...
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
Non, je n'en suis pas sur avec VBA .
A vérifier, donc... car ma réponse est faite par rapport à VB.
Messages postés
12
Date d'inscription
jeudi 14 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2007

Ok, j'ai bien vérifié pour VBA, je confirme que la valeur de la CheckBox est True ou False...

Une idée pour mon pb?
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
38
Extrait du MSDN de VB6 :

Valeurs

L'élément value peut prendre les valeurs suivantes :

<li>Contrôle CheckBox : 0 correspond à Non cochée (valeur par défaut), 1
à Cochée et 2 à Estompée (grisée).

</li>
---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
38
Oupss désolé, j'avais pas vu VBA, pas réveillé moi ce matin

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
Bonjour Casy et bonne année...

Mais tu fais la même erreur que moi : c'est vrai pour VB, mais apparemment pas sous VBA ... après petit tour sur Google
Messages postés
12
Date d'inscription
jeudi 14 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2007

On ne t'en veut pas casy, c'est le début de l'année Bonne année!
Messages postés
12
Date d'inscription
jeudi 14 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2007

Merci jrivet, je vais tester ça et je te tiens au courant.

Merci pour l'aide!
Messages postés
12
Date d'inscription
jeudi 14 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2007

Ca marche impeccablement bien!

Merci beaucoup et bonne année!