Recherche l'existance d'un fichier

soulkeum Messages postés 26 Date d'inscription lundi 13 septembre 2004 Statut Membre Dernière intervention 7 mars 2008 - 22 oct. 2007 à 13:36
soulkeum Messages postés 26 Date d'inscription lundi 13 septembre 2004 Statut Membre Dernière intervention 7 mars 2008 - 26 oct. 2007 à 11:46
Bonjour,
je dois réaliser une macro, dans la quel je cherche dans ma feuille le nom d'un fichier, ensuite je cherche s'il existe dans un repertoire.
Ces fichier sont des pieces joint, j'ai repris un code que j'ai trouvé ici, malheuresement lorsque je lui demande de cherche *.pdf, ou *.doc il marche mais lorsque je lui demande de cherche "num_cmd.*"  c'est a dire nom_fichier.*, il ne trouve rien or je sais que le fichier existe

For i = 2 To NombreLigne
Num_cmd = Sheets("Feuil1").Cells(i, 1).Value

'on cherche les piece jointe
'--------------------------------
With fs
    .LookIn = "C:\Fic_J"  ' Le chemin du repertoire pour les PJ
    .SearchSubFolders = True
    .Filename = "Num_cmd.*"
    .FileType = msoFileTypeAllFiles
If .Execute(SortBy:=msoSortByFileName) > 0 Then
            Nb_PJ = .FoundFiles.Count
            'Col_Fin_PJ = Col_Fin_PJ + Nb_PJ
            MsgBox "Il y a " & .FoundFiles.Count & _
            " fichier(s) trouvé(s)."
    If Nb_max_PJ < Nb_PJ Then
    ' On crée de nouvelles colonnes
        Col_Add = Nb_PJ - Nb_max_PJ
        Nb_max_PJ = Nb_PJ
  
        For k = Col_Fin_PJ To (Col_Fin_PJ + Col_Add)
                Range(Cells(1, k)).Select
                ActiveSheet.Paste
                Cells(1, i) = "Piece joint n°" & i
        Next k
        Col_Fin_PJ = Col_Fin_PJ + Col_Add

    Else

        For j = Col_Deb_PJ To Col_Fin_PJ
            Cells(i, j).Value = .FoundFiles(Col_Add)
            Col_Add = Col_Add - 1
        Next j
             
    End If

Else
        'MsgBox "Il n'y a aucun fichier."
End If

End With

Next i

merci de votre aide

4 réponses

JPGVB Messages postés 96 Date d'inscription mardi 29 mars 2005 Statut Membre Dernière intervention 10 mars 2011 2
22 oct. 2007 à 14:03
Bonjour, en réponse a ta demande voici un extrait de code pour savoir si un fichier exixste, il se compose d'une partie à mettre dans les déclarations de la feuille, d'une fonction, et d'un exemple dans le form_load.


Ce code n'est pas de moi, c'est quelquechose de 'classique'
Réponse sous forme Vrai/faux.
Bonne continuation

'Recherche si un fichier existe (Fileexists) par API
Private Const MAX_PATH = 260
Private Const FILE_ATTRIBUTE_DIRECTORY = &H10
Private Const INVALID_HANDLE_VALUE = -1
Private Type FILETIME
    dwLowDateTime As Long
    dwHighDateTime As Long
End Type


Private Type WIN32_FIND_DATA
    dwFileAttributes As Long
    ftCreationTime As FILETIME
    ftLastAccessTime As FILETIME
    ftLastWriteTime As FILETIME
    nFileSizeHigh As Long
    nFileSizeLow As Long
    dwReserved0 As Long
    dwReserved1 As Long
    cFileName As String * MAX_PATH
    cAlternate As String * 14
End Type
Private Declare Function FindFirstFile _
    Lib "kernel32" _
    Alias "FindFirstFileA" _
    ( _
    ByVal lpFileName As String, _
    lpFindFileData As WIN32_FIND_DATA _
    ) _
As Long
Private Declare Function FindClose _
    Lib "kernel32" _
    ( _
    ByVal hFindFile As Long _
    ) _
    As Long
Function FileExists(sFileName As String) As Boolean
    Dim hFind As Long, udtFindData As WIN32_FIND_DATA
   
    'Recherche du fichier spécifié
    hFind = FindFirstFile(sFileName, udtFindData)
   
    'On teste la réussite de la recherche
    If hFind <> INVALID_HANDLE_VALUE Then
        'Le fichier n'existe que s'il n'est pas un dossier        FileExists (udtFindData.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY) 0
       
        'Fermeture du handle pour libérer la mémoire
        FindClose hFind
    End If
End Function


Private Sub Form_Load()
MsgBox FileExists("c:\nbvi.ini")
End Sub
0
soulkeum Messages postés 26 Date d'inscription lundi 13 septembre 2004 Statut Membre Dernière intervention 7 mars 2008
22 oct. 2007 à 15:20
salut
merci JPGVB, j'ai réussit  a faire marché mon code, je voulais poster mais tu ma dépassé en fait la solution c'est de mettre à la place de  .Filename = "Num_cmd.*"
un .Filename = Num_cmd.& "*"

mais la ou ça plante ici :

For j = Col_Deb_PJ To Col_Fin_PJ
            Cells(i, j).Value = .FoundFiles(Col_Add)
            Col_Add = Col_Add - 1
        Next j

il me mets :Indice en dehors de la plage (erreur 9)

je ne sais pas comment faire
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
22 oct. 2007 à 23:28
Que valent i, j, Col_Deb_PJ et Col_Fin_PJ ???
sûrement qu'une ou l'autre vaut 0
et 0 n'existe pas en tant que ligne ou colonne sous Excel.

Pour ton problème, je ne comprends pas ce que tu entends par "pièce jointe" (???)
Tu sembles rechercher un fichier dans un répertoire, alors la seule commande Dir devrait suffire et c'est drôlement plus simple que tout ça..., mais peut-être que j'ai mal compris ce qu'était cette "pièce jointe" (?)

MPi²
0
soulkeum Messages postés 26 Date d'inscription lundi 13 septembre 2004 Statut Membre Dernière intervention 7 mars 2008
26 oct. 2007 à 11:46
Bonjour,
effectivement !!! un DIR est beaucoup plus facile a gérer !!!
je me suis compliqué la tache pour rien
merci
0
Rejoignez-nous