Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

telecharger quotidienement sur un site ftp

B

boris

Guest
je dois telecharger quotidiennement un fichier xls d'un site ftp, que je dois rajouter a la suite de mon fichier xls deja existant.
Je ne sais pas comment faire. Quelqu'un pourrait il m'aider?
merci
 

MichelXld

XLDnaute Barbatruc
BONJOUR Boris

par macro , pour télécharger le classeur sur ton disque dur ( à la racine C:\\ dans l'exemple ) , tu peux utiliser

Code:
Private Declare Function URLDownloadToFile Lib 'urlmon' _
   Alias 'URLDownloadToFileA' (ByVal pCaller As Long, ByVal szURL As String, _
   ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
   
Private Const ERROR_SUCCESS As Long = 0
   
Sub LancementProcedure()
DownloadFile '[url]ftp://ftp2.leSite/leClasseur.xls'[/url], 'C:\\leclasseur.xls'
End Sub

Public Function DownloadFile(ByVal sURL As String, ByVal sLocalFile As String) As Boolean
Dim lngRetVal As Long
DownloadFile = URLDownloadToFile(0&, sURL, sLocalFile, 0&, 0&) = ERROR_SUCCESS
End Function

dans l'exemple
'ftp://ftp2.leSite/leClasseur.xls' est le lieu de stockage de ton fichier

'C:\\leclasseur.xls' est l'endroit ou tu vas l'enregistrer sur ton disque et le nom que tu vas lui donner


j'espere que ça pourra t'aider

bonne soiree
MichelXld
 
B

boris

Guest
merci beaucoup pour ces informations. Mais mon principal probleme reside dans le fait que cette operation doit se faire quotidienement, sans que j'ai a faire quoi que ce soit. L'ordi doit se connecter tous les jours a une certaine heure tout seul, telecharger ce fichier, et le traiter...
 

MichelXld

XLDnaute Barbatruc
bonjour Boris

tu peux utiliser le planificateur de taches de Windows en precisant l'heure ainsi que la frequence d'ouverture de ton classeur

la macro de téléchargement sera alors à placer au niveau de ThisWorkbook , pour qu'elle s'execute automatiquement dès l'ouverture du classeur


dans ta procedure tu auras en plus besoin de verifier si tu es bien connecté sur internet :

par exemple :

Private Declare Function IsNetworkAlive Lib 'SENSAPI.DLL' _
(ByRef lpdwFlags As Long) As Long

Sub verificationConnection()
Select Case IsNetworkAlive(0)
Case 0
MsgBox 'not connected'
Case 1
MsgBox 'connected to LAN'
Case 2
MsgBox 'connected to WAN'
Case Else
MsgBox 'connected to other network'
End Select
End Sub


et si ce n'est pas le cas , il faudra te connecter

Lien supprimé


pour ce qui est du traitement de tes données en suite , ce n'est pas évident de t'aider car tu ne donnes par beaucoup d'infos sur ce que tu souhaites faire

j'espere que ces quelques infos pourront t'aider

bonne journée
MichelXld
 
B

boris

Guest
Alors, voila exactement ce que je dois faire.
-telecharger tous les jours de maniere automatique un fichier .txt, sur un site ftp qui necessite un nom d'utilisateur et un mot de passe.
-Rajouter une ligne a ce fichier.
-Le sauver

Pour cela, je dois ouvrir le fichier .txt avec excel, rajouter la premiere ligne excel tirer d'un autre fichier excel, ou l'ecrire par macro (c'est pas tres long a faire : 6 ou 7 mots...), sauver le fichier excel en fichier .txt.

Pour le moment je n'arrive pas a faire fonctionner le code que tu m'a donne, quand je l'execute, l'ordi reflechie, puis s'arrette, et rien ne se passe.
Sinon, j'ai enregistre une macro, mais elle a des bugs :
-j'enregistre la macro
- j'ecris manuellement la premiere ligne
- je vais telecharger le fichier .txt sur le site ftp, en passant par données externes/importer des donnes, et en tapant mon mot de passe.
- je le charge dans excel en precisant qu'une virgule signifie une cellule differente.
- je sauve en .txt
- j'arrette la macro

-je l'execute :
- elle m'ecrit la premiere ligne
- elle telecharge le fichier txt
- elle l'ecrit dans le fichier excel
- elle sauve le fichier en .txt

MAIS :
lorsque je sors d'excel, et que je rerentre pour executer la macro, il me dit : erreur d'execution '1004'
ne peux pas acceder au fichier ftp... les raisons possibles sont :
*le nom de fichier n'existe pas
*un autre programme est en train de l'utiliser
.....
et la macro ne charge pas le fichier .txt du site ftp

et ceci arrive des fois quand j'enregistre la macro, quand je l'execute juste apres.....enfin je m'arrache les cheveux.


quand je regarde ma macro, a aucun endroit je vois apparaitre un nom d'utilisateur et un password, je pense que ca vient peut etre de la.
J'ai regarder les taches de windows, il m'ouvre bien mon fichier excel, mais n'execute pas le programme meme si je l'ai mi dans ThisWorkbook...

voila, j'espere que tu ne te prend pas trop la tete pour moi. En tout cas merci pour tout.
 

MichelXld

XLDnaute Barbatruc
rebonjour Boris

tu oublies tout ce que j'ai écrit précédemment car ce que tu expliques dans ton dernier message n'a pas grand chose à voir avec ta question initiale

peux tu placer sur le forum la macro que tu as enregistré ?



bonne soiree
MichelXld
 
B

boris

Guest
je me dit que peut etre ce serait plus simple de passer par un programme C++...mais j'avoue que rien que l'idee d'y penser me donne des boutons...

voici la macro que j'ai enregistre :
mais a mon avis le probleme vient du site ftp et du mot de passe. Meme en dehors de la macro, des fois il me redemande le mot de passe (que j'ai enregistrer lors de la saisi du site ftp), et des fois non, des fois ca marche plusieur fois d'affile, et des fois non. J'ai l'impression que ca marche si il me demande mon mot de passe, sinon non. Comme si le fait de ne pas le demander signifiait que je suis deja dans le site ftp, et du coup quand j'y suis deja, je ne peux pas ouvrir et enregistrer de fichiers....enfin ce sont juste des impressions.


Sub essaimacro2()
'
' essaimacro2 Macro
' Macro enregistrée le 19/04/2005 par ernandes lydia
'

'
Range('A1').Select
ActiveCell.FormulaR1C1 = 'lat'
Range('B1').Select
ActiveCell.FormulaR1C1 = 'long'
Range('C1').Select
ActiveCell.FormulaR1C1 = 'brightness'
Range('D1').Select
ActiveCell.FormulaR1C1 = 'scan'
Range('E1').Select
ActiveCell.FormulaR1C1 = 'track'
Range('F1').Select
ActiveCell.FormulaR1C1 = 'acqdate'
Range('G1').Select
ActiveCell.FormulaR1C1 = 'acqtime'
Range('H1').Select
ActiveCell.FormulaR1C1 = 'satellite'
Range('I1').Select
ActiveCell.FormulaR1C1 = 'confidence'
Range('A2').Select
With ActiveSheet.QueryTables.Add(Connection:= _
'TEXT;ftp://mapsftp.geog.umd.edu/Europe', Destination:= _
Range('A2'))
.Name = 'Europe.A2004309'
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
ActiveWorkbook.SaveAs Filename:= _
'C:\\Documents and Settings\\ernandes\\Bureau\\EuropeA2004309.xls'
ActiveWorkbook.SaveAs Filename:= _
'C:\\Documents and Settings\\ernandes\\Bureau\\EuropeA2004309.txt', FileFormat:= _
xlText, CreateBackup:=False
End Sub


PS : il m'indique un probleme au niveau du .Refresh BackgroundQuery:=False
 

MichelXld

XLDnaute Barbatruc
rebonsoir Boris

sur le site de Frederic Sigonneau , il y a un exemple pour effectuer des requetes avec mot de passe

Ce site n'existe plus


sinon pour la telecharger un fichier texte depuis le serveur , la methode WinHttpRequest pourrait peut etre t'aider
j'ai deja eu l'occasion d'utiliser cette methode pour télécharger des images et des fichiers : cela fonctionne tres bien , mais je n'ai jamais eu la possibilité de faire la manip avec des mots de passe

il y a un exemple dans l'aide MSDN ( si j'ai bien tout compris )

Ce lien n'existe plus


peux tu essayer cette procedure : je ne peux pas t'aider pour les essais(je n'ai pas de serveur de test) et il faudra peut etre que tu fasses quelques adaptations ( nottament dans le choix de la constante serveur/proxy )


Code:
Option Explicit
Const HTTPREQUEST_SETCREDENTIALS_FOR_SERVER = 0
Const HTTPREQUEST_SETCREDENTIALS_FOR_PROXY = 1

Sub recupererFichier_WinHttp_MotDePasse()
'activer la reference Microsoft WinHttp Services ,version x.x
Dim b() As Byte
Dim h As Long
Dim oWinHttp1 As WinHttp.WinHttpRequest

h = FreeFile
'lieu d'enregistrement du fichier texte sur le disque dur
Open 'C:\\monFichier.txt' For Binary As #h

Set oWinHttp1 = New WinHttp.WinHttpRequest

'lieu  de stockage en ligne
oWinHttp1.Open 'GET', '[url]ftp://ftp2.leSite/leFichier.txt'[/url], False

'!!!!!!!!à adapter en fonction du projet !!!!
'
'remplacer 'User Name' et 'Password' par les données appropriées
'
'parametrez la constante
'HTTPREQUEST_SETCREDENTIALS_FOR_SERVER ou HTTPREQUEST_SETCREDENTIALS_FOR_PROXY
'
oWinHttp1.SetCredentials 'User Name', 'Password', HTTPREQUEST_SETCREDENTIALS_FOR_SERVER

oWinHttp1.Send
oWinHttp1.WaitForResponse (30)
b() = oWinHttp1.ResponseBody

Set oWinHttp1 = Nothing
Put #h, 1, b()
Close #h
End Sub


bonne soiree
MichelXld
 
B

boris

Guest
Quand je lance le programme, voila ce qu'il me dit:

erreur de compilation
type defini par l'utilisateur non defini

et il me surligne : (apres le dim)
Dim oWinHttp1 As WinHttp.WinHttpRequest

Mais ne penses tu pas qu'un programme C++ pourrait etre plus simple, car la, on parle plus d'excel?
 
B

boris

Guest
j'ai refait tourne mon code en changeant simplement les noms de fichier de sauvegarde : je sauve le .xls avec un nom different que le fichier qui contient la macro.
Ca a l'air de marcher....
 
B

boris

Guest
euh.....en fait non.
hier j'ai changer le chemin d'acces pour me permettre de continuer mon programme : le fichier que je telecharge est sur mon ordi....mais la ya pas de probleme par contre
 
B

boris

Guest
je pense avoir identifie le probleme :
le password ne se sauve pas.
je veux dire.
Je vais dans modifier site ftp, et la j'recrit le password. Je sauve. Et si je quitte excel et que je reviens, le password n'est pas sauve...
 

MichelXld

XLDnaute Barbatruc
bonjour Boris

pour ton message de 10:48 :
dans la macro il est précisé qu'il faut activer la reference Microsoft WinHttp Services ,version x.x , ce que tu n'as sans doute pas fait

dans l'editeur de macro
Menu Outils
References
coches la ligne 'Microsoft WinHttp Services ,version x.x'
cliques sur OK pour valider

ensuite tu peux refaire des essais


par contre je suis désolé mais n'ai pas compris tes 3 messages suivants ...

je ne connais pas le C++ et je ne saurais te dire si cela t'apporteras quelque chose



bonne soiree
MichelXld
 
B

boris

Guest
bonsoir,

pour les messages non compris, je te resume:

je pense que le probleme de connexion au site ftp (avec mon programme) vient du fait qu'il y a un password pour y acceder.
Pour ajouter un site ftp a excel pour pouvoir aller y chercher des données, il faut :
-ouvrir
dans le menu deroulant 'regarder dans'
-ajouter/mofifier site ftp
et la tu rentres l'adresse, le nom d'utlisateur et la mot de passe.

Si je fais cela avant de lancer mon programme, ca marche.
Par contre, des que je sors d'excel et je reviens. Dans ajouter/modifier site ftp, le password a disparue...
Du coup, je suis obliger de retaper le pass a chaque fois que je veux faire fonctionner mon programme...

j'espere que j'ai ete un peu plus clair dans mes explications.
 
B

boris

Guest
j'ai essayer de lancer ton programme avec tes indications, et c'est une autre erreur qui apparait:

Erreur d'execution '-2147012890 (80072ee6)':
the URL does not use a recognized protocol

et il m'indique le lieu de stockage....

je t'avoue que je comprend pas trop ce code, et le visual basic en general d'ailleur...
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…