Création fonction : compter le nombre images dossier

LeRevenant

XLDnaute Occasionnel
Salut les gens,

À savoir: Dans mon arborescence, j'ai un dossier rempli de sous-dossiers, et leurs noms sont forcément des chiffres (ce sont des n° de facture pour les intimes).
Objectif: Avoir une fonction qui compte le nombre de fichiers qu'ils soient .jpg.jpeg .gif etc etc. (je sais que ma macro ne prend que les jpg, mais je vois pas comment faire autrement).
Donc dans la fonction, il faudrait rentrer une coordonnée de cellule (genre A1) et dans A1 il y a par exemple 225223 => le numéro de facture auquel on cherche à savoir de combien de photos on dispose.


Je tiens à préciser que j'ai très souvent été satisfait de ce forum :) Avec ma connaissance "intermédiaire - " de VBA, je me lance dans la création de fonctions via VBA=> il me manque et l'expérience et de la connaissance théorique. Malgré cet handicap, j'ai pu bien avancer ma 1ère fonction, il doit y avoir un petit truc à toucher pour que ça marche à mon avis:

Function NombreImages(i)
Dim Chemin As String
Dim rep As String
Dim nbfichier As Integer
Dim i As Integer
Chemin = "H:\Sales\01-Users\Aymeric\Photos BWare\i\" 'a adapter
rep = Dir(Chemin & "*.jpg")
While Not rep = ""
nbfichier = nbfichier + 1
rep = Dir
Wend
End Function


Voila tout, jen espérant avoir été assez claire. Je me ferai un plaisir de voir et comprendre vos réponses ;)

À tôt bien
 

Dranreb

XLDnaute Barbatruc
Bonsoir.
Essayez comme ça :
VB:
Function NombreImages(ByVal NDos As Long) As Long
Dim FSO As New FileSystemObject, Chemin As String
Chemin = "H:\Sales\01-Users\Aymeric\Photos BWare\" & NDos
If FSO.FolderExists(Chemin) Then
  NombreImages = FSO.GetFolder(Chemin).Files.Count
Else
  NombreImages = 0: End If
End Function
N'oubliez pas de cocher la référence Microsoft Scripting Runtime
 

LeRevenant

XLDnaute Occasionnel
Bonjour,

Merci beaucoup, ton code marche très bien.
Je pense que je comprends ton code:
1-Tu lui dis que le chemin c'est le lien de base (H:\Sales\01-Users\Aymeric\Photos BWare\) + le nom qu'on a rentré.
2-Grâce à FSO (je connaissais pas ça), t arrives à dire à VBA de se rendre à chemin.
3A-Si jamais le fichier existe alors afficher le nombre de trucs qu il y a dedans.
3B-Si jamais le fichier n'existe pas pas: alors 0

La seule question que j aie, c'est ici:
Function NombreImages(ByVal NDos As Long) As Long
À quoi sert le "By val" ? C'est pour dire d'aller chercher la valeur de la cellule A1 si jamais on rentre: =NombreImages(A1)?

Encore merci :) j'ai appris des trucs grâce à ton code.
 

Dranreb

XLDnaute Barbatruc
Bonjour
Pour bien faire, ce mot clé ByVal devrait toujours être précisé devant chaque paramètre, sauf s'il s'agit d'un tableau car ce n'est pas possible .
Ça permet d'initialiser une variable locale interne à la procédure, conformément à la valeur de l'expression spécifiée à l'appel.
Alors que si on ne le précise pas, ça lui complique les choses parce qu'elle ne dispose que de l'adresse d'une zone externe qui doit alors être prévue pour une donnée du type exact attendu.
Ce ByRef assumé par défaut n'est pertinent que si l'expression transmise est une propriété en écriture d'objet ou bien une variable, et cela seulement si sa modification par la procédure doit être conservée en dehors de celle ci. Et encore, c'est inutile pour un objet transmis lui même, car ses propriétés en écriture sont toujours accessibles et conservées, à moins que ce qui doit l'être soit sa redéfinition par un Set qu'elle est chargée d'effectuer.

En résumé: Localisation de la zone mémoire correspondant à un paramètre, vue coté procédure :
ByVal ==> Interne.
ByRef ==> Externe.
C'est la seule chose à retenir, toute distinction faite dans d'autres explications entre valeur et référence ne ferait que vous embrouiller.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
314 717
Messages
2 112 168
Membres
111 448
dernier inscrit
ayment