Se connecter avec
S'enregistrer | Connectez-vous

Enregistrement automatique d'un fichier

Dernière réponse : dans Programmation

Bonjour à tous
Voici mon probleme
Je télécharge un fichier en format Excel (Xls)
Puis je voudrais enregistrer ce fichier dans mes documents,le renommer et le mettre en format Excel 2003
L'enregistreur me donne le code ci dessous.
Sauf que pour les prochaines fois, lorsque le nom de mon fichier va changer, ça ne fonctionnera plus.

  1. Sub Macro4()
  2. Windows("515331718_20100831_20111025111045[1]").Activate
  3. ActiveWorkbook.SaveAs Filename:="C:\Documents and Settings\My Documents\MES BILANS\ENTREPRISE X 31122010.xls" _
  4. , FileFormat:=xlExcel9795
  5. End Sub


Comment faire pour qu'il prenne en compte le fichier téléchargé? Le ITEM ne fonctionnera pas puisqu'on ne connait pas d'avance la position du fichier téléchargé.
fopy12 a édité ce message
Lassé par la pub ? Créez un compte
Expert Programmation

Salut,

Comment télécharges-tu ce fichier ?
Si c'est par un script ou une macro, celle-ci ou celui-là doivent connaître le nom du fichier, non ?
Reste à passer ce nom à ta macro.

Mékilémoche ce code de l'enregistreur !

Au lieu d'une macro dans Excel, je te propose un script VBS (c'est presque pareil) :
  1. Dim FSO
  2. Set FSO = Wscript.CreateObject("Scripting.FileSystemObject")
  3.  
  4. Dim in_file, out_file, ext
  5. in_file = WScript.Arguments(0)
  6.  
  7. ext = "." & FSO.GetExtensionName(in_file)
  8. out_file = Left(in_file, Len(in_file) - Len(ext)) & "_XL2003" & ext
  9.  
  10. Dim XL
  11. Set XL = Wscript.CreateObject("Excel.Application")
  12.  
  13. Dim WB
  14. Const xlExcel9795 = 43
  15. Set WB = XL.Workbooks.Open(FileName:=in_file)
  16. WB.SaveAs out_file, xlExcel9795
  17. WB.Close False
  18.  
  19. XL.Quit


(J'espère qu'il fonctionne, je n'ai pas pu le tester.)

Ce code fonctionne très bien (après quelques légères modifs), je viens de le tester.
zeb a édité ce message

zeb a dit :
Salut,
Comment télécharges-tu ce fichier ?


Salut Zeb,
Je télécharge mon fichier depuis un site web qui me permet de récupérer des données en format Xls.
je découvre script vbs là. en fouinant sur le net, j'ai à peu près compris ce que c'est. cela m'a l'air compliqué pour ce que je veux faire pour la suite.
Tanpis! je téléchargerai le fichier manuellement, puis je le sauvegarderai manuellement et enfin ma macro ira chercher le fichier là où je l'ai sauvegardé afin de pouvoir faire les modifs.
Donc du coup j'aurai une question
Une fois téléchargé, je nommerai mon fichier par un numéro et je l'enregistrerai dans mes docs/ mes bilans.
J'aimerais ensuite ouvrir ce fichier en saisissant, dans un inputbox son nom.
Voici mon code :
  1. Option Explicit
  2. Sub test_save()
  3. 'Déclarations des variables
  4. Dim MessageI, Title, MaValeur
  5. Dim MessageB
  6. Dim ClassDonnees As Workbook
  7. Dim FSO As New FileSystemObject
  8. Dim FichierALire As File
  9.  
  10. 'Message et Titre du Inputbox
  11. MessageI = "Entrez le siren "
  12. Title = "SIREN"
  13.  
  14. ' Affiche le message et le titre
  15. MaValeur = InputBox(MessageI, Title)
  16.  
  17. 'Conditions d'ouverture d'un fichier
  18. 'lire tous les fichiers se trouvant dans mes docs/mes bilans
  19. For Each FichierALire In FSO.GetFolder("C:\Documents and Settings\F11111\My Documents\MES BILANS").Files
  20. 'l'ouvrir s'il s'agit d'un fichier xls et si le nom du fichier est le même que celui qui a été rentré dans le inputbox
  21. If UCase(FichierALire.Name) Like "*.XLS" Then
  22. If UCase(FichierALire.Name) Like "MaValeur" Then
  23. Set ClassDonnees = Workbooks.Open(FichierALire.Path, ReadOnly:=True)
  24. Else: MessageB = MsgBox("Ce Numéro SIREN n'existe pas dans le dossier MES BILANS", 1)
  25. End 'Mettre fin au 'for each...Next'
  26. End If
  27. End If
  28. Next
  29. End Sub

Bien sur il ne marche pas. Pourquoi???
fopy12 a édité ce message
Expert Programmation

Ligne 26 : Utilise Exit For.

Donc la réponse à ma question est : "je télécharge à la main". Mais comment choisis-tu le fichier à télécharger ? Ce choix peut-il être fait par le programme ?

Je ne comprends pas tout de ton problème, je te fais une proposition, elle ne te convient pas et tu lâches l'affaire... M'enfin pourquoi laisser tomber si rapidement ????????

Ce script VBS (de 9 lignes sans compter les déclarations et les lignes vides - quelle complexité !) permet de traiter ton fichier. Mais on peut le faire dans Excel, pas de problème.
On peut même faire le téléchargement et le traitement dans Excel. Faut juste que tu n'abandonnes pas dès que ça paraît compliqué. (Et le plus compliqué dans cette affaire, c'est que je comprenne tout ton problème).

Allez courage.

Salut zeb
Voilà pour t'aider à mieux comprendre mon problème...
... Je me connecte sur un site internet. Ensuite je tape mon code utilisateur et mon mot de passe.
Après je recherche mon fichier à télécharger en saisissant un numéro à 9 chiffres. Et enfin je le télécharge en cliquant sur un onglet puis sur un bouton.
En fait comme je ne maitrise pas assez le sujet, j'ai peur de planter tout le système informatique de ma boîte en utilisant le script VBS:??: 
ça peut être le cas??

Mais je ne me décourage pas!!



fopy12 a édité ce message
Expert Programmation

Laissons tomber le VBS (très - trop ? - limité par ailleurs)

Et pourquoi ne pas faire un programme (script VBS - bon, on a dit qu'on laissait tomber, macro Excel/VBA - bonne idée (!), autre - faut voir) qui se connecte sur le site internet, qui tape le code utilisateur et le mot de passe, qui saisisse le numéro à 9 chiffres, qui clique sur un onglet puis sur un bouton, et qui transforme ce fichier XLS version 100...000 en version 95 ?

------

Pourquoi mon premier script - qui ne s'occupe certes pas du téléchargement - ne te convient pas ?

J'ai retrouvé mon poste de travail avec Excel (Quoi, zeb répond sur le forum aux heures de bureau ? Quoi, zeb n'a pas Excel sur sa Linux-box à la maison ?) et je l'ai vérifié. Ce qui n'a permis de corriger quelques menues fautes. Il fonctionne parfaitement !

Salut Zeb,
J'ai lancer l'éditeur de texte Bloc-notes. Puis j'ai recopié ton code et sauvegardé (en mettant 'tout types de fichiers').
Esuite j'ai ouvert le fichier afin d'exécuter le script mais rien ne se passe.

Aussi je voulais te demander qu'est ce que ça signifie ces 3 lignes suivantes

  1. in_file = Wscript.Arguments(0)
  2.  
  3. ext = FSO.GetExtensionName(in_file)
  4. out_file = Left(in_file, Len(in_file) - Len(ext)) & "_XL2003" & ext


Merci.
zeb a édité ce message
Expert Programmation

(J'ai modifié pour message pour ajouter =VB à la balise [ code ]. C'est juste pour faire joli. Fais-le de toi-même maintenant, merci.)

-------------------

Dans un traitement simple, on a une entrée et une sortie :
entrée --> | traitement | --> sortie


Bon. J'ai la mauvaise habitude de nommer mes variables en anglais. Donc la variable pour le fichier d'entrée (input file) s'appelle in_file.
Je ne t'explique pas out_file.

Quand on exécute un programme, on peut lui passer un certain nombre de paramètres. En anglais, et là ce n'est pas moi qui ai choisi, on parle indistinctement de parameters ou d'arguments. Donc la fonction Arguments() de la bibliothèque VB Wscript renvoie le paramètre dont on a donné le numéro. Et en informatique, on commence à compter à partir de zéro !

Lançons donc notre script avec en paramètre le nom de ton fichier !
Cela se fait soit en tapant explicitement :
c:\> nom_du_script.vbs ton_fichier_excel.xls
, soit en faisant glisser ton fichier Excel sur l'icône du script VBS.
C'est ainsi que le programme récupère le nom du fichier Excel à traiter dans la variable input file.

Pour comprendre
  1. ext = FSO.GetExtensionName(in_file)
, je t'invite à poser la question à gougueule : http://google.fr/search?q=FileSystemObject+GetExtension...
Ça me semble évident. Et à toi ?

Pour
  1. out_file = Left(in_file, Len(in_file) - Len(ext)) & "_XL2003" & ext
regarde dans l'aide ce que font Left() et Len().
Alors ?

Pour mieux comprendre, crée avec notepad le fichier test_à_con_de_zeb.vbs en vérifiant bien que l'extension est .vbs et non pas .txt.
Et dedans, tu mets :
  1. in_file = "monfichier.xls"
  2. ext = ".xls"
  3. out_file = Left(in_file, Len(in_file) - Len(ext)) & "_XL2003" & ext
  4. MsgBox out_file


A étudier...
zeb a édité ce message

sallut zeb,
Je vais suivre ton conseil et donc j'ai décidé d'automatiser le téléchargement de mon fichier par VBscript.
Je me suis documenté ces derniers jours sur le sujet, j'ai trouvé quelques codes sur le net mais la plupart du temps je ne comprends pas grand chose.
Pour faire simple, je ne sais pas par où commencer.
Peux tu m'aider stp ? t'aurais pas un bout de code qui pourrai m'aider à débuter?
Expert Programmation

Bon, ben ça commence mal.
VBScript ne sait pas télécharger.
Le VBS est un sous ensemble de VB trop limité.
Un grand classique, c'est donc de piloter Excel/VBA à partir d'un script VB pour accéder aux API de Windows, qui elles, permettent de télécharger.

Rien qu'à la lecture de mon explication, tu as compris pourquoi tu ne pigeais pas grand' chose aux exemples glanés sur le net !

Alors quoi ?

Et bien on peut le faire en Excel/VBA (soluce 1), en VBS->Excel/VBA (soluce 2), en VBS avec outil de téléchargement (soluce 3)

Personnellement, la solution 3 me convient sur le principe et je l'utilise souvent.
Pour pallier l'absence de capacité à télécharger de VBS, j'utilise un portage GnuWin32 de la commande UNIX wget. Trop facile :sol: 
Lassé par la pub ? Créez un compte