XL 2010 Dresser un Array recensant les différentes extensions des fichiers d’un dossier

Magic_Doctor

XLDnaute Barbatruc
Bonsoir,

Je récupère la liste de tous les fichiers contenus dans un dossier. Il y a des fichiers de tous types : .pdf, .doc, .txt, .mp3, .avi…
Forcément, pour chaque type de fichier, il y en a, au minimum, un ou plusieurs, Je voudrais dresser un Array recensant toutes les extensions des fichiers que l’on peut trouver dans un dossier. Si dans ce dossier il y a, par exemple, 25 fichiers pdf, 250 fichiers mp3 et 33 fichiers txt, alors l’Array contiendra 3 items : .pdf, .mp3, .txt. Autrement dit, les 3 types de fichiers que l’on peut trouver dans le dossier.

Comment s’y prendre ?
 

Deadpool_CC

XLDnaute Accro
HA zut ... ce n'est valable que dans les Windows forms ... désolé pour la fausse piste.
1655737418286.png
 

Magic_Doctor

XLDnaute Barbatruc
Bonjour,

Impossible de répondre avant.
D’abord, merci pour vos réponses.

@TooFatBoy, il y aurait donc différents sons de cloches pour convertir des bytes en KB, MB, GB ou TB. J’avoue que ces histoires-là ne me passionnent guère ; j’ai tout simplement essayé de trouver un moyen qui coïncide avec ce que renvoie Windows. Si Windows s’est planté, ma foi, ce n’est pas bien grave ; l’essentiel étant d’obtenir un résultat qui corresponde à peu près à la réalité (quelques bytes de plus ou de moins…).

En fait, la fonction "NombreEnTxt" n’est pas à proprement parler une usine à gaz, elle permet d’obtenir pas mal de choses quand on est pointilleux sur l’esthétique des nombres. Mais tu as tout à fait raison en précisant que l’on peut s’affranchir de cette fonction en bidouillant dans la configuration d’Excel. L’avantage de la fonction est de précisément ne pas avoir à bidouiller dans la configuration d’Excel pour, au fond, un tel détail. Supposons que tu files une application à un copain qui déteste se prendre la tête, et que tu lui dises qu’auparavant il faut faire ci et ça dans la configuration d’Excel, imagine la tête de ton copain…

On peut résoudre le problème en passant par les dictionnaires plutôt que par las arrays. Je m’en doutais, même si j’utilise peu les dictionnaires, les manipulant moins bien que les arrays.

@sylvanu, dans sa solution, m’a donné une idée pour peaufiner ce que je souhaitais au départ :

EXT1.jpg


EXT2.jpg
 

TooFatBoy

XLDnaute Barbatruc
Re ;)

Si Windows s’est planté, ma foi, ce n’est pas bien grave ; l’essentiel étant d’obtenir un résultat qui corresponde à peu près à la réalité (quelques bytes de plus ou de moins…).

Je m'en doutais, et c'est pour ça que j'avais dit
Mais l'erreur étant la même dans les Windows, je suppose que tu vas volontairement la laisser dans ta fonction. 😉



En fait, la fonction "NombreEnTxt" n’est pas à proprement parler une usine à gaz, elle permet d’obtenir pas mal de choses quand on est pointilleux sur l’esthétique des nombres. Mais tu as tout à fait raison en précisant que l’on peut s’affranchir de cette fonction en bidouillant dans la configuration d’Excel. L’avantage de la fonction est de précisément ne pas avoir à bidouiller dans la configuration d’Excel pour, au fond, un tel détail. Supposons que tu files une application à un copain qui déteste se prendre la tête, et que tu lui dises qu’auparavant il faut faire ci et ça dans la configuration d’Excel, imagine la tête de ton copain…
Je ne parlais pas de modifier les paramètres d'Excel, mais de simplement utiliser le format de cellule. ;)
 

dysorthographie

XLDnaute Accro
Bonsoir,
j'ai envi de m'amuser également!
VB:
Function Get_Extensions(Dossier)
Const adChar = 129, adInteger = 3
Dim Fichier     As Variant
Dim Ext    As String, Fso As Object, RS As Object
Set RS = CreateObject("ADODB.Recordset")
RS.Fields.Append "Ext", adChar, 5
RS.Fields.Append "NB", adChar, 10
RS.Open
    Set Fso = CreateObject("Scripting.FileSystemObject")
            For Each Fichier In Fso.GetFolder(Dossier).Files
               Ext = Fso.GetExtensionName(Fichier)
                RS.Filter = "EXT='." & UCase(Left(Ext, 4)) & "'"
                If RS.EOF Then RS.AddNew
                RS("EXT") = "." & UCase(Left(Ext, 4))
                RS("NB") = RS("NB") + 1
                RS.Update
                 RS.Filter = ""
                RS.MoveFirst
            Next
            While Not RS.EOF
                 RS("NB") = "(" & Trim(RS("NB")) & ")"
                 RS.Update
                 RS.MoveNext
            Wend
           If RS.EOF <> RS.BOF Then RS.MoveFirst
            
             RS.Sort = "ext" ' tri de la table
          Get_Extensions = Application.Transpose(RS.GetRows)
            RS.Close
        Set RS = Nothing
    Set Fso = Nothing
End Function
Sub test()
Dim TBL
TBL = Get_Extensions("C:\Myrep")
End Sub
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 069
Messages
2 085 041
Membres
102 764
dernier inscrit
nestu