Trouver les fichiers en mode dynamique ?

alucard_xs

XLDnaute Occasionnel
Bonjour,

voilà je cherche à lister (pour plus tard les manipuler) tout les fichiers .xls que j'ai dans un repertoire, pour cel j'ai donc mis une boite de choix, pour cibler son repertoire, ensuite il m'indique le nom du repertoire que je veux scanner, par contre je n'arrive pas à dénombrer et à afficher les fichiers xls qui sont présents dans ce repertoire, j'ai bien trouver comment afficher et compter des fichiers .xls dans un repertoire donner mais je n'arrive pas à joindre les deux programmes, afin que mon nom de repertoire soit variable ... pour le moment il m'insique et me marque les fichiers présents dans N: et pis c'est tout ...

Merci de m'aider

voci mon code :
-----
Code:
sub essai1212()
choix = ChoixDossierFichier("d:\09OfficeVBA", 1) '<- ici le chemin de ton choix
If choix <> "" Then MsgBox choix
    
Dim p As String, x As Variant
p = "N:/*xls"
x = GetFileList(p)
Select Case IsArray(x)
Case True 'files found
MsgBox UBound(x)
Sheets("feuil1").Range("A:A").Clear
For i = LBound(x) To UBound(x)
Sheets("feuil1").Cells(i, 1).Value = x(i)
Next i
Case False 'no files found
MsgBox "No matching files"
End Select
End Sub

-----
Function ChoixDossierFichier(Racine, Optional SelType As Byte = 0)
Dim objShell, objFolder, Chemin, SecuriteSlash, FlagChoix&, Msg$

    If SelType = 0 Then
      FlagChoix = &H1&: Msg = "Choisissez un dossier :"
    Else
      FlagChoix = &H4000&: Msg = "Choisissez un fichier :"
    End If
                                            
    Set objShell = CreateObject("Shell.Application")
    'le troisième paramètre permet de choisir
    'la s&eacute;lection d'un dossier ou d'un fichier (0 ou 1)
    'le dernier paramètre permet de choisir le dossier racine
    Set objFolder = objShell.BrowseForFolder(&H0&, Msg, FlagChoix, Racine)
    On Error Resume Next
    Chemin = objFolder.ParentFolder.ParseName(objFolder.Title).Path & ""
    If objFolder.Title = "Bureau" Then
        Chemin = "C:\Windows\Bureau"
    End If
    If objFolder.Title = "" Then
        Chemin = ""
    End If

    SecuriteSlash = InStr(objFolder.Title, ":")

    If SecuriteSlash > 0 Then
        Chemin = Mid(objFolder.Title, SecuriteSlash - 1, 2) & ""
    End If
    ChoixDossierFichier = Chemin
End Function


'==================


Function GetFileList(FileSpec As String) As Variant
' Returns an array of filenames that match FileSpec. ' if no matching files are found, it returns false
Dim Filearray() As Variant, Filecount As Integer
Dim Filename As String

'On Error Goto NoFilesFound Filecount = 0
Filename = Dir(FileSpec)
If Filename = "" Then GoTo NoFilesFound

' loop until no more matching files are found
Do While Filename <> ""
    Filecount = Filecount + 1
    ReDim Preserve Filearray(1 To Filecount)
    Filearray(Filecount) = Filename
    Filename = Dir()
Loop
GetFileList = Filearray
Exit Function ' Error handler
NoFilesFound:
GetFileList = False
End Function
 
Dernière édition:

MJ13

XLDnaute Barbatruc
Re : Trouver les fichiers en mode dynamique ?

Bonjour à tous.

Si tu débutes dans le VBA, le mieux serait de commencer par une petite macro simple pour lister les fichiers comme celle de CbernardT (que tu as vu puisque tu y as répondu et staple t'a répondu) dont voici une
adaptation avec le principal sur les fichiers
Code:
Sub ListeFichiers()
'CbernardT [URL]https://www.excel-downloads.com/threads/recuperer-noms-de-dossier-et-de-fichier.61963/[/URL]
Dim Dossier As Object, Fichier As Object
Dim Chemin As String
Dim I As Long
'Chemin du dossier à analyser (à adapter au besoin)
Chemin = ThisWorkbook.Path
'Chemin = "c:\"
'Définition de la variable
Set Dossier = CreateObject("Scripting.FileSystemObject").GetFolder(Chemin)
' Boucle sur les fichiers
For Each Fichier In Dossier.Files
I = I + 1
'Cells(I, 1) = Fichier.Name ' Nom du fichier
'Cells(I, 2) = Fichier.DateCreated ' Date dernière modification
        Cells(I, 1).Formula = Fichier.Path
        Cells(I, 2).Formula = Fichier.Name
        Cells(I, 3).Formula = Fichier.Size
        Cells(I, 4).Formula = Fichier.Type
        Cells(I, 5).Formula = Fichier.DateCreated
        Cells(I, 6).Formula = Fichier.DateLastAccessed
        Cells(I, 7).Formula = Fichier.DateLastModified
Next
End Sub

Tu peux choisir ce dont tu as besoin puis lancer un traitement sur les fichiers qui t'intéresse.
 
Dernière édition:

alucard_xs

XLDnaute Occasionnel
Re : Trouver les fichiers en mode dynamique ?

bon ça marche bien pour lister les fichiers, ça venait bien de ma version d'excel.

Merci Mj13 :) pour ton aide aussi

à présent je vais essayer de voir comment relier mes cellules où apparaissent mes noms de fichiers aux vrais fichiers, comme ça je clique dessus et ça les ouvre.
 

MJ13

XLDnaute Barbatruc
Re : Trouver les fichiers en mode dynamique ?

Re bonjour
Bon j'ai un peu modifié le code pour avoir le chemin + le nom du fichier (voir post -2).

Pour ouvrir un fichier avec le path (ou chemin) + le nom du fichier dans une cellule tu peux utiliser

Sub ouvre_fichier
Rn = ActiveCell.Text
ThisWorkbook.FollowHyperlink Rn
End sub
 

Épaf

XLDnaute Occasionnel
Re : Trouver les fichiers en mode dynamique ?

alucard_xs à dit:
sinon je vois que j'ai accès quà mon D: et sous repertoire , est ce possible d'avoir accès à tout son disque dur ?
Je vais répondre à tes questions une par une
Pour voir tout ton disque dur, tu mets simplement dans la première macro
Code:
Sub ListerLesFichiersDunRepertoire()
Dim chemin As String
    chemin = ChoixDossierFichier[COLOR="Red"]("")[/COLOR] '<- ici le chemin de ton choix
    If chemin = "" Then Exit Sub
    ListerLesFichiersParOrdreAlpha (chemin)
End Sub
Ensuite
alucard_xs à dit:
Par contre j'ai une erreur dans le programme
erreur 445
cet objet ne gere pas cette action et la ligne en jaune est la suivante :
Set fs = Application.FileSearch
Quelle version d'Excel as-tu ?
Sélectionne FileSearch et fais une recherche dans l'aide en ligne (F1). Si tu ne l'as pas, il va falloir que tu cherches l'équivalent dans ta version.
Enfin,
=alucard_xs à dit:
sinon pour mes fichiers, je pense que un simple click sur les fichiers présents en liste dans la feuille un devrait suffire.
Là c'est simple. Tu vas dans l'éditeur VBA, tu sélectionnes "Feuil1" (deux clics t'ouvre la feuille de code).
Là tu mets ce code
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column <> 1 Then Exit Sub
If MsgBox("Ouvrir le fichier " & Target, vbYesNo, "Ouvrir un fichier") = vbYes Then _
    Workbooks.Open Target
End Sub
A chaque sélection d'un nom de fichier, te sera posée la question "Ouvrir Oui/Non"
Pour FileSearch, vérifie que les références ci-après sont bien validées -> Dans l'éditeur VB -> Menu Outils -> Références -> Tu valides les 4 présentes dans l'exemple Références_.JPG
@+

NB - L'exemple ci-dessus est pour Office 10.0 (2003)
 
Dernière édition:

alucard_xs

XLDnaute Occasionnel
Re : Trouver les fichiers en mode dynamique ?

et bien, vous êtes de sacrées tête pour aller aussi vite ...
j'ai trouvé un sub pour affecter une macro à toute une série de fichier excel présent dans un repertoire (fixe pour le moment hélas)

Code:
Sub loopThroughFilesExample() 
application.DisplayAlerts = false
myFile = activeworkbook.name
myPath = "C:\Excel\deleteThese\"       'Change this to your directory
workfile = Dir(myPath & "*.xls")
do While workfile <> "" 
application.StatusBar = "Now working on " & workfile workbooks.Open Filename:=myPath & workfile
doSomething activeworkbook
activeworkbook.save : Windows(workfile).Close
Windows(myFile).Activate workfile = Dir() 
loop
application.StatusBar = false 
end Sub Sub doSomething(inBook As Workbook)
'indiquez ce que vous voulez faire pour un classeur & utilisez les instruction suivantes pour boucler sur ses feuilles
for each wksht In inBook.worksheets
        'do whatever you want here to each worksheet....
next wksht
end Sub

Ce dont je ne comprends pas c'est ce

Code:
myPath = "C:\Excel\deleteThese\"       'Change this to your directory

Comment le faire passer pour une variable puisque cela va dépendre de mon choix dans la boite de browsing du départ ?
 

Staple1600

XLDnaute Barbatruc
Re : Trouver les fichiers en mode dynamique ?

Bonjour

Pourquoi pas avec une Inputbox

comme je te l'indiquait dans le post cité par MJ13

et dans ton code initial
Code:
Sub ListerLesFichiersDunRepertoire()
Dim RepFich as String
Dim chemin As String
RepFich=InputBox("Chemin et nom répertoire?")
    chemin = ChoixDossierFichier(RepFich) '<- ici le chemin de ton choix
    If chemin = "" Then Exit Sub
    ListerLesFichiersParOrdreAlpha (chemin)
End Sub


Dans ton "sub"
Remplacer
myPath = "C:\Excel\deleteThese\"

par

myPath = InputBox("Répertoire?")
 
Dernière édition:

Épaf

XLDnaute Occasionnel
Re : Trouver les fichiers en mode dynamique ?

alucard_xs à dit:
Ce Application.FileSearch, il nous renvoie quelle information, de plus quelle est sa dimension ?
J'espère que tu n'es pas sur MAC :
L'aide à dit:
Cette propriété renvoie un objet FileSearch pour utilisation avec des recherches de fichier. Cette propriété est disponible uniquement dans Microsoft Windows.
alucard_xs à dit:
j'utilise office 2007 je pense que ça doit venir de là je vais essayer chez un pote sur office 2003.
C'est sans doute la raison, mais tu dois avoir l'équivalent sur 2007.
Pour que ça fonctionne dans les deux cas, et si tu souhaites essayer avec mon code, tu diras, je te dirai comment faire, je ne vais pas allourdir ce post puisque tu as d'autres réponses.
Bon courage
 

alucard_xs

XLDnaute Occasionnel
Re : Trouver les fichiers en mode dynamique ?

oui pas d'inquiétude j'ai installé la version 2003 de toute façon qui doit etre plus compatible.

Code:
Sub loopThroughFilesExample()
Application.DisplayAlerts = False
myFile = ActiveWorkbook.Name
myPath = InputBox("Choix du repertoire")       'Change this to your directory
workfile = Dir(myPath & "*.xls")
Do While workfile <> ""
  'application.StatusBar = "Now working on " & workfile workbooks.Open Filename:=myPath & workfile
  doSomething ActiveWorkbook
  ActiveWorkbook.Save: Windows(workfile).Close
  'Windows(myFile).Activate workfile = Dir()
Loop
Application.StatusBar = False
End Sub

par contre pour appeler cette sub normalement dans ma sub principale, j'ai rajouté cette ligne :

Code:
Sub ListerLesFichiersDunRepertoire()
Dim chemin As String
    chemin = ChoixDossierFichier("") '<- ici le chemin de ton choix
    If chemin = "" Then Exit Sub
    ListerLesFichiersParOrdreAlpha chemin
    loopThroughFilesExample()
    
End Sub

mais à priori, vu qu'elle est en rouge il doit me manquer des paramètres
 

MJ13

XLDnaute Barbatruc

Épaf

XLDnaute Occasionnel
Re : Trouver les fichiers en mode dynamique ?

Edit
Pour appeler une macro tu peux écrire

Code:
loopThroughFilesExample
'ou
Call loopThroughFilesExample

Avec paramètres, tu peux écrire
Code:
LaMacro LeParam1, LeParam2
'ou
Call LaMacro(LeParamètre, LeParam2)
 

alucard_xs

XLDnaute Occasionnel
Re : Trouver les fichiers en mode dynamique ?

ok merci le soucis de la "myPath = InputBox("Répertoire?")" c'est qu'il va falloir re-entrer le repertoire que j'aurai choisi dès le départ et en plus le re-entrer à la main, donc peu pratique, comment sauvegarder le repertoire choisi du départ et le placer ici ?

au fait le fait d'ouvrir mes fichiers excel en cliquant dessus marche bien mais le soucis c'est que toutes se superposent en fait à la premiere feuille.
 
Dernière édition:

Discussions similaires