Dans cette article, vous trouverez les explications comment retrouver la taille de fichier via VBA. Cette fonctionnalité peut être utile pour afficher la taille de(s) fichier(s) à l'utilisateur, pour vérifier si un fichier est complète ou endommagé ou par exemple pour vérifier si l'espace de stockage est suffisamment grand que pour accueillir un fichier particulier…
Fonction VBA de base: FileLen()
VBA contient déjà à la base une fonction qui effectue cette tâche. Il s'agit de la fonction FileLen. Cette fonction utilise un argument (de type String
) – le chemin complet du fichier à vérifier – et retourne comme résultat la taille du fichier en octets (bytes).
L'utilisation de base ressemblera donc à ceci:
x = FileLen("C:\MonDossier\MonFichier.pdf")
Attention: si le fichier n'existe pas, la fonction retourne une erreur. Vous pouvez donc combiner cette fonction avec la vérification si le fichier existe. Vous obtiendrez alors un code VBA comme celui-ci:
1 2 3 4 5 6 7 8 9 10 |
Sub DeterminerTailleFichier() 'par Excel-Malin.com ( https://excel-malin.com ) If Len(Dir("C:\MonDossier\MonFichier.pdf")) > 0 Then MsgBox FileLen("C:\MonDossier\MonFichier.pdf") Else MsgBox "fichier demandé n'existe pas..." End If End Sub |
Comme la taille en octets n'est pas très utilisée de nos jours, on peut facilement convertir le résultat en d'autres unités plus utilisées.
Taille de fichier en ko, Mo ou Go
Pour se faciliter le travail, on peut utiliser les fonctions VBA qui suivent.
1 2 3 4 5 6 7 8 9 10 11 |
'taille de fichier en octets MsgBox Round(FileLen("C:\MonDossier\MonFichier.pdf"), 1) 'taille de fichier en kilooctets (ko) MsgBox Round(FileLen("C:\MonDossier\MonFichier.pdf") / 1000, 1) 'taille de fichier en mégaoctets (Mo) MsgBox Round(FileLen("C:\MonDossier\MonFichier.pdf") / 1000 ^ 2, 1) 'taille de fichier en gigaoctets (Go) MsgBox Round(FileLen("C:\MonDossier\MonFichier.pdf") / 1000 ^ 3, 1) |
Pour plus de flexibilité, on peut créer les fonctions suivantes qui utilisent le nom de fichier comme argument:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
'taille de fichier en octets Public Function VolumeFichier_o(Fichier As String) VolumeFichier_o = Round(FileLen(Fichier), 1) End Function 'taille de fichier en kilooctets (ko) Public Function VolumeFichier_ko(Fichier As String) VolumeFichier_ko = Round(FileLen(Fichier) / 1000, 1) End Function 'taille de fichier en mégaoctets (Mo) Public Function VolumeFichier_Mo(Fichier As String) VolumeFichier_Mo = Round(FileLen(Fichier) / 1000 ^ 2, 1) End Function 'taille de fichier en gigaoctets (Go) Public Function VolumeFichier_Go(Fichier As String) VolumeFichier_Go = Round(FileLen(Fichier) / 1000 ^ 3, 1) End Function |
Et si vous voulez afficher le résultat à l'utilisateur, il est peut-être souhaitable d'ajouter les unités au résultats. Attention, le résultat devient alors une chaîne de caractères (String
) et n'est donc plus considéré comme un nombre. Vous ne pourrez donc pas l'utiliser tel quel pour des calculs ou des comparaisons…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
'taille de fichier en octets Public Function VolumeFichier_o(Fichier As String) VolumeFichier_o = Round(FileLen(Fichier), 1) & " o" End Function 'taille de fichier en kilooctets (ko) Public Function VolumeFichier_ko(Fichier As String) VolumeFichier_ko = Round(FileLen(Fichier) / 1000, 1) & " ko" End Function 'taille de fichier en mégaoctets (Mo) Public Function VolumeFichier_Mo(Fichier As String) VolumeFichier_Mo = Round(FileLen(Fichier) / 1000 ^ 2, 1) & " Mo" End Function 'taille de fichier en gigaoctets (Go) Public Function VolumeFichier_Go(Fichier As String) VolumeFichier_Go = Round(FileLen(Fichier) / 1000 ^ 3, 1) & " Go" End Function |
Conclusion de ce tutoriel
Voilà, vous savez maintenant comment retrouver la taille d'un fichier en VBA et la transformer en une unité de votre choix. Si vous voulez en savoir plus sur les conversion des unités informatiques, vous pouvez consulter la page de Wikipédia dédié à Octet.
Pour aller plus loin en VBA
Si vous travaillez souvent avec les fichiers en VBA, les articles suivants vont peut-être vous intéresser…
- Manipulation des fichiers en VBA
- Créer un dossier et des sous-dossiers
- Ouvrir un fichier de tout type avec VBA
- Liste de toutes les fonctions disponibles en VBA
- Compresser et décompresser avec Zip en VBA
- Utiliser la fonction Excel RECHERCHEV directement en VBA
4 commentaires sur “Calculer la taille d’un fichier avec VBA (en octets, ko, Mo et Go)”
c'est un facteur 1024 et non 1000 pour passer d'octet à ko, Mo, Go…
Bonjour Keri,
ce n'est plus tout à fait correct, en tout cas pas depuis 1998.
Je vous invite à consulter la page Wikipédia dont le lien se trouve dans la "Conclusion".
Vous y verrez l'explication de la différence entre par exemple un:
1 gigaoctet (Go) = 109 octets = 1 000 Mo = 1 000 000 000 octets
et un
1 gibioctet (Gio) = 230 octets = 1 024 Mio = 1 073 741 824 octets
C'est plutôt abstrait mais en 1998, la "Commission électrotechnique internationale" a décidé de normaliser l'utilisation des multiples et s'aligner à l'utilisation commune (1 kilomètre = 1.000 mètres)…
C'est un sujet très intéressant!
Cordialement, Martin
1/- Pour convertir un nombre de ko en mo, ne faut-il pas diviser par 1024 et non par 1000 ?
2/- Vous dites "attention, vous obtiendrez un string au lieu d’un numéro". Vous voulez dire au lieu d’un nombre peut-être.
Bonjour Dalassen,
pour le point 1:
– non, les ko, Mo, Go, … sont bien des multiples de 1000
– ce sont des kio, Mio, Gio, … qui sont des multiples de 1024
C'est très bien expliqué ici: https://fr.wikipedia.org/wiki/Octet#Multiples_normalis%C3%A9s
(voir aussi ma réponse au commentaire précédent)
pour le point 2:
– en effet, cela doit être "nombre" et pas "numéro". Je vais le corriger.
Cordialement, Martin