soulkeum
Messages postés26Date d'inscriptionlundi 13 septembre 2004StatutMembreDernière intervention 7 mars 2008
-
22 oct. 2007 à 13:36
soulkeum
Messages postés26Date d'inscriptionlundi 13 septembre 2004StatutMembreDerniè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
JPGVB
Messages postés96Date d'inscriptionmardi 29 mars 2005StatutMembreDernière intervention10 mars 20112 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
soulkeum
Messages postés26Date d'inscriptionlundi 13 septembre 2004StatutMembreDerniè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)
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 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" (?)