Nombres de lignes contenues dans un même répertoire
Bonjour tout le monde !
J'ai un répertoire avec plusieurs fichiers qui ont un point commun une page appelé "DONNEES"
Je sais qu'il est possible de compter le nombre de fichiers excel dans le même répertoire...
Peut on compter le nombre de lignes contenues dans ce répertoire avec la cellules "A" pleine ou compter les cellules pleines dans la colonne A de tous ces fichiers ?
Merci d'avance...Bon dimanche.
Bonjour,
Voici une piste, adapter le chemin du dossier dans la proc "Test()" puis l'exécuter. Le résultat sera inscrit dans la fenêtre d'exécution (Ctrl+G depuis le VBE) :
Sub Test()
Dim Tbl() As String
Dim NomFe As String
Dim Chemin As String
Dim I As Integer
'adapter le chemin du dossier
Chemin = "D:\Dossier\Sous Dossier\" '<------
'nom des feuilles
NomFe = "DONNEES"
'récup des noms des fichiers
Tbl = EnumFichiers(Chemin)
'si initialisé...
If Not (Not Tbl) Then
'boucle sur le tableau avec résultat dans la fenêtre d'exécution (Ctrl+G)
For I = 1 To UBound(Tbl)
Debug.Print "La colonne A de la feuille 'DONNEES' du classeur " & _
Tbl(I) & _
" contient " & _
DerCel(Chemin, Tbl(I), NomFe) & " lignes non vides !"
Next I
End If
End Sub
Function DerCel(Dossier As String, Classeur As String, NomFe As String) As Long
Dim Cel As Long
'recherche la dernière ligne non vide de la colonne A (avec pour maximum 65536 lignes, adapter si plus !)
Cel = ExecuteExcel4Macro("COUNTA('" & Dossier & _
"[" & Classeur & "]" & _
NomFe & "'!R1C1:R65536C1)")
DerCel = Cel
End Function
Function EnumFichiers(Chemin As String) As String()
Dim TableauFichiers() As String
Dim Fichier As String
Dim I As Integer
'complète le chemin le cas échéant
If Right(Chemin, 1) <> "\" Then Chemin = Chemin & "\"
'récupère seulement les fichiers Excel
Fichier = Dir(Chemin & "*.xls*")
'boucle sur les fichiers du dossier
Do While (Len(Fichier) > 0)
I = I + 1: ReDim Preserve TableauFichiers(1 To I)
TableauFichiers(I) = Fichier
Fichier = Dir()
Loop
'retourne le tableau des noms de fichiers
EnumFichiers = TableauFichiers()
End FunctionBonjour merci pour ta réponse:
Mais ça me met
La colonne A de la feuille 'DONNEES' du classeur extrait_20_10_2018.xlsm contient 65536 lignes non vides !
Alors qu'il y a 32 lignes non vides soit 31 si j’enlève l entête de mon tableau, mais ça j'ai corrigé avec :
Cel = ExecuteExcel4Macro("COUNTA('" & Dossier & _
"[" & Classeur & "]" & _
NomFe & "'!R2C1:R65536C1)")J'ai corrigé xls par xlm
L'objectif serait de faire la somme des lignes non vide et la récupérer dans une variable genre total
msgbox totalpour ensuite l'exploiter ...
Merci, ton code est impressionnant
Re,
Pour le total, voici une piste. J'ai rajouté une fonction pour contrôler si la feuille existe dans le classeur en cours :
Sub Test()
Dim tbl() As String
Dim NomFe As String
Dim Chemin As String
Dim I As Integer
Dim Total As Long
'adapter le chemin du dossier
Chemin = "D:\Dossier\Sous Dossier\" '<------
'nom des feuilles
NomFe = "DONNEES"
'récup des noms des fichiers
tbl = EnumFichiers(Chemin)
'si initialisé...
If Not (Not tbl) Then
'boucle sur le tableau avec résultat dans la fenêtre d'exécution (Ctrl+G)
For I = 1 To UBound(tbl)
Total = Total + DerCel(Chemin, tbl(I), NomFe)
Next I
MsgBox Total
End If
End Sub
Function DerCel(Dossier As String, Classeur As String, NomFe As String) As Long
Dim Cel As Long
'contrôle si la feuille existe dans le classeur
If FeuilleExiste(Dossier & Classeur, NomFe) Then
'recherche la dernière ligne non vide de la colonne A (avec pour maximum 65536 lignes, adapter si plus !)
Cel = ExecuteExcel4Macro("COUNTA('" & Dossier & _
"[" & Classeur & "]" & _
NomFe & "'!R1C1:R65536C1)")
End If
DerCel = Cel
End Function
Public Function FeuilleExiste(Fichier As String, NomFeuille As String) As Boolean
Dim Cat As Object
Dim tbl As Object
Dim Nom As String
Set Cat = CreateObject("ADOX.Catalog")
Set tbl = CreateObject("ADOX.Table")
'pour Excel 2003
' Cat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
' Fichier & _
' ";Extended Properties=""Excel 12.0;HDR=NO;IMEX=2;"""
'pour Excel 2007
Cat.ActiveConnection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _
Fichier & _
";Extended Properties=""Excel 12.0;HDR=NO;IMEX=2;"""
'passe les feuilles en revue et récupère leurs nom sans le dollar
'dans un tableau
For Each tbl In Cat.Tables
Nom = Replace(tbl.Name, "$", "")
If Nom = NomFeuille Then FeuilleExiste = True: Exit For
Next
Set tbl = Nothing
End Function
Function EnumFichiers(Chemin As String) As String()
Dim TableauFichiers() As String
Dim Fichier As String
Dim I As Integer
'complète le chemin le cas échéant
If Right(Chemin, 1) <> "\" Then Chemin = Chemin & "\"
'récupère seulement les fichiers Excel
Fichier = Dir(Chemin & "*.xls*")
'boucle sur les fichiers du dossier
Do While (Len(Fichier) > 0)
I = I + 1: ReDim Preserve TableauFichiers(1 To I)
TableauFichiers(I) = Fichier
Fichier = Dir()
Loop
'retourne le tableau des noms de fichiers
EnumFichiers = TableauFichiers()
End Functionbonjou rà tous
sans une seule ligne de code,
menu Données Obtenir de classeur (naviguer vers ton classeur)
"charger"
tu obtiens un long tableau avec tout
il te suffit de faire un TCD de comptage
pas de VBA
cadeau : il n'y a aucune formule non plus
amitiés
Bonsoir, ça fonctionne super bien !
Un grand Merci Theze !
Bonjour,
Content de t'avoir aidé