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
 

FaridP

XLDnaute Occasionnel
Re : VBA et FTP

Si t'étais devant moi, je crois que je t'embrasserai !!!!

C'est NI-CKEL ! Ca marche !

Je teste sur un grand nombre d'enregistrements pour te faire un retour définitif sur le sujet mais je suis très confiant !

T'as assuré grave !
 

FaridP

XLDnaute Occasionnel
Re : VBA et FTP

Re,

J'ai un plantage et j'ai pu identifier la cause mais là, ça va être difficile de contourner le problème.

En fait, quand il s'agit du dernier enregistrement du répertoire, la macro plante avec comme message :"Argument ou appel de procédure incorrect".
 

FaridP

XLDnaute Occasionnel
Re : VBA et FTP

Dernière info et je te laisse tranquille ; la ligne où se situe le plantage est la suivante :
VB:
Do While Mid(CC, t, 1) <> " " 'Retour en arrière jusqu'au 1er caractère vide (début de la taille)

Bonne soirée à toi,

Farid
 

FaridP

XLDnaute Occasionnel
Re : VBA et FTP

Bonjour Soft,

J'essaie depuis hier de trouver une solution mais rien à faire.

Si tu le souhaites, j'ai un ftp test donc je pourrais t'envoyer mon fichier pour que tu vois le "truc" en conditions réelles...

Passe une bonne fin de journée.

Farid
 

FaridP

XLDnaute Occasionnel
Re : VBA et FTP

Le voici ...

Avec toutes mes excuses et surtout, tous mes remerciements.

Farid
 

Pièces jointes

  • VerifFTP.xlsm
    64.9 KB · Affichages: 67
  • VerifFTP.xlsm
    64.9 KB · Affichages: 70
  • VerifFTP.xlsm
    64.9 KB · Affichages: 75

Softmama

XLDnaute Accro
Re : VBA et FTP

Re,

C'est exactement ce que je pensais, mais je n'avais osé t'en parler, car cela nous aurait relancé dans des explications longues et compliquées, en l'absence de fichier test... Mais tu as eu l'excellente idée de proposer ce fichier qui a du coup confirmé ce que je pensais : Dans le site FTP, les tailles des fichiers sont placées avant les noms des fichiers, et non après, ce qui explique l'erreur sur le dernier champ lors de ma macro précédente (et les tailles devaient toutes être décalées d'ailleurs).

VB:
sub gogozou()
Set IE = New internetExplorer
Dim IP, Login, PassWord
IP = "85.168.158.185"
Login = "Test"
PassWord = "test"
i = 2
Range("Enreg").ClearContents
Range("Taille").ClearContents

    Do Until Sheets(1).Cells(i, 1).Value = ""   
        If Mid(Sheets(1).Cells(i, 3).Value, 4, 2) = Mid(Range("Mois").Value, 4, 2) Then
            
        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
        MsgBox CC
        A = InStr(CC, TT)
        
        Sheets(1).Cells(i, 6) = IIf(A > 0, "Ok", "Absent")
        
        Dim B As Integer, t As Integer, X As String
If A > 0 Then
  CC = Mid(CC, 1, A - 2) 'Fin de la taille du fichier en A-2
  t = Len(CC)
  Do While Mid(CC, t, 1) <> " " 'Retour en arrière jusqu'au 1er caractère vide (début de la taille du fichier)
    t = t - 1
  Loop
  X = Mid(CC, t + 1, Len(CC) - t)
  X = Replace(X, ",", "")
Sheets(1).Cells(i, 7) = Val(X)   ' affichage en colonne G
End If             
        i = i + 1        
        Else:
        Sheets(1).Cells(i, 6).Value = "Hors Période"        
        i = i + 1        
        End If    
    Loop
MsgBox ("Traitement Terminé")
Set IE = Nothing
Sheets(2).PivotTables("Tableau croisé dynamique1").PivotCache.Refresh
End Sub
Bref, du coup, en 2 coups de cuillère à pot, c'est réglé, cf. fichier joint.
 

Pièces jointes

  • VerifFTP.xlsm
    65.3 KB · Affichages: 80
  • VerifFTP.xlsm
    65.3 KB · Affichages: 72
  • VerifFTP.xlsm
    65.3 KB · Affichages: 75

FaridP

XLDnaute Occasionnel
Re : VBA et FTP

Re,

Merci pour ce travail.

Bizarrement, quand je le teste sur le FTP final, il ne me trouve quasiment aucun des fichiers (2 sur 26).

N'est pas dû au fait qu'il y a sur le FTP un très grand nombre de fichiers et qu'ils peuvent être très éloignés les uns des autres ?

Je te joins la capture de la MsgBox sur le "Vrai" FTP

Je viens également de voir que même la taille que j'obtiens ne correspond pas à celle du fichier...
C'est peut-être parce que sur mon test, c'était des fichiers en octets ou Ko alors que là on est le plus souvent en Mo.
 

Pièces jointes

  • VraiFTP.jpg
    VraiFTP.jpg
    55.3 KB · Affichages: 73
Dernière édition:

FaridP

XLDnaute Occasionnel
Re : VBA et FTP

Soft,

Ca me saoule de te saouler avec ça donc franchement, n'hésite pas à me dire quand tu veux passer à autre chose, je comprendrais PARFAITEMENT.

Là, je cherche à intégrer une option alors que depuis plusieurs moi, je pensais ne jamais pouvoir obtenir le résultat principal à savoir la présence ou non du fichier.

Bravo et merci pour tout et n'hésite pas à m'envoyer balader ! :)

Farid
 

Softmama

XLDnaute Accro
Re : VBA et FTP

Re,

C'est quand même pas très logique... La taille du msgbox est effectivement limitée, mais pas celle de la variable CC qui contient tout le texte de la page (sans limite, il peut y en avoir 1 million, ça marche quand même). Donc effectuer une recherche dedans renvoie le bon résultat. Je m'oriente vers un bug d'excel plutôt, qui n'aurait pas le temps de charger la totalité de la variable CC avant de faire une recherche dedans. Et donc te propose de mettre une tempo à la place de la ligne :
Code:
        MsgBox CC

mettre :
Code:
        TT=Timer+1:  Do while Timer < TT:  Doevents:loop
(si cela fonctionne, teste avec 0.5 au lieu de 1, puis 0.2...)

J'attends ton retour
 

Discussions similaires

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

Statistiques des forums

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