Résultats d'une macro suivant valeur Checkbox

Résolu
cello3135 Messages postés 12 Date d'inscription jeudi 14 décembre 2006 Statut Membre Dernière intervention 3 janvier 2007 - 2 janv. 2007 à 11:41
cello3135 Messages postés 12 Date d'inscription jeudi 14 décembre 2006 Statut Membre Dernière intervention 3 janvier 2007 - 2 janv. 2007 à 19:19
    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

jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
2 janv. 2007 à 15:21
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
3
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
2 janv. 2007 à 11:45
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)....
0
cello3135 Messages postés 12 Date d'inscription jeudi 14 décembre 2006 Statut Membre Dernière intervention 3 janvier 2007
2 janv. 2007 à 11:58
En es-tu sûr? Il ne me semble pas...
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
2 janv. 2007 à 12:06
Non, je n'en suis pas sur avec VBA .
A vérifier, donc... car ma réponse est faite par rapport à VB.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cello3135 Messages postés 12 Date d'inscription jeudi 14 décembre 2006 Statut Membre Dernière intervention 3 janvier 2007
2 janv. 2007 à 12:09
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?
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
2 janv. 2007 à 12:12
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 #
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
2 janv. 2007 à 12:14
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 #
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
2 janv. 2007 à 12:14
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
0
cello3135 Messages postés 12 Date d'inscription jeudi 14 décembre 2006 Statut Membre Dernière intervention 3 janvier 2007
2 janv. 2007 à 12:16
On ne t'en veut pas casy, c'est le début de l'année Bonne année!
0
cello3135 Messages postés 12 Date d'inscription jeudi 14 décembre 2006 Statut Membre Dernière intervention 3 janvier 2007
2 janv. 2007 à 18:34
Merci jrivet, je vais tester ça et je te tiens au courant.

Merci pour l'aide!
0
cello3135 Messages postés 12 Date d'inscription jeudi 14 décembre 2006 Statut Membre Dernière intervention 3 janvier 2007
2 janv. 2007 à 19:19
Ca marche impeccablement bien!

Merci beaucoup et bonne année!
0
Rejoignez-nous