Fonction compte nombre de file
Bonjour à tous,
Je souhaiterais récupérer dans une variable le nombre de classeur que j'ai dans un dossier déterminé.
J'ai pris comme support le code suivant que j'ai copié en ligne et que j'ai modifié afin qu'il corresponde mieux à ce que je souhaiterais avoir.
Function CountFilesInFolder(strDir) As String
'DEVELOPER: Ryan Wells (wellsr.com)
'DESCRIPTION: This macro counts the files in a folder and retuns the result in a msgbox
'INPUT: Pass the procedure a string with your directory path and an optional
' file extension with the * wildcard
'EXAMPLES: Call CountFilesInFolder("C:\Users\Ryan\")
' Call CountFilesInFolder("C:\Users\Ryan\", "*txt")
Dim file As Variant, i As Integer
If Right(strDir, 1) <> "\" Then strDir = strDir & "\"
file = Dir(strDir & strType)
While (file <> "")
i = i + 1
file = Dir
Wend
End Function
Sub TestCount()
Call CountFilesInFolder("C:\Users\Desktop\Test\")
End Sub
Toutefois, le code me renvoit une erreur. (voir capture ci-joint)
Pourriez-vous m'aider s'il vous plaît?
Merci par avance pour votre aide.
Bonjour,
As tu essayé de renommer ta procédure CountFilesInFolder ?
Bonjour,
J'ai essayé d'inscrire tes codes dans le présent fichier et ça fonctionne bien.
Comme il faut renommer le chemin en fonction de la machine sur laquelle on travaille, j'ai modifié une partie du code de manière à ce que ça compte le nombre de fichiers du le dossier dans lequel est enregistré le présent fichier (donc ça le compte également).
Je présume donc que ton problème vient du fait que tu as quelque chose d'autre dans ton fichier qui crée problème. Sans voir ton fichier réel, dur-dur de t'aider.
Amicalement.
Bonjour @Yvouille, @vince1512,
Je vous remercie pour votre aide.
@Yvouille:
J'ai testé votre code et cela fonctionne parfaitement de mon côté.
Je souhaiterais savoir est-il possible de récupérer dans une variable x de la macro TestCount le nombre de file (en utilisant la fonction CountFilesInFolder?
Merci par avance pour votre aide.
Je souhaiterais savoir est-il possible de récupérer dans une variable x de la macro TestCount le nombre de file
Plutôt deux fois qu'une
Sur l'image ci-jointe - à agrandir par un clic - tu vois que la variable i, qui est chargée au fur et à mesure du comptage des fichiers, est utilisée pour le MsgBox. Mais tu pourrais bien entendu l'utiliser pour toutes sortes d'autres emplois.
Amicalement.
Bonjour le fil
Dans le code initial suivant
Function CountFilesInFolder(strDir) As String
'DEVELOPER: Ryan Wells (wellsr.com)
'DESCRIPTION: This macro counts the files in a folder and retuns the result in a msgbox
'INPUT: Pass the procedure a string with your directory path and an optional
' file extension with the * wildcard
'EXAMPLES: Call CountFilesInFolder("C:\Users\Ryan\")
' Call CountFilesInFolder("C:\Users\Ryan\", "*txt")
Dim file As Variant, i As Integer
If Right(strDir, 1) <> "\" Then strDir = strDir & "\"
file = Dir(strDir & strType)
While (file <> "")
i = i + 1
file = Dir
Wend
End Function
Sub TestCount()
Call CountFilesInFolder("C:\Users\Desktop\Test\")
End Sub
Il y a 3 erreurs !!!
1)
'DESCRIPTION: This macro counts the files in a folder and retuns the result in a msgbox
alors qu'il n'y a aucun MSGBOX dans la fonction, il est seulement ajouté par la suite par Yvouille je crois
2)
La fonction
Call CountFilesInFolder("C:\Users\Desktop\Test\")
est mal utilisée une fonction ne s'appelle pas par un CALL mais par une affectation généralement quelque chose comme : "variable = LaFonction(paramètre)"
3)
Une fonction doit retourner quelque chose or la fonction CountFilesInFolder (de type String) ne retourne rien du tout !
Il faudrait avoir dans le corps de cette fonction quelque du genre CountFilesInFolder = quelqueChose
En conclusion ou bien j'ai loupé un élément, la solution est simplement :
Function CountFilesInFolder(strDir) As Long ' <==== pour pouvoir renvoyer un nombre de type long
'DEVELOPER: Ryan Wells (wellsr.com)
' =====> tel que le prouve sa description avec le "count"
'DESCRIPTION: This macro counts the files in a folder and retuns the result in a msgbox
'INPUT: Pass the procedure a string with your directory path and an optional
' file extension with the * wildcard
'EXAMPLES: Call CountFilesInFolder("C:\Users\Ryan\")
' Call CountFilesInFolder("C:\Users\Ryan\", "*txt")
Dim file As Variant, i As Integer
If Right(strDir, 1) <> "\" Then strDir = strDir & "\"
file = Dir(strDir & strType)
While (file <> "")
i = i + 1
file = Dir
Wend
' La fameuse ligne d'affectation manquante de cette fonction !!!
CountFilesInFolder = i
'-----------------------------------------------------------------------
End Function
Sub TestCount()
' Soit avec une variable (à déclarer en Public ou en Locale selon les besoin)
nbrFic = CountFilesInFolder("C:\Users\Desktop\Test\")
MsgBox "Dans votre réppertoire il y a " & nbrFic & " Fichiers"
' Soit directement
MsgBox "Dans votre réppertoire il y a " & CountFilesInFolder("C:\Users\Desktop\Test\") & " Fichiers"
End Sub
Bonjour @Gli73, Yvouille,
Mille mercis pour votre aide et pour les explications détaillées que vous avez apportés.
2)
La fonction
Call CountFilesInFolder("C:\Users\Desktop\Test\")
est mal utilisée une fonction ne s'appelle pas par un CALL mais par une affectation généralement quelque chose comme : "variable = LaFonction(paramètre)"
@Gil73: Effectivement, je souhaitais utiliser la fonction et "stocker" le résultat dans une variable.
Encore merci à vous deux, j'ai testé sur mon fihcier et cela répond parfaitement à ce que je recherchais.
Bon après-midi.
Bonjour
Merci en retour pour
Mille mercis pour votre aide et pour les explications détaillées que vous avez apportés.
N'hésites pas à revenir poser d'autres questions...