XL 2016 Liste des fichiers sur Ftp

johnpeter

XLDnaute Nouveau
Bonjour à tous, Je reviens vers vous car depuis des semaines je cherche le moyen de lister sur une feuil avec leurs caractéristiques les fichiers que je gère avec FileZilla. C'est très important car chaque fois que je fais une modification sur un fichier je voudrais installer sur les autres postes une macro permettant chaque matin de comparer et de télécharger les nouveaux. Je sais envoyer les fichiers sur le Ftp par macro mais impossible de trouver comment lister. Un immense merci d'avance
 

johnpeter

XLDnaute Nouveau
Re

En creusant un peu, y'a du mieux (mais de nouveaux problèmes surviennent ;))
VB:
Option Explicit

' Requires references to Microsoft Shell Controls and Automation
Public Sub Example_Ter()
    Dim myFolderItem As FolderItem
    Dim i&
    i = 2
    [A1:E1] = Array("Nom Fichier", "Date modif", "Chemin", "Type", "Taille")
    For Each myFolderItem In ftpList("speedtest.tele2.net/upload", "anonymous", "anonymous") ' username: anonymous, password: anonymous
        'Debug.Print myFolderItem.Name, myFolderItem.IsFolder ' demo
        Cells(i, 1) = myFolderItem.Name
        Cells(i, 2) = myFolderItem.ModifyDate
        Cells(i, 3) = myFolderItem.Path
        Cells(i, 4) = myFolderItem.Type
        Cells(i, 5) = myFolderItem.Size
        i = i + 1
    Next
End Sub

' Returns a FolderItems collection from the FTP server
Private Function ftpList(strFTPlocation As String, Optional strUser As String, Optional strPassword As String) As FolderItems
    Dim myShell As New Shell
    Dim strConnect As String
   
    If strUser <> "" Then strConnect = strUser & ":" & strPassword & "@"
    Set ftpList = myShell.Namespace("FTP://" & strConnect & strFTPlocation).Items '("ftp://user:password@ftp.site.com")
End Function
 

Staple1600

XLDnaute Barbatruc
Re

En creusant encore un peu plus, il y a un peu de plus dans le mieux ;)
VB:
' Requires references to Microsoft Shell Controls and Automation
Public Sub Example_Quattro()
    Dim myFolderItem As Shell32.ShellFolderItem
    Dim i&
    i = 2
    [A1:E1] = Array("Nom Fichier", "Date modif", "Chemin", "Type", "Taille")
    For Each myFolderItem In ftpList("speedtest.tele2.net/upload", "anonymous", "anonymous") ' username: anonymous, password: anonymous
        'Debug.Print myFolderItem.Name, myFolderItem.IsFolder ' demo
        Cells(i, 1) = myFolderItem.Name
        Cells(i, 2) = myFolderItem.ModifyDate
        Cells(i, 3) = myFolderItem.Path
        Cells(i, 4) = myFolderItem.Type
        Cells(i, 5) = myFolderItem.ExtendedProperty("Size")
        i = i + 1
    Next
End Sub
'bstrPropName

' Returns a FolderItems collection from the FTP server
Private Function ftpList(strFTPlocation As String, Optional strUser As String, Optional strPassword As String) As FolderItems
    Dim myShell As New Shell
    Dim strConnect As String
    
    If strUser <> "" Then strConnect = strUser & ":" & strPassword & "@"
    Set ftpList = myShell.Namespace("FTP://" & strConnect & strFTPlocation).Items '("ftp://user:password@ftp.site.com")
End Function
 

johnpeter

XLDnaute Nouveau
Les fichiers une fois téléchargés ne sont plus de la même grandeur que sur le serveur de plusieurs centaines d'octets. Donc cette référence ne me permet pas de les comparer. J'ai donc besoin de vous encore et encore pour solutionner ce problème de ModifyDate qui renvoi 12:00:00 AM pour tous les fichiers. Pour ceux existants sur C DatelastModified fonctionne mais pas pour la liste importée du serveur !
 

Staple1600

XLDnaute Barbatruc
Bonsoir l fil

En relisant, creusant encore, cogitant et simplifiant, aurais-je atteint le but?
VB:
Sub Exemple_Cinquo()
'[X] Reférence Shell & Automation
Dim ftpFolder As Shell32.Folder
Dim Fich As Shell32.FolderItem
Dim i&
i = 2
Set myShell = New Shell
Set ftpFolder = myShell.Namespace("ftp://anonymous:anonymous@speedtest.tele2.net/upload")
[A1:C1] = Array("Nom", "Date modif", "Taille")
For Each Fich In ftpFolder.Items
Cells(i, 1) = Fich.Name 'Nom fichier
Cells(i, 2) = CStr(ftpFolder.GetDetailsOf(Fich, 3)) 'DateLastModified
Cells(i, 3) = CStr(ftpFolder.GetDetailsOf(Fich, 1)) 'taille
i = i + 1
Next
End Sub
 

johnpeter

XLDnaute Nouveau
Bonjour, c'est un travail extraordinaire et j'ai honte de ne rien trouver seul.
La date arrive en format text donc pas utilisable pour la comparer. Alors depuis 3 h je cherche. Pas possible avec les fonctions excel ni avec la macro en ajoutant dans la votre :
Cells(i, 2) = Format(ftpFolder.GetDetailsOf(Fich, 3), "dddd d mmmm yyyy ")
Cells(i, 2) = Format(ftpFolder.GetDetailsOf(Fich, 3), "hh ""h.""mm")
J'ai même essayé avec extraction gauche et droite ainsi que DATEVAL.... mais rien n'y fait pas plus que les formule de collage
Sniff
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil

Il y a des caractères parasites dans ce que retourne ftpFolder.GetDetailsOf(Fich, 3)
En passant par le rayon Bricolage, on peut arriver à ceci
(mais est-ce correct?)
VB:
Sub Exemple_Six()
'[X] Reférence Shell & Automation
Dim ftpFolder As Shell32.Folder
Dim Fich As Shell32.FolderItem
Dim i&, vDate
i = 2
Set myShell = New Shell
Set ftpFolder = myShell.Namespace("ftp://anonymous:anonymous@speedtest.tele2.net/upload")
[A1:D1] = Array("Nom", "Date modif", "Heure modif", "Taille")
For Each Fich In ftpFolder.Items
Cells(i, 1) = Fich.Name 'Nom fichier
vDate = Split(ftpFolder.GetDetailsOf(Fich, 3))
Cells(i, 2) = Format(CDate(Mid(vDate(0), 2, 3) & Mid(vDate(0), 6, 3) & Right(vDate(0), 4)), "dddd dd mmmm yyyy")
Cells(i, 3) = vDate(1)
Cells(i, 4) = CStr(ftpFolder.GetDetailsOf(Fich, 1)) 'taille
i = i + 1
Next
End Sub
 

johnpeter

XLDnaute Nouveau
Bonjour, la date arrive toujours au format texte. J'ai trouvé une solution qui n'est pas très "développeur" mais qui fonctionne bien. En découpant la date et l'heure chiffre par chiffre avec STXT et en reconstituant le tout j'ai une date au format date ou numérique et c'est parfaitement utilisable et comparable. Ainsi mon problème est résolu et comme promis je suis redevable pour votre formidable aide.
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil

johnpeter
Aprés avoir creusé, encore (et sauf erreur de part), il semblerait que ce code présente un souci majeur.
A la première éxécution, il rapatrie les infos sur les fichiers.
Chouette
Mais lors des éxécutions ultérieures du code, il n'y a pas d'actualisation !!!
On peut le vérifier en testant sur l"URL présente dans le code (en passant par un navigateur)
En actualisant la page (touche F5), on voit que le contenu du dossier change
Mais si parrallèmement, on lance la macro N fois, bah on aura dans Excel que les infos de la 1ére exécution.
Tu confirmes ce phénomène?
Si oui, il faut oublier ce code.
 

johnpeter

XLDnaute Nouveau
Bonjour, Pour ma procédure ce code fonctionne bien puisqu'il est sur le premier fichier à l'ouverture d'Excel. Donc la MàJ est juste et presque parfaite (un seul petit problème + 2h de décalage horaire) Le fichier exécute les importations des fichiers nouveaux et se ferme pour laisser place aux procédures suivantes. Pourquoi exécuter ton super code 2 fois dans la même procédure ? Pour vérifier j'ai changé un fichier sur le FTP sans fermer le fichier avec ton code et effectivement pas de MàJ. Il m'a fallu le fermer et l'ouvrir pour que la MàJ apparaisse. Bon à savoir pour les utilisateurs. Mais ton code n'est pas pour autant à oublier car c'est le meilleur des forums.
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil

Comme disait le grand Jacques
"Tout peut s'oublier
Qui s'enfuit déjà,
Oublier le temps
Des malentendus
Et le temps perdu
A savoir comment
Oublier ces heures
Qui tuaient parfois
A coups de pourquoi " ;)

J'aimerais juste arriver à faire correctement (donc avec actualisation)ce que demande le titre de ta discussion:
Lister des fichiers (et certaines de leur propriété) sur un FTP
;)

Peut-être que d'autres camarades de jeux du forum viendront me filer un coup de main (parce que je me sens un peu seul sur ce coup-là ;))
 

Discussions similaires

Statistiques des forums

Discussions
312 392
Messages
2 088 004
Membres
103 695
dernier inscrit
acimi