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 :

Calculer la taille des répertoires avec les API


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 031
    Billets dans le blog
    45
    Par défaut Calculer la taille des répertoires avec les API
    Bonjour à tous

    Je fais suite à un mon post lister-sous-repertoires-vides-api-windows .

    Comment en restant sur cette solution technique, récupérer la capacité/poids des repertoires.

    Merci par avance pour votre aide

    Bonjour chez vous

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Si tu t'obstines à vouloir faire cela à l'aide de fonctions de l'Api de Windows :
    1) voilà de quoi calculer, avec de telles fonctions, la taille d'UN SEUL fichier :
    Code pour 32 bits. Types à modifier si 64 bits :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Declare Function lOpen Lib "kernel32" Alias "_lopen" (ByVal lpPathName As String, ByVal iReadWrite As Long) As Long
    Private Declare Function lclose Lib "kernel32" Alias "_lclose" (ByVal hFile As Long) As Long
    Private Declare Function GetFileSize Lib "kernel32" (ByVal hFile As Long, lpFileSizeHigh As Long) As Long
    Dim mot_haut As Long
    Public Function extrait_taille(chemin As String) As Long
        Dim p_fic As Long, taille As Long
        p_fic = lOpen(chemin, &H0&)
        extrait_taille = GetFileSize(p_fic, mot_haut)
        lclose p_fic
    End Function
    Private Sub command1_Click()
        MsgBox extrait_taille("d:\doevents.xlsm") & " octets"
    End Sub
    2) Il te faut donc parcourir les fichiers et incrémenter un compteur des tailles relevées. !
    Existe peut-être (je n'en sais rien) une autre fonction, d'une autre librairie, retournant directement la taille d'un dossier. Je ne la cherche même pas, car elle ne ferait qu'utiliser elle-même ces trois fonctions et totaliser ... Autant le faire soi-même, alors !

    3) Je ne comprends pas pourquoi tu ne le fais pas en utilisant le même principe (parcourir et totaliser les tailles) en utilisant en boucle la fonction Filelen native de VBA ...

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 031
    Billets dans le blog
    45
    Par défaut
    Dans un processus récursif ça devient lourd quand avec filesysobject il existe une méthode.

    Donc va falloir mixer les deux.

    Merci pour ton aide unparia

    Bonjour chez toi

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    quand avec filesysobject il existe une méthode.

    Donc va falloir mixer les deux.
    que vient faire (que viendrait faire) "filesysobject" là-dedans ? Et qui en parle ? Explique !

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 031
    Billets dans le blog
    45
    Par défaut
    Un exemple valant mieux qu' un long discours

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Function ShowFolderSize(filespec)
       Dim fso, f, s
       Set fso = CreateObject("Scripting.FileSystemObject")
       Set f = fso.GetFolder(filespec)
       s = UCase(f.Name) & " uses " & f.size & " bytes."
       ShowFolderSize = s
    End Function
    Size Property

    For files, returns the size, in bytes, of the specified file. For folders, returns the size, in bytes, of all files and subfolders contained in the folder.
    Bonjour chez toi

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Je préfère alors le "long discours", car tu dis vouloir traiter par des fonctions de l'Api et viens maintenant avec FSO !
    Si ce n'est qu'une allusion pour "comparer" les "performances", ma réponse va être très très très claire.
    Lorsque l'on utilise FSO, on charge énormément de choses. En "cachette", certes, mais au demeurant très lourdes. Bien plus lourdes que le code que l'on aurait à écrire pour éviter ce "fardeau".
    Si ton "but" est de charger, pourvu que cela "ne se voit pas", voilà une étrange manière de poser un regard sur le développement informatique.
    C'est un peu comme si tu te faisais un énorme "couteau suisse", que tu te "trimbalerais" (en le cachant ou non) pour en utiliser ici le tire-bouchon, là la scie, là l'ouvre-boîte, là le tournevis etc ...
    Et si, de surcroît, tu dois passer par un sas de contrôle, ton couteau suisse ne passera pas (tel est le cas sur ma machine et bien d'autres, où rien de VBS ne peut passer ).

Discussions similaires

  1. [XL-2013] Lister les sous-répertoires vides avec les API windows
    Par informer dans le forum Macros et VBA Excel
    Réponses: 24
    Dernier message: 22/01/2017, 09h05
  2. Réponses: 2
    Dernier message: 18/03/2013, 19h56
  3. Calculer la taille des fichiers dans un répertoire
    Par khayyam90 dans le forum Contribuez
    Réponses: 0
    Dernier message: 28/12/2010, 19h41
  4. Interfaçage avec les API de cdrtools
    Par jeanbi dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 17/07/2004, 16h35
  5. Taille des surfaces avec DirectDraw
    Par Shakram dans le forum DirectX
    Réponses: 5
    Dernier message: 09/09/2002, 00h42

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