Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1762 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [excel/vba] Compter le nombre de fichiers dans un repertoire ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[excel/vba] Compter le nombre de fichiers dans un repertoire ?

n°1571365
ViMx
Posté le 07-06-2007 à 10:41:05  profilanswer
 

Salut :hello:
 
Je cherche à faire quelque chose de simple en soit, mais je sais pas si c'est possible.
 
En fait, il faudrait qu'une formule excel me compte le nombre de fichiers (tous types confondus) dans un répertoire précis.
 
J'ai trouvé une méthode permettant de rappatrier la liste des noms de fichier d'un repertoire via "dir > listefichiers.txt" dans DOS, mais peut être qu'il y a un moyen plus rapide, plus précise ?
 
J'ai quelques bases en VBA, mais c'est limité hein :D


Message édité par ViMx le 07-06-2007 à 10:49:14
mood
Publicité
Posté le 07-06-2007 à 10:41:05  profilanswer
 

n°1571462
ViMx
Posté le 07-06-2007 à 12:03:06  profilanswer
 

Up ?

n°1571470
kiki29
Posté le 07-06-2007 à 12:32:55  profilanswer
 

Repris de http://forum.hardware.fr/hfr/Progr [...] 5126_1.htm


Option Explicit
 
' Dans VBA Outils | Références : Cocher Microsoft Scripting Runtime
 
Const DossierFichiers As String = "C:\Utiles\Mosaic\example\mosaic_images"
 
Sub Liste()
    ListeFichiersDans DossierFichiers
End Sub
 
Private Sub ListeFichiersDans(ByVal NomDossier As String)
Dim FSO As Scripting.FileSystemObject
Dim DossierSource As Scripting.Folder
Dim Fichier As Scripting.file
Dim r As Long
 
    Set FSO = New Scripting.FileSystemObject
    Set DossierSource = FSO.GetFolder(NomDossier)
           
    r = 0
    For Each Fichier In DossierSource.Files
            r = r + 1
    Next Fichier
         
    MsgBox "Nb Fichiers : " & r
     
    Set Fichier = Nothing
    Set DossierSource = Nothing
    Set FSO = Nothing
End Sub
 

n°1572325
ViMx
Posté le 08-06-2007 à 14:25:29  profilanswer
 

Merci !
 
J'ai adapté pour insérer le chiffre dans une cellule. :)

n°1678996
willow1er
Posté le 30-01-2008 à 12:38:59  profilanswer
 

Bonjour,
J'ai un petit problème avec ce code..
le lancement de la procédure me renvoi un message d'erreur qui est le suivant :
 
******************************
erreur de compilation:
Type défini par l'utilisateur non défini.
******************************
 
Quelle manip dois je faire pour que la macro fonctionne correctement ?
 
Par avance merci..
C'est très important pour moi.
Mathieu

n°1679249
kiki29
Posté le 30-01-2008 à 18:52:07  profilanswer
 

Soir Bon, qu'y a t-il entre


Option Explicit  
 
et
 
Const DossierFichiers As String = "C:\Utiles\Mosaic\example\mosaic_images"


 
Sinon en "Late Binding"


Private Sub ListeFichiersDans2(ByVal NomDossier As String)
Dim FSO As Object
Dim DossierSource As Object
Dim Fichier As Object
Dim r As Long
 
    Set FSO = CreateObject("Scripting.FileSystemObject" )
    Set DossierSource = FSO.GetFolder(NomDossier)
           
    r = 0
    For Each Fichier In DossierSource.Files
            r = r + 1
    Next Fichier
         
    MsgBox "Nb Fichiers : " & r
     
    Set DossierSource = Nothing
    Set FSO = Nothing
End Sub



Message édité par kiki29 le 31-01-2008 à 08:14:38
n°1679664
willow1er
Posté le 31-01-2008 à 13:48:32  profilanswer
 

non en fait j'navais pas ouvert la librairie ms scripting runtime
 
mais ca fonctionne avec object
That's ok !
 
Dsl

n°2000771
korbenz
Posté le 11-06-2010 à 09:53:01  profilanswer
 

Bonjour,
 
Serait il possible d'avoir le code adapte?
 

ViMx a écrit :

Merci !
 
J'ai adapté pour insérer le chiffre dans une cellule. :)


n°2000773
SuppotDeSa​Tante
Aka dje69r
Posté le 11-06-2010 à 09:58:34  profilanswer
 

Hello
 
3 ans apres ca risque d'etre chaud...
 
Range("A1" ).Value = r
 
;)


---------------
Soyez malin, louez entre voisins !
n°2084468
Nus
Posté le 24-06-2011 à 09:33:25  profilanswer
 

bonjour à tous
 
j'aurai besoin d'aide sur VBA Excel 2007, windows XP
 
j'utilise le code suivant pour récupérer dans un répertoire où il n'y a que des fichiers Excel, des valeurs d'une seule colonne pour les coller dans un fichier de synthèse (pour réduire le message j'ai enlever la partie de copier/coller d'un fichier à l'autre). Mon fichier synthèse permet de récupérer 30 colonnes différentes (1 colonne/fichier donc 30 fichiers). Au départ je n'ai pas 30 fichiers, ils arrivent au fur et à mesure, du coup, mon code m'ouvre plusieurs fois les mêmes fichiers jusqu'à atteindre la limite que je fixe à ma variable a (12 to 157). 157 étant la dernière colonne où je viens coller les données du dernier fichier (soit le 30ième). Du coup, si par exemple, j'ai que 2 fichiers, au bout de la 3ième boucle, mon copier/coller me décalle non pas de a=a+5 mais ajoute 1 en plus.
 
Comment faire pour qu'il s'arrête en fonction du nombre de fichiers dans le dossier qui s'appele fichier xls?? je pensais le faire compter.
 
 
Sub ouvrir_fichiers()  
AffecterVariables2  
Application.ScreenUpdating = False  
Dim fichier As String, chemin As String  
Dim Wb As Workbook  
 
For a = 12 To 157  
chemin = "C:\Documents and Settings\k004418\Bureau\UGV VIPER\Suivi MMT\fichier xls\"  
fichier = Dir(chemin & "*.xls" )  
 
Do While fichier <> ""  
Set Wb = Workbooks.Open(chemin & fichier)  
 
--> c'est à ce moment qu'il fait le copier/coller d'un fichier à l'autre  
 
Windows(fichier).Activate  
'fermer le fichier Excel sans sauvegarder  
Application.CutCopyMode = False  
ActiveWorkbook.Close savechanges:=False  
 
a = a + 5  
Set Wb = Nothing  
fichier = Dir  
Application.ScreenUpdating = True  
Loop  
Next  
End Sub  
 
 
Sub AffecterVariables2()  
LeFichier = ThisWorkbook.Name  
End Sub  
 
 
 
 
Merci pour votre aide

mood
Publicité
Posté le 24-06-2011 à 09:33:25  profilanswer
 

n°2084547
SuppotDeSa​Tante
Aka dje69r
Posté le 24-06-2011 à 12:52:11  profilanswer
 

Tu crées un objet "Scripting.FileSystemObject" qui va te permettre de compter le nb de fichier et de récuperer les noms des fichiers, puis tu appliques ta moulinette.


---------------
Soyez malin, louez entre voisins !
n°2084568
Nus
Posté le 24-06-2011 à 13:52:00  profilanswer
 

ok merci
 
je vais voir ce que je trouves car je connais pas du tout cette fonction.
 
 
+

n°2084609
SuppotDeSa​Tante
Aka dje69r
Posté le 24-06-2011 à 14:55:41  profilanswer
 

Un truc comme ca devrait le faire :

Code :
  1. Sub ouvrir_fichiers()
  2. Application.ScreenUpdating = False
  3.  
  4.    'On définit où se trouvent tes fichiers Excel
  5.    Repertoire = "C:\Documents and Settings\k004418\Bureau\UGV VIPER\Suivi MMT\fichier xls\"
  6.    
  7.    'On définit quelle colonne et quel onglet vont nous interresser dans _
  8.    les classeurs à ouvrir pour les copier ensuite
  9.    'La en gros on va copier la colonne A de l'onglet Feuil1 du classeur qu'on vient d'ouvrir
  10.    Col = 1 'Colonne A. A = 1 ;  B = 2 etc.
  11.    Onglet = "Feuil1"
  12.        
  13.    'On met dans une variable le nom du fichier qui va recevoir les "coller"
  14.    'Donc ton fichier final en somme.
  15.    WBO = ActiveWorkbook.Name
  16.    
  17.    'On créé l'objet FileSystem
  18.    Set fso = CreateObject("Scripting.FileSystemObject" )
  19.    'On créé un objet Dossier, qui va etre ton dossier où sont tes fichiers Excel
  20.    Set Dossier = fso.GetFolder(Repertoire)
  21.    
  22.    'Pour chaque fichier dans ce dossier
  23.    For Each Fichiers In Dossier.Files
  24.    'on verifie qu'il contien "xls" dans le nom pour etre sur que c'est un fichier Excel
  25.    'Il faut aussi vérifier, au cas où ton fichier final soit dans le meme dossier, de ne _
  26.    pas tenter de l'ouvrir à nouveau
  27.    'Remplacer si Office>2003
  28.        If (InStr(1, Fichiers.Name, ".xls", 1) > 0) And Fichiers.Name <> WBO Then
  29.        'Si c'est le cas, tu fais ton code à toi :
  30.        Set Wb = Workbooks.Open(Fichiers.Name)
  31.        'On active le fichier qu'on vient d'ouvrir
  32.        Windows(Fichiers.Name).Activate
  33.        
  34.        'On se place sur la bonne feuille, bonne colonne
  35.        Sheets(Onglet).Columns(Col).Select
  36.        'On copie
  37.        Selection.Copy
  38.        'On se remet sur notre fichier final
  39.        Windows(WBO).Activate
  40.        'La faut voir ou tu veux coller apres.
  41.        ActiveSheet.Paste
  42.  
  43.        'On active le fichier qu'on vient d'ouvrir
  44.        Windows(Fichiers.Name).Activate
  45.  
  46.        'on le ferme
  47.        ActiveWorkbook.Close savechanges:=False
  48.    
  49.        Application.ScreenUpdating = True
  50.        End If
  51.    Next
  52. End Function


Message édité par SuppotDeSaTante le 24-06-2011 à 14:57:20

---------------
Soyez malin, louez entre voisins !
n°2084690
Nus
Posté le 24-06-2011 à 16:19:26  profilanswer
 

merci dje69r
 
je vais les modifs qu'il faut
je vais si je trouves, je découvres au fur et à mesure  
 
:-)
 
+

n°2084696
SuppotDeSa​Tante
Aka dje69r
Posté le 24-06-2011 à 16:23:26  profilanswer
 

L'excitation t'a fait oublier des mots...!? :lol:
 
Parce que je n'ai rien compris à ton post... :whistle:


---------------
Soyez malin, louez entre voisins !
n°2085043
Nus
Posté le 27-06-2011 à 10:04:28  profilanswer
 

au secours
 
sa marche pas !!
 
voilà le code que j'ai crée avec tes conseils
 
 
Sub ouvrir_fichiers2()
Application.ScreenUpdating = False
 Repertoire = "C:\Documents and Settings\k004418\Bureau\UGV VIPER\Suivi MMT\fichier xls\"
 
Sheets("Explication listing MMT DHP M88" ).Select
For a = 12 To 157
   
WBO = ActiveWorkbook.Name
     
    Set fso = CreateObject("Scripting.FileSystemObject" )
    Set Dossier = fso.GetFolder(Repertoire)
     
    For Each Fichiers In Dossier.Files
        If (InStr(1, Fichiers.Name, ".xls", 1) > 0) And Fichiers.Name <> WBO Then
        Set Wb = Workbooks.Open(Fichiers.Name)        Windows(Fichiers.Name).Activate
         
Range("A5" ).Select
Selection.Copy
Windows(WBO).Activate
Cells(31, a).Select
ActiveSheet.Paste
Cells(30, a).Value = Right(Cells(31, a).Value, 8)
Cells(31, a).Value = Cells(30, a).Value
 With Selection
        .HorizontalAlignment = xlGeneral
        .VerticalAlignment = xlCenter
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Selection.Font.Bold = True
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
     
Windows(Fichiers.Name).Activate
Range("A1:L1" ).Select
    Selection.AutoFilter
    ActiveSheet.Range("$A$1:$I$324" ).AutoFilter Field:=1, Criteria1:="='U*", _
        Operator:=xlAnd
    Cells.Select
    Selection.Copy
    Sheets.Add After:=Sheets(Sheets.Count)
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Rows("1:1" ).Select
    Application.CutCopyMode = False
    Selection.Delete Shift:=xlUp
    Range("I1" ).Select
    ActiveWorkbook.Worksheets("Feuil1" ).Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Feuil1" ).Sort.SortFields.Add Key:=Range("I1" ), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Feuil1" ).Sort
        .SetRange Range("A1:I324" )
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
 
    Range("D1" ).Select
    Range(Selection, Selection.End(xlDown)).Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows(WBO).Activate
    Cells(32, a).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

        Windows(Fichiers.Name).Activate
        Application.CutCopyMode = False
        ActiveWorkbook.Close savechanges:=False
     
        Application.ScreenUpdating = True
        End If
         
    Next
    a = a + 5
     
    Next
     
End Sub
 
 
quand il arrive sur Set Wb = Workbooks.Open(Fichiers.Name) , ya bien nom de fichier qui apparaît mais il me dit que mon fichier en .xls est introuvable ???
la partie en italique c'est les copier/coller d'un fichier à l'autre
 
merci


Message édité par Nus le 27-06-2011 à 10:12:07
n°2085166
Nus
Posté le 27-06-2011 à 13:58:27  profilanswer
 

il n'aime pas le .Name en fait
mais tjs le même pb de boucle. pour l'instant j'ai fais un test avec 5 fichiers mais je peux en avoir moins ou plus (30 maxi), il ouvre les 5 fichiers mais recommence et ma variabe a prend +6 du coup au lieur de 5 quand il recommence !!

n°2085228
SuppotDeSa​Tante
Aka dje69r
Posté le 27-06-2011 à 15:33:44  profilanswer
 

Deja c'est illisible sans balis [cpp ]] [/cpp ]
sans espace
 
Ensuite a quoi sert ta 1ere boucle de 12 a 157 ??


---------------
Soyez malin, louez entre voisins !
n°2085229
SuppotDeSa​Tante
Aka dje69r
Posté le 27-06-2011 à 15:34:35  profilanswer
 

Le code fourni est on ne peut plus clair, l'as tu testé au moins ?


---------------
Soyez malin, louez entre voisins !
n°2085231
Nus
Posté le 27-06-2011 à 15:35:37  profilanswer
 

en fait c le fichier où je viens coller les valeurs que je récupère !!!
je commence en colonne 12 et après je me décales de 5 pour coller la colonne du fichier suivant ...
 
 
oui je l'ai testé mais j'ai du me tromper dans les modifs


Message édité par Nus le 27-06-2011 à 15:36:57
n°2085436
Nus
Posté le 28-06-2011 à 10:58:56  profilanswer
 

bonjour
 
j'ai trouvé peut être une solution mais je sais pas comment l'écrire en VBA
 
est-ce qu'il serait possible de faire une MsgBox pour avertir l'utilisateur du fichier (vu qu'il ouvre plusieurs fois les fichiers) de dire attention ce fichier est déjà ouvert, voulez-vous l'ouvrir à nouveau? Oui-->il continue     et Non la macro s'arrête
 
 
merci

n°2085486
Nus
Posté le 28-06-2011 à 13:32:17  profilanswer
 

j'ai réussi à résoudre le pb
 
encore merci dje69r

n°2085510
SuppotDeSa​Tante
Aka dje69r
Posté le 28-06-2011 à 14:28:13  profilanswer
 

Et ca venait d'où ?


---------------
Soyez malin, louez entre voisins !
n°2085520
Nus
Posté le 28-06-2011 à 14:55:45  profilanswer
 

disons que j'ai contourné le pb avec une MsgBox
je gardes les fichiers ouverts et comme il bouclé tjs j'ai mis un message qui me dit que le fichier est déjà ouvert. Du coup si je clique sur NON, ça Exit Sub !!! et juste avant de faire Exit, il ferme tout les autres fichiers
 
j'avoue c pas super comme solution mais sa marche :-)

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [excel/vba] Compter le nombre de fichiers dans un repertoire ?

 

Sujets relatifs
[PHP] Ouvrir et modifier une série de fichiers jpg(RESOLU) diminution du temps d'execution [VBA EXCEL]
[vba] parcours repertoireGénérer un fichier excel avec menus déroulants
parcours fichiers dans un repertoireinsertion à partir d'un fichier texte dans un fichier excel
nombre de série delphi et le clé d'autorisationAide pour fichiers PASCAL
Nombre de requêtes 
Plus de sujets relatifs à : [excel/vba] Compter le nombre de fichiers dans un repertoire ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR