VBA et FTP

FaridP

XLDnaute Occasionnel
Bonjour à tous,

J'avais déjà abordé ce point il y a plusieurs mois sans réussite et j'ai eu beau chercher depuis, je n'ai toujours aucune solution...

Voici mon problème : j'ai en cellule A1 le nom d'un fichier et je souhaiterais vérifier si ce fichier existe sur un serveur FTP. Si c'est le cas, je mets "OK" en A2 et sinon "ABSENT" (pas de soucis sur cette dernière partie).

Je parviens sans problème à télécharger ou récupérer un fichier sur le FTP mais impossible de simplement vérifier s'il existe sur ce dernier.

Si je n'avais pas des centaines de fichiers à traiter, je pourrais tous les télécharger mais je ne peux pas opter pour cette "solution".

Quand je pense que c'est super simple à faire pour des fichiers situés sur un disque local ou sur un réseau, ça me rend dingue que ce soit aussi compliqué quand il s'agit d'un FTP.

Merci à tous pour votre aide et bon week-end,

Farid
 

Softmama

XLDnaute Accro
Re : VBA et FTP

Bonjour,

Une idée parmi d'autres en l'absence d'URL pour contrôler comment sont agencées les données : Je récupérerais tous les liens de la page et vérifierais si l'un d'entre eux pointe vers le fichier recherché. Pour cela, tu peux procéder ainsi, en ayant coché ces références :
Microsoft HTML Object Library
Microsoft Internet Controls


VB:
Sub gogogo()
Set IE=New internetExplorer
IE.Navigate "ftp://..." 'Renseigner l'Url
IE.Visible = false
Do while IE.readystate <> READYSTATE_COMPLETE or IE.Busy: doEvents:loop
i=1
For each Lien in IE.Document.Links
'mettre une condition au lieu de faire afficher les liens ci-dessous... Par exemple un truc du genre : If Instr(Lien.innerHTML, Range("A1").text) >0 then msgbox "Le fichier existe !"
    cells(i,1) = Lien.innertext 'En fonction de la structure de l'intitulé du lien, trouver comment faire pour extraire le nom du fichier... si pas pertinent remplacer innertext par name... si tjs pas bon par innerHTML...
    i=i+1
next Lien
set IE=nothing
End sub

Les résultats peuvent prendre qques secondes avant de s'afficher.

Voilà, difficile de t'aider mieux sans connaître plus précisément la structure de ton site ftp, mais cette piste devrait te venir en aide.
 
Dernière édition:

FaridP

XLDnaute Occasionnel
Re : VBA et FTP

Alors, ce code fonctionne très bien pour me lister tout ce que contient le répertoire du FTP.

Seulement en supposant que en A1 j'ai : toto.txt
J'aimerais en A2 vérifier si ce fichier est bien présent sur le FTP sans lister tous les fichiers présents.

Pas simple ! En tout cas je te remercie sincèrement pour ton aide.

Farid
 

Softmama

XLDnaute Accro
Re : VBA et FTP

Re,

Oui bien donc, comme je le précisais en commentaire dans la macro précédente, il te suffit de remplacer cette ligne
Code:
cells(i,1) = Lien.innerText
par
Code:
If Instr(Lien.innerHTML, Range("A1").text) >0 then msgbox "Le fichier existe !"
 

Softmama

XLDnaute Accro
Re : VBA et FTP

Re,

Sinon, vu que cela fonctionne, il existe d'autres pistes moins certaines de fonctionner mais qui fournissent, si elles fonctionnent, une réponse plus rapide : tu peux essayer ainsi :
VB:
Sub gogogo2()
Set IE=New internetExplorer
IE.Navigate "ftp://..." 'Renseigner l'Url
Do while IE.readystate <> READYSTATE_COMPLETE or IE.Busy: doEvents:loop
Range("A2") = iif(Instr(IE.Document.body.innerText, Range("A1").text) >0,"Ok", "Absent")
set IE=nothing
End sub
 

FaridP

XLDnaute Occasionnel
Re : VBA et FTP

Tu déchires !!!! Je te kiffe d'une force phénoménale !!!!

Comme disait Barry : You are the first, My Last, My Everything ! :):):)

Plus sérieusement, je galère sur ce truc depuis plusieurs mois et toi, en quelques minutes, tu me trouves la solution !

Ca ne pèse pas très lourd et ce ne sont que des mots qui ne peuvent pas refléter la réalité de ma joie mais en tout cas, MERCI, MERCI, MERCI, MERCI et ... MERCI BEAUCOUP !

Je te souhaite un bon week-end et tout ce qu'il y a de mieux,

Farid
 

FaridP

XLDnaute Occasionnel
Re : VBA et FTP

Re-Bonjour,

Je te remercie une nouvelle fois pour l'aide ô combien précieuse que tu m'as apportée.
D'ailleurs ce n'est plus une aide mais carrément la solution à mon problème.

Si ce n'est pas trop exagérer, j'ai une dernière question... Penses-tu qu'il serait possible d'inclure un test sur la taille du fichier ?
C'est à dire que si la taille du fichier est inférieure à une taille donnée (500ko par exemple), le message soit différent de "OK" ou "Absent" ?

Je te souhaite un bon dimanche. ;)

Farid
 

Softmama

XLDnaute Accro
Re : VBA et FTP

Bonsoir,

Cette question est nettement plus difficile à résoudre, surtout (encore une fois) sans connaître la structure du site FTP. Donc en l'absence d'URL, je ne peux que te donner qques pistes qui risquent de te débloquer :
Ton problème devienttrès simple à résoudre si la taille du fichier est écrite 'en dur' quelque part sur :
* Le corps du texte de la page web
* Quelque part dans le code source de la page web
* ou quelque part sur le corps du texte affiché ou dans le code source de la page qui s'affiche lorsque tu cliques sur le lien te permettant de télécharger le fichier.

Par ailleurs, si de plus, la taille du fichier est systématiquement placée au même endroit par rapport au nom du fichier, voire si elle est placée entre parenthèses (ou autres balises...), tous ces éléments aident grandement à localiser la taille et à l'extraire. par exemple :
toto.xls (2,43 kO)

Bref, je pense pouvoir t'aider dans l'absolu, mais en l'absence d'URL pour voir comment est fait le site, je crains de ne pouvoir faire plus pour toi.

A te lire donc
 

FaridP

XLDnaute Occasionnel
Re : VBA et FTP

Bonsoir Soft',

Merci pour ta réponse on ne peut plus précise qui fait naitre chez moi un grand espoir.

Je te joins une capture d'écran de la page web du serveur FTP en espérant que cela puisse t'aider (et donc m'aider).

Je te remercie pour le temps que tu m'accordes et ta sympathie.

Farid
 

Pièces jointes

  • Apperçu_FTP.jpg
    Apperçu_FTP.jpg
    36 KB · Affichages: 204

FaridP

XLDnaute Occasionnel
Re : VBA et FTP

Re Soft,

Si ça peut t'aider, voici l'adaptation que j'ai faite de ton code pour répondre à mon besoin.
J'ai en Colonne A le nom du fichier, en colonne B le répertoire de stockage sur le FTP, en colonne C,D et E des informations divers et en colonne F le résultat du test réalisé par le code.

Code:
Sub gogogo()

Set IE = New internetExplorer
Dim IP, Login, PassWord
IP = "XX.XX.XX.XX"
Login = "XXX"
PassWord = "XXX"
i = 2

    Do Until Sheets(1).Cells(i, 1).Value = ""
    
        presta = Sheets(1).Cells(i, 2).Value
        
        IE.Navigate "ftp://" & Login & ":" & PassWord & "@" & IP & presta 'Renseigner l'Url du FTP
        
            Do While IE.readystate <> READYSTATE_COMPLETE Or IE.Busy: DoEvents: Loop
        Sheets(1).Cells(i, 6) = IIf(InStr(IE.Document.body.innerText, Sheets(1).Cells(i, 1).Text) > 0, "Ok", "Absent")
        
        i = i + 1
    
    Loop

MsgBox ("Traitement Terminé")

Set IE = Nothing

End Sub

Bonne soirée à toi,

Farid
 
Dernière édition:

Softmama

XLDnaute Accro
Re : VBA et FTP

Re,

Oui, sous réserve que je ne me sois pas trop mélangé les pinceaux, et toujours un peu au pif, (mais ça devrait un peu se préciser) je te propose d'adapter ta macro ainsi, pour obtenir la taille du fichier en colonne G :

VB:
Sub gogogo()
Dim CC As String, TT As String, A As Integer
Set IE = New InternetExplorer
Dim IP, Login, PassWord
IP = "XX.XX.XX.XX"
Login = "XXX"
PassWord = "XXX"
i = 2
    Do Until Sheets(1).Cells(i, 1).Value = ""
        presta = Sheets(1).Cells(i, 2).Value
        IE.navigate "ftp://" & Login & ":" & PassWord & "@" & IP & presta 'Renseigner l'Url du FTP
            Do While IE.readyState <> READYSTATE_COMPLETE Or IE.Busy: DoEvents: Loop

TT = Sheets(1).Cells(i, 1).Text
CC = IE.document.body.innerText
A = InStr(CC, TT)

        Sheets(1).Cells(i, 6) = IIf(A > 0, "Ok", "Absent")
            'Tentative de noter en colonne G la taille du fichier :
            If A > 0 Then Cells(i, 7) = Mid(CC, A + Len(TT) + 1, InStr(A + Len(TT) + 1, CC, "KB") - A + Len(TT) + 3)
      
        i = i + 1
    Loop

MsgBox ("Traitement Terminé")
End Sub
 

FaridP

XLDnaute Occasionnel
Re : VBA et FTP

Ca plante à la ligne suivante :
VB:
If A > 0 Then Cells(i, 7) = Mid(CC, A + Len(TT) + 1, InStr(A + Len(TT) + 1, CC, "KB") - A + Len(TT) + 3)

Avec comme message : Argument ou appel de procédure incorrect. :(

Je m'en veux un peu de te prendre la tête avec ça alors que tu m'as déjà beaucoup aidé donc franchement si tu veux laisser tomber, non seulement je comprends mais je t'y encourage presque.

Farid
 
Dernière édition:

Discussions similaires

Réponses
6
Affichages
334
  • Résolu(e)
Microsoft 365 Transfert FTP
Réponses
15
Affichages
2 K

Membres actuellement en ligne

Statistiques des forums

Discussions
312 294
Messages
2 086 896
Membres
103 404
dernier inscrit
sultan87