Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Trier dans les résultats de FileSearch

3 réponses
Avatar
Bernard Rey
Bonjour tout le monde,

Je veux obtenir dans un classeur la liste des classeurs=20
Excel contenus dans un r=E9pertoire (et ses sous-r=E9pertoires)
et le nombre de feuillese que chacun d'eux contient.

J'arrive =E0 ce que je veux avec la macro suivante :

Sub TonCompteEstBon()
Application.ScreenUpdating =3D False
ClasseurCourant =3D ActiveWorkbook.Name
MonDossier =3D ActiveSheet.Range("Depart") 'ex. "C:\Mes Docs"
ActiveSheet.Range("NbClasseurs").ClearContents
ActiveSheet.Range("LesResultats").ClearContents
With Application.FileSearch
.NewSearch
.LookIn =3D MonDossier
.Filename =3D "*.xls"
.SearchSubFolders =3D True
.Execute
For i =3D 1 To .FoundFiles.Count
ClasseurCherche =3D .FoundFiles(i)
MaVal =3D Mid(.FoundFiles(i), Len(MonDossier) +2)
Workbooks.Open (ClasseurCherche)
MonNombre =3D ActiveWorkbook.Worksheets.Count
DateEnregistrement =3D _
ActiveWorkbook.BuiltinDocumentProperties(11)
ActiveWorkbook.Close SaveChanges:=3DFalse
Workbooks(ClasseurCourant).ActiveSheet.Range _
("B" & i + 3) =3D MaVal
Workbooks(ClasseurCourant).ActiveSheet.Range _
("C" & i + 3) =3D MonNombre
Workbooks(ClasseurCourant).ActiveSheet.Range _
("D" & i + 3) =3D DateEnregistrement
Next i
Workbooks(ClasseurCourant).ActiveSheet.Range _
("NbClasseurs") =3D .FoundFiles.Count
If .FoundFiles.Count =3D 0 Then
MsgBox "Aucun Classeur n'a =E9t=E9 trouv=E9."
End If
End With

End Sub

L=E0 o=F9 les choses se compliquent, c'est que certains=20
classeurs, cr=E9=E9s sur Mac, peuvent ne pas avoir=20
l'extension ".xls".=20

Pour pouvoir les prendre en compte, tout semble bien se=20
passer en rempla=E7ant=20
.Filename =3D "*.xls" par
.FileType =3D msoFileTypeAllFiles
=E0 condition qu'il n'y ait ni sous-r=E9pertoires, ni fichiers=20
autres que des classeurs Excel...

Et je n'arrive pas =E0 faire des boucles conditionnelles en=20
utilisant les r=E9sultats de FileSearch (un truc comme
test =3D Workbooks(.FoundFiles(i)).Application
donne une erreur). Grrr....

Si quelqu'un peut me dire comment prendre en compte=20
uniquement les fichiers Excel avec ou sans extensions, =E7a=20
m'int=E9resserait ;-)

Merci

--=20
Bernard Rey / Toulouse

3 réponses

Avatar
isabelle
bonjour Bernard,

peu être avec,
.FileType = msoFileTypeExcelWorkbooks
je ne sais pas si cela fonctionnera sous mac.

isabelle


Bonjour tout le monde,

Je veux obtenir dans un classeur la liste des classeurs
Excel contenus dans un répertoire (et ses sous-répertoires)
et le nombre de feuillese que chacun d'eux contient.

J'arrive à ce que je veux avec la macro suivante :

Sub TonCompteEstBon()
Application.ScreenUpdating = False
ClasseurCourant = ActiveWorkbook.Name
MonDossier = ActiveSheet.Range("Depart") 'ex. "C:Mes Docs"
ActiveSheet.Range("NbClasseurs").ClearContents
ActiveSheet.Range("LesResultats").ClearContents
With Application.FileSearch
.NewSearch
.LookIn = MonDossier
.Filename = "*.xls"
.SearchSubFolders = True
.Execute
For i = 1 To .FoundFiles.Count
ClasseurCherche = .FoundFiles(i)
MaVal = Mid(.FoundFiles(i), Len(MonDossier) +2)
Workbooks.Open (ClasseurCherche)
MonNombre = ActiveWorkbook.Worksheets.Count
DateEnregistrement = _
ActiveWorkbook.BuiltinDocumentProperties(11)
ActiveWorkbook.Close SaveChanges:úlse
Workbooks(ClasseurCourant).ActiveSheet.Range _
("B" & i + 3) = MaVal
Workbooks(ClasseurCourant).ActiveSheet.Range _
("C" & i + 3) = MonNombre
Workbooks(ClasseurCourant).ActiveSheet.Range _
("D" & i + 3) = DateEnregistrement
Next i
Workbooks(ClasseurCourant).ActiveSheet.Range _
("NbClasseurs") = .FoundFiles.Count
If .FoundFiles.Count = 0 Then
MsgBox "Aucun Classeur n'a été trouvé."
End If
End With

End Sub

Là où les choses se compliquent, c'est que certains
classeurs, créés sur Mac, peuvent ne pas avoir
l'extension ".xls".

Pour pouvoir les prendre en compte, tout semble bien se
passer en remplaçant
.Filename = "*.xls" par
.FileType = msoFileTypeAllFiles
à condition qu'il n'y ait ni sous-répertoires, ni fichiers
autres que des classeurs Excel...

Et je n'arrive pas à faire des boucles conditionnelles en
utilisant les résultats de FileSearch (un truc comme
test = Workbooks(.FoundFiles(i)).Application
donne une erreur). Grrr....

Si quelqu'un peut me dire comment prendre en compte
uniquement les fichiers Excel avec ou sans extensions, ça
m'intéresserait ;-)

Merci

--
Bernard Rey / Toulouse


Avatar
Bernard Rey
Isabelle :

peu être avec,
..FileType = msoFileTypeExcelWorkbooks


Non, merci de ta réponse, mais j'ai déjà essayé et, hélas,
ça teste visiblement sur l'extension ".xls". En tout cas,
j'obtiens les mêmes résultats qu'avec "Filename = "*.xls".

je ne sais pas si cela fonctionnera sous mac.


C'est sous Windows que je fais ça. Mais certains des
fichiers n'ont pas d'extension parce qu'ils ont été créés
avec une version Mac. Ce n'est pas gênant pour les ouvrir
avec "Workbooks.Open", mais le tout est justement
d'arriver à les inclure dans les résutats de la recherche.
C'est là-dessus que je cale ;-)


--
Bernard Rey / Toulouse



Bonjour tout le monde,

Je veux obtenir dans un classeur la liste des classeurs
Excel contenus dans un répertoire (et ses sous-
répertoires) et le nombre de feuillese que chacun d'eux
contient.

J'arrive à ce que je veux avec la macro suivante :

Sub TonCompteEstBon()
Application.ScreenUpdating = False
ClasseurCourant = ActiveWorkbook.Name
MonDossier = ActiveSheet.Range("Depart") 'ex. "C:Mes
Docs"


ActiveSheet.Range("NbClasseurs").ClearContents
ActiveSheet.Range("LesResultats").ClearContents
With Application.FileSearch
.NewSearch
.LookIn = MonDossier
.Filename = "*.xls"
.SearchSubFolders = True
.Execute
For i = 1 To .FoundFiles.Count
ClasseurCherche = .FoundFiles(i)
MaVal = Mid(.FoundFiles(i),Len(MonDossier)+2)
Workbooks.Open (ClasseurCherche)
MonNombre = ActiveWorkbook.Worksheets.Count
DateEnregistrement = _
ActiveWorkbook.BuiltinDocumentProperties(11)
ActiveWorkbook.Close SaveChanges:úlse
Workbooks(ClasseurCourant).ActiveSheet.Range _
("B" & i + 3) = MaVal
Workbooks(ClasseurCourant).ActiveSheet.Range _
("C" & i + 3) = MonNombre
Workbooks(ClasseurCourant).ActiveSheet.Range _
("D" & i + 3) = DateEnregistrement
Next i
Workbooks(ClasseurCourant).ActiveSheet.Range _
("NbClasseurs") = .FoundFiles.Count
If .FoundFiles.Count = 0 Then
MsgBox "Aucun Classeur n'a été trouvé."
End If
End With

End Sub

Là où les choses se compliquent, c'est que certains
classeurs, créés sur Mac, peuvent ne pas avoir
l'extension ".xls".

Pour pouvoir les prendre en compte, tout semble bien se
passer en remplaçant
.Filename = "*.xls" par
.FileType = msoFileTypeAllFiles
à condition qu'il n'y ait ni sous-répertoires, ni
fichiers autres que des classeurs Excel...

Et je n'arrive pas à faire des boucles conditionnelles
en utilisant les résultats de FileSearch (un truc comme
test = Workbooks(.FoundFiles(i)).Application
donne une erreur). Grrr....

Si quelqu'un peut me dire comment prendre en compte
uniquement les fichiers Excel avec ou sans extensions,
ça m'intéresserait ;-)

Merci

--
Bernard Rey / Toulouse
.





Avatar
JpPradier
Bonjour Bernard

Souvent les 3 ou 4 premiers octets d'un fichier donnent une indication sur le type de fichier.
Peut-etre qu'en lisant ces octets? Bien que ce ne soit peut-etre pas valide pour les fichiers Mac.

j-p