[Excel VBA] recherche fichier en lecture seul
kimclem
Messages postés
13
Statut
Membre
-
tompols Messages postés 1325 Statut Contributeur -
tompols Messages postés 1325 Statut Contributeur -
Bonjour bonjour
je vous contacte car j'ai un petit souci,
J'ai une grande quantité de fichiers à modifier.
Tout les fichiers se trouvent dans des dossiers et sous dossiers, je voudrais faire une macro pour ouvrir les fichiers de ces dossiers et sous dossiers les uns apres les autres ( pas en même temps ...) afin de les traiter.
j'ai tenter d'utiliser la fonction dir, mais il semblerait qu'elle ne fonctionne pas lorsque les documents sont en lecture seule et je ne peux pas modifier cette propriété.
Je me suis renseigner sur les FSO mais à moins d'avoir mal lu je ne trouve pas ce que je recherche.
Par avance merci pour l'aide que vous pourrez me donner
Clément
je vous contacte car j'ai un petit souci,
J'ai une grande quantité de fichiers à modifier.
Tout les fichiers se trouvent dans des dossiers et sous dossiers, je voudrais faire une macro pour ouvrir les fichiers de ces dossiers et sous dossiers les uns apres les autres ( pas en même temps ...) afin de les traiter.
j'ai tenter d'utiliser la fonction dir, mais il semblerait qu'elle ne fonctionne pas lorsque les documents sont en lecture seule et je ne peux pas modifier cette propriété.
Je me suis renseigner sur les FSO mais à moins d'avoir mal lu je ne trouve pas ce que je recherche.
Par avance merci pour l'aide que vous pourrez me donner
Clément
A voir également:
- [Excel VBA] recherche fichier en lecture seul
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Liste déroulante excel - Guide
8 réponses
j'ai effectivement regarder et étudier ton code mais il semblerait que ce n'est pas possible d'utilser la fonction FileSearch sous 2007
par avance merci pour chaque réponse, si je trouve quelque chose je vous en fait part
par avance merci pour chaque réponse, si je trouve quelque chose je vous en fait part
Bonjour,
Un petit exemple de code à adapter :
Bon courage
;o)
Un petit exemple de code à adapter :
Public Sub searchAllFiles()
Dim myTabFolders()
Dim myTabFiles
Dim sChemin As String
Dim i As Long
Dim j As Long
sChemin = "C:\Mon repertoire"
If subFolderInFolder(sChemin, myTabFolders()) = False Then
MsgBox "Erreur"
Else
For i = LBound(myTabFolders()) To UBound(myTabFolders())
If AllFilesInFolder(myTabFolders(i), myTabFiles()) = False Then
MsgBox "Erreur"
Else
For j = LBound(myTabFiles(j)) To UBound(myTabFiles(j))
Call FonctionQuiTraiteLeFichier(myTabFiles(j))
Next j
End If
Next i
End If
End Sub
'*********************************************************************
' Fonction qui renvoie la liste de tous les fichier d'un répertoire
' Nécessite la référence Microsoft Scripting Runtime
'*********************************************************************
Public Function AllFilesInFolder(ByVal NomDossier As String, ByRef myTab, Optional ByVal ExtentionType As String) As Boolean
Dim fso As Object, dossier As Object, Fich As Object
Dim Files As Object, File As Object
Dim max As Long, ext As String
'Initialisation du tableau
ReDim myTab(0)
'
' Création de l'objet FSO
On Error Resume Next ' AllFilesInFolder_Error
Set fso = CreateObject("Scripting.FileSystemObject")
' Si le nom du dossier est vide, alors je sort de la fonction
If NomDossier = "" Then Exit Function
' Stock les sous-répértoires dans l'objet dossier
Set dossier = fso.GetFolder(NomDossier)
' stock dans l'objet Files tous les fichiers de l'objet dossier
Set Files = dossier.Files
' s'il y a plus d'un fichier
If Files.Count <> 0 Then
max = 0
' pour tous les objets fichiers dans l'objet files
For Each File In Files
'
' je récupère le nom du fichier via l'objet Fich
Set Fich = fso.GetFile(File)
' si l'extension n'est pas renseignée
ext = ExtentionType
If ExtentionType = "" Then ext = fso.GetExtensionName(File)
'
If UCase(fso.GetExtensionName(File)) = UCase(ext) Then
max = max + 1
' j'augmente la taille de mon tableau résultat
ReDim Preserve myTab(1 To max)
' Je stock en fin de tableau mon nom de fichier
myTab(max) = File
End If
Next
' Je retourne le tableau complet des nom de fichiers
End If
'
' Libère tous les objets
Set fso = Nothing
Set dossier = Nothing
Set Fich = Nothing
Set Files = Nothing
Set File = Nothing
'
If Err.Number = 0 Then
AllFilesInFolder = True
Exit Function
Else
AllFilesInFolder = False
End If
End Function
'*********************************************************************
' Fonction qui renvoie la liste de tous les sous-répertoires d'un répertoire
' Nécessite la référence Microsoft Scripting Runtime
'*********************************************************************
Public Function subFolderInFolder(ByVal dossier As String, ByRef myTab) As Boolean
Dim fso As FileSystemObject, monDossier As Folder, sousdossier As Folder
Dim max As Long
ReDim myTab(0)
On Error Resume Next ' subFolderInFolder_Error
Set fso = New FileSystemObject
Set monDossier = fso.GetFolder(dossier)
For Each sousdossier In monDossier.subFolders
max = max + 1
' j'augmente la taille de mon tableau résultat
ReDim Preserve myTab(1 To max)
' Je stock en fin de tableau mon nom de fichier
myTab(max) = sousdossier
Next
If max = 0 Then
subFolderInFolder = False
Exit Function
Else
subFolderInFolder = True
End If
End Function
Bon courage
;o)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
avec WMI et FSO (WMI permet d'éviter l'utilisation d'un fonction récursive FSO....tout comme office.filesearch ;) ) :
ce code cherche ts les fichier en lecture seule sur C:\TEST et modifie cet attribut.
avec WMI et FSO (WMI permet d'éviter l'utilisation d'un fonction récursive FSO....tout comme office.filesearch ;) ) :
ce code cherche ts les fichier en lecture seule sur C:\TEST et modifie cet attribut.
Const READ_ONLY = 1
strComputer = "."
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colFiles = objWMIService.ExecQuery("Select * from CIM_DataFile where Path = '\\TEST\\' " & "AND Drive = 'C:' AND Writeable = FALSE")
For Each objFile In colFiles
Set objReadOnlyFile = objFSO.GetFile(objFile.Name)
objReadOnlyFile.Attributes = objReadOnlyFile.Attributes Xor READ_ONLY
Next
Merci Tompols,
Par contre je ne souhaite pas et ne peux pas modifier l'attribut lecture seule, je voulais contourner le souci.
Je continue de regarder la piste WMI et FSO voir si cela peut m'aider.
Merci de ta réponse en tout cas
Clément
Par contre je ne souhaite pas et ne peux pas modifier l'attribut lecture seule, je voulais contourner le souci.
Je continue de regarder la piste WMI et FSO voir si cela peut m'aider.
Merci de ta réponse en tout cas
Clément
OK, c'est le "afin de les traiter" qui m'a fait penser que tu modifiais ces fichiers....Ds ce cas, suffit d'adapter le requete WMI pour obtenir la liste des fichiers(elever la clause "AND Writeable = 'FALSE'")....Tu peux aussi jeter un oeil ici (avec Office.filesearch) : https://forums.commentcamarche.net/forum/affich-481223-vba-liste-de-tous-les-fichiers-du-disque#4
Bonne journée
Bonne journée
alors pour wmi : https://docs.microsoft.com/en-us/windows/win32/wmisdk/wmi-start-page?redirectedfrom=MSDN
qqes exemples de scripts : http://www.microsoft.com/downloads/details.aspx?FamilyID=b4cb2678-dafb-4e30-b2da-b8814fe2da5a&DisplayLang=en
et un ptit outil : http://www.microsoft.com/downloads/details.aspx?FamilyID=2cc30a64-ea15-4661-8da4-55bbc145c30e&displaylang=en
bonne découverte ;)
qqes exemples de scripts : http://www.microsoft.com/downloads/details.aspx?FamilyID=b4cb2678-dafb-4e30-b2da-b8814fe2da5a&DisplayLang=en
et un ptit outil : http://www.microsoft.com/downloads/details.aspx?FamilyID=2cc30a64-ea15-4661-8da4-55bbc145c30e&displaylang=en
bonne découverte ;)