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:

alucard_xs

XLDnaute Occasionnel
Re : Trouver les fichiers en mode dynamique ?

salut epaf

"1 -> J'ai modifié la procédure ui n'était qu'un ébauche. Par contre, je te déconseille, pour faire ce que tu veux d'utiliser une liste d'hyperlinks puisque la sélection d'un fichier va l'ouvrir." -> oh non, moi qui avait tout basé la dessus ...
 

alucard_xs

XLDnaute Occasionnel
Re : Trouver les fichiers en mode dynamique ?

Je me suis permis de modifier la macro en feuil1

Code:
Private Sub CommandButton1_Click()
ListerLesFichiersDunRepertoire
End Sub

Private Sub CommandButton2_Click()
NomRep1 = Worksheets("Feuil1").Cells(1, 1).Value & "\" & "Données Excel"
MkDir NomRep1
NomRep2 = Worksheets("Feuil1").Cells(1, 1).Value & "\" & "Fiches Excel"
MkDir NomRep2
NomRep3 = Worksheets("Feuil1").Cells(1, 1).Value & "\" & "Fiches PDF"
MkDir NomRep3
End Sub
Private Sub CommandButton3_Click()
NomRep1 = Worksheets("Feuil1").Cells(1, 1).Value & "\" & "Données Excel"
MkDir NomRep1
NomRep2 = Worksheets("Feuil1").Cells(1, 1).Value & "\" & "Fiches Excel"
MkDir NomRep2
NomRep3 = Worksheets("Feuil1").Cells(1, 1).Value & "\" & "Fiches PDF"
MkDir NomRep3
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column <> 2 Then Exit Sub 'limité à colonne 1
If InStr(Target.Address, ":") <> 0 Then Exit Sub 'sélection de plusieurs cellules
If MsgBox("Ouvrir le fichier " & Cells(1, 1).Value & "\" & Target, vbYesNo, "Ouvrir un fichier") = vbYes Then _
    Workbooks.Open Cells(1, 1).Value & "\" & Target
End Sub
 

Épaf

XLDnaute Occasionnel
Re : Trouver les fichiers en mode dynamique ?

Staple1600 à dit:
Ainsi il y a bien création d'un sous répertoire dans le répertoire choisi au départ
Hello Slape, Derrière un bouton il n'aura pas le nom du dossier sélectionné. C'est pourquoi je le place en A1 dans les fichiers transmis, ainsi il peut le récupérer ;)
Ce coup-ci... à ce soir
Bon aprem'
 

alucard_xs

XLDnaute Occasionnel
Re : Trouver les fichiers en mode dynamique ?

bon ça marche bien une fois mais deux fois ça ne marche plus car les sous-repertoires étant déjà crées, ça pose problème au programme : à chaque fois il veut recréer les ous repertoires que je lui ai indiqué, il y a une ligne de code pour lui dire, voilà, si les sous-repertoires sont dejà là, et bien tu passes ton chemin.?
 

alucard_xs

XLDnaute Occasionnel
Re : Trouver les fichiers en mode dynamique ?

bon moi en fait ça ne serait que la feuille 1 de tous les documents présents dans un repertoire donné que je voudrais mettre en pdf ...

voilà ce que j'ai trouver :

Code:
ThisWorkbook.ExportAsFixedFormat Type:=xlTypePDF, _
    Filename:="C:\Documents and Settings\mimi\dossier\NomClasseur.pdf", _
    Quality:=xlQualityStandard, _
    IncludeDocProperties:=True, _
    IgnorePrintAreas:=False, _
    OpenAfterPublish:=False

Ce que je vais faire, c'est l'affecter à un bouton mais, j'explique :

dans le repertoire d:\fichiers, il y a mes fichiers excel avec mes 3 feuilles (dont la premiere m'interesse car elle possède un graphique), je veux que la feuille 1 de tout ces fichiers s'exporte en pdf et aille dans un repertoire d:\fichiers_pdf.


Au final, j'aurais donc, mon repertoire d:\fichiers avec mes fichiers xcl complets et dans le repertoire d:\fichiers_pdf, que les feuille1 mais en pdf.

Est ce possible ? -> bon j'ai pas trouvé comment faire ...
 
Dernière édition:

alucard_xs

XLDnaute Occasionnel
Re : Trouver les fichiers en mode dynamique ?

au pire j'ai trouvé ce prog mais par contre, je ne sais pas comment l'utiliser et pas sur qu'il fonctionne.

Code:
Private Sub DéplacementFeuillePlannig()
' Donne le chemin actuel
vRépertoireActuelle = ThisWorkbook.Path
' donne le nom de la feuille active actuelle
vFeuilActuelle = ActiveSheet.Name
' Déplace la feuille Actuelle active
Sheets(vFeuilActuelle).Move
' Sauvegarde le nouveau fichier
ActiveWorkbook.SaveAs Filename:=vRépertoireActuelle & "\Planning semaine\" & vFeuilActuelle
End Sub

il doit copier la feuille 1 d'une fichier excel pour la mettre dans un autre fichier excel d'un autre repertoire, ensuite il ne resterait qu'à transformer en pdf ...

je prefererai vtrouver une méthode plus direct comme mon message précedent ... enfin bon ...

Meric de m'aider ;)
 

Épaf

XLDnaute Occasionnel
Re : Trouver les fichiers en mode dynamique ?

bon ça marche bien une fois mais deux fois ça ne marche plus car les sous-repertoires étant déjà crées, ça pose problème au programme : à chaque fois il veut recréer les ous repertoires que je lui ai indiqué
Tu as une solution simple pour pallier le problème. En fait tu en as plusieurs, je t'en propose une...
Code:
Private Sub CommandButton2_Click()
Dim nomRep, Chemin$
    NomRep = Array("", "Données Excel", "Fiches Excel", "Fiches PDF"[COLOR="Red"])[/COLOR] 'erreur corrigée ")"
    Chemin = Worksheets("Feuil1").Cells(1, 1).Value & "\"
    On error resume next
        For i = 1 to Ubound(NomRep)
            chdir Chemin & NomRep(i)
            mkdir Chemin & NomRep(i)
        Next
    On error goto 0
End Sub
J'explique : Si chdir provoque une erreur, c'est que le répertoire n'existe pas. L'erreur fera passer à la ligne suivante où mkdir le créera.
Si chdir trouve le répertoire, c'est qu'il existe. Mkdir provoquera une erreur qui fera passer à la ligne suivante.
On peut encore simplifier en passant chemin et NomRep(n) comme paramètres à une procédure ne contenant que les deux lignes chdir et mkdir mais commence par là ;)
Je regarde tes autres questions.
@+
 
Dernière édition:

Discussions similaires