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 :

détection fichier ".avi" trop lourd


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Janvier 2007
    Messages : 35
    Points : 25
    Points
    25
    Par défaut détection fichier ".avi" trop lourd
    Bonjour à tous!
    J'aimerais faire une fonction en vba qui me permette de détecter par exemple un fichier ".avi" trop lourd dans un répertoire donné. Par exemple, un message d'avertissement si dans le répertoire "c:\" il y a 2 fichiers ".avi" supérieurs à 500Mo. Je ne sais pas comment faire. Merci pour votre aide!

    En fait, je pense qu'il faut composer ma fonction en 2 parties:
    • La première consisterait à récupérer la liste des fichiers ".avi" d'un répertoire
    • La seconde consisterait à récupérer la taille de chacun de ces fichiers


    Je ne sais vraiment pas comment programmer ces 2 parties.

  2. #2
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Hello,

    en utilisant le FSO (FileSystemObject) référence MS Scripting runtime c'est assez simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Function GetFilesSize(ByVal strPath As String, _
                          ByVal strFilter As String, _
                          ByVal lngSizeFilter As Long)
     
    Dim fso As FileSystemObject
    Dim fic As File
     
    Set fso = New FileSystemObject
     
    For Each fic In fso.GetFolder(strPath).Files
        If fic.Name Like strFilter And fic.Size > lngSizeFilter Then
            Debug.Print fic.Name, fic.Size
        End If
    Next fic
     
    Set fic = Nothing
    Set fso = Nothing
     
    End Function
    en utilisation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ?getfilessize("C:\Temp\","*.avi",500000)
    Film bien lourd.avi          750060

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Janvier 2007
    Messages : 35
    Points : 25
    Points
    25
    Par défaut
    Ok, Merci..
    En fait j'ai réussi à résoudre mon problème.
    J'envoie le code à ceux pour qui ça pourrait servir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    Private Sub CommandButton1_Click()
    Dim lSize As Long
    Dim CheminFichier As String
    Dim TailleGoFichier(1000) As Double
    Dim NomFichier(1000) As String
    Dim fs, F, f1, sf As Object
    Dim j, FinChaine As Integer
    Dim TailleLimite As Double
    Dim TypeFichier(1000) As String
     
    TailleLimite = 0.65 'Taille limite en Go
    CheminFichier = "C:\Users\lolo\Videos\Films\"
     
    j = 0
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set F = fs.GetFolder(CheminFichier)
    Set sf = F.Files
     
    For Each f1 In sf
        NomFichier(j) = NomFichier(j) & f1.Name
        j = j + 1
    Next
    FinChaine = j
     
    j = 0
     
    While (j < FinChaine)
        Set fs = CreateObject("Scripting.FileSystemObject")
        Set F = fs.GetFile(CheminFichier & NomFichier(j))
        lSize = GetFileSize(CheminFichier & NomFichier(j))
        TailleGoFichier(j) = CDbl(lSize) / (2 ^ 30) 'Convertit en Go
        TypeFichier(j) = F.Type
        If ((TypeFichier(j) = "Fichier AVI") And (TailleGoFichier(j) > TailleLimite)) Then
            MsgBox "Attention, le fichier: " & NomFichier(j) & " est trop lourd!" & vbCrLf & vbCrLf & _
                "Sa taille est de : " & Format(TailleGoFichier(j), "# ##0.##") & "Go " & _
                "alors que la taille limite est de: " & TailleLimite & "Go", vbExclamation
        End If
        j = j + 1
    Wend
     
    End Sub
    et une fonction à mettre dans un module:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Function GetFileSize(pPath As String) As Long 'Récupération de la taille d'un fichier
    Dim objFSO As Object
    Dim objFile As Object
        On Error GoTo gestion_erreurs
        Set objFSO = CreateObject("Scripting.FileSystemObject")
        Set objFile = objFSO.GetFile(pPath)
        GetFileSize = objFile.Size
    gestion_erreurs:
        Set objFile = Nothing
        Set objFSO = Nothing
    End Function
    Ca marche nikel!
    Donc si vous voulez repérer les fichiers AVI supèrieurs à une certaine taille, voilà ce qu'il vous faut!
    A bientôt.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [OL-2010] Comment couper un fichier .pst (outlook 2010) trop lourd ?
    Par christineth dans le forum Outlook
    Réponses: 2
    Dernier message: 21/12/2014, 09h27

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