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:

Épaf

XLDnaute Occasionnel
Re : Trouver les fichiers en mode dynamique ?

Pour le code précédent, si le répertoire existe, le code te placera dans ce répertoire, s'il n'existe pas et est donc créé, tu restes dans le répertoire courant d'avant la procédure. Cela ne présente aucun inconvénient si tu utilises le chemin et le nom du fichier pour ouvrir ou enregistrer un fichier. Donc, n'utilise pas la procédure
Private Sub DéplacementFeuillePlannig()
' Donne le chemin actuel
qui part du répertoire actif et d'une feuille active.
Prends l'habitude tout de suite de ne pas sélectionner ni feuille ni cellule pour travailler dessus. Nomme tes classeurs, tes feuilles et précise tes cellules :
Workbooks("Classeur.xls").Worksheets("FeuilName").Range("A1").value 'ou Cells(NoLigne, NoCol)
En instanciant ton classeur et ta feuille, tu pourras utiliser l'une et l'autre instance dans ton code.
Code:
Dim CL1 as workbooks
Dim FL1 as Worksheet
Set CLI = workbooks("Classeur.xls") 'ou = Thisworkbook -> si c'est le fichier contenant les macros
Set FL1 = CL1.Worksheets("FeuilName")
'Instances que tu peux utiliser ainsi
     LeRep = FL1.Cells(1,1).value
     CL1.saveas ....... -> .pdf
'etc.
alucard_xs à dit:
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 ?
Que te manque-t-il pour faire ça ?
Autre chose : Pour enregistrer un xls en pdf, tu penses que tu dois l'ouvrir... Mais là, le xls reste le fichier actif à l'inverse d'un saveas -> autrenom.xls
Dernière question : Tu es sûr que ce code est compatible avec VBA 2003 ?
ThisWorkbook.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:="C:\Documents and Settings\mimi\dossier\NomClasseur.pdf", _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False
Bonne soirée. Je suis obligé de t'abandonner :D
@+
 
Dernière édition:

alucard_xs

XLDnaute Occasionnel
Re : Trouver les fichiers en mode dynamique ?

BBOn alors ce que je cherche à faire poru le moment, c'est de copier la feuille 1 d'un fichier excel pris dans le repertoire d:\essai et de la coller dans un document "type" en feuille 3 qui se trouve dans un repertoire d:\essai2, ensuite il me faudrait sauvegarder ce nouveau fichier dans le repertoire d:\essai2
 

Épaf

XLDnaute Occasionnel
Re : Trouver les fichiers en mode dynamique ?

copier la feuille 1 d'un fichier excel pris dans le repertoire d:\essai et de la coller dans un document "type" en feuille 3 qui se trouve dans un repertoire d:\essai2, ensuite il me faudrait sauvegarder ce nouveau fichier dans le repertoire d:\essai2
Ok alucard, je te passe un code qu'il te faudra adapter.
Code:
Dim CL1 as workbook
Dim CL2 as workbook
    Workbooks("d:\essai\Fichier1.xls").open
    DoEvents
    Set CL1 = ActiveWorkbook
    Workbooks("d:\essai2\FichierType.xls").open
    DoEvents
    Set CL2 = ActiveWorkbook
    CL1.Worksheets("Feuil3").copy After:=CL2.Sheets(CL2.Sheets.count)
    DoEvents
    CL2.Close True 'sauvegarde du fichier Type
    DoEvents
    CL1.Close False 'ferme le fichier d:\essai\Fichier1.xls sans enregistrer
    DoEvents
    Set CL1 = Nothing
    Set Cl2 = NoThing
Censé placer la feuille copiée en fin des feuilles de fichier "Type" (pas testé, si bug alors simple faute d'orthographe ;) )
@+
 

alucard_xs

XLDnaute Occasionnel
Re : Trouver les fichiers en mode dynamique ?

le soucis c'est que mon fichier type possède une feuille (la 3eme) qui se nomme d'une manière imposé (car la feuille 2 l'utilise via des formules)
du coup avec le
Code:
CL1.Worksheets(1).Copy CL2.Sheets(3)
, il me copie toute la feuille de mon doc initial (y compris le nom de la feuille
qu 'il vient mettre en 3eme position donc, ce n'est pas ça tout à fait, moi je veux qu'il me copie les données qui sont présentes sur la feuille 1 du doc initial, sur la feuille 3
du document modifié, et ainsi la feuille 2 pourra fonctionner.
 

alucard_xs

XLDnaute Occasionnel
Re : Trouver les fichiers en mode dynamique ?

SI vous voulez, finalement, ce ne sont que les données présentes de A1 à G36 qui m'interessent dans le fichiers d'origine, donc j'aimerai bien copier ces données et les mettre dans la feuille 3 de l'autre fichier qui porte un nom spécifique, sinon avec la méthode ci-dessus j'ai bien peur que à chaque fois, la feuille coller n'aille pas sur la bonne feuille (la 3eme)
 

Épaf

XLDnaute Occasionnel
Re : Trouver les fichiers en mode dynamique ?

SI vous voulez, finalement, ce ne sont que les données présentes de A1 à G36 qui m'interessent dans le fichiers d'origine, donc j'aimerai bien copier ces données et les mettre dans la feuille 3 de l'autre fichier qui porte un nom spécifique, sinon avec la méthode ci-dessus j'ai bien peur que à chaque fois, la feuille coller n'aille pas sur la bonne feuille (la 3eme)
Nos messages se sont télescopés...
Ok, alors dans ce cas là, tu ne copies que la plage
Code:
    CL1.Worksheets("Feuil1").Range("A1:G36").copy CL2.Worksheets("Feuil3").Range("A1")
Et tu racontes la suite de tes aventures :D
 

Discussions similaires