Enregistrement automatique d'un fichier

fopy12

Habitué
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.

Code:
Sub Macro4()
Windows("515331718_20100831_20111025111045[1]").Activate
ActiveWorkbook.SaveAs Filename:="C:\Documents and Settings\My Documents\MES BILANS\ENTREPRISE X 31122010.xls" _
        , FileFormat:=xlExcel9795
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é.
 

zeb

Modérateur
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) :
Code:
Dim FSO
Set FSO = Wscript.CreateObject("Scripting.FileSystemObject")

Dim in_file, out_file, ext
in_file = WScript.Arguments(0)

ext = "." & FSO.GetExtensionName(in_file)
out_file = Left(in_file, Len(in_file) - Len(ext)) & "_XL2003" & ext

Dim XL
Set XL = Wscript.CreateObject("Excel.Application")

Dim WB
Const xlExcel9795 = 43
Set WB = XL.Workbooks.Open(FileName:=in_file)
WB.SaveAs out_file, xlExcel9795 
WB.Close False 

XL.Quit

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

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

fopy12

Habitué


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 :
Code:
Option Explicit
Sub test_save()
'Déclarations des variables
Dim MessageI, Title, MaValeur
Dim MessageB
Dim ClassDonnees As Workbook
Dim FSO          As New FileSystemObject
Dim FichierALire As File

'Message et Titre du Inputbox
MessageI = "Entrez le siren "
Title = "SIREN"

' Affiche le message et le titre
MaValeur = InputBox(MessageI, Title)

'Conditions d'ouverture d'un fichier
'lire tous les fichiers se trouvant dans mes docs/mes bilans
For Each FichierALire In FSO.GetFolder("C:\Documents and Settings\F11111\My Documents\MES BILANS").Files
'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
If UCase(FichierALire.Name) Like "*.XLS" Then
    If UCase(FichierALire.Name) Like "MaValeur" Then
        Set ClassDonnees = Workbooks.Open(FichierALire.Path, ReadOnly:=True)
    Else: MessageB = MsgBox("Ce Numéro SIREN n'existe pas dans le dossier MES BILANS", 1)
    End 'Mettre fin au 'for each...Next'
    End If
End If
Next
End Sub
Bien sur il ne marche pas. Pourquoi???
 

zeb

Modérateur
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.
 

fopy12

Habitué
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!!



 

zeb

Modérateur
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 !
 

fopy12

Habitué
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

Code:
in_file = Wscript.Arguments(0)

ext = FSO.GetExtensionName(in_file)
out_file = Left(in_file, Len(in_file) - Len(ext)) & "_XL2003" & ext

Merci.
 

zeb

Modérateur
(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 :[fixed]c:\> nom_du_script.vbs ton_fichier_excel.xls[/fixed], 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
Code:
ext = FSO.GetExtensionName(in_file)
, je t'invite à poser la question à gougueule :
Ça me semble évident. Et à toi ?

Pour
Code:
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 :
Code:
in_file = "monfichier.xls"
ext = ".xls"
out_file = Left(in_file, Len(in_file) - Len(ext)) & "_XL2003" & ext
MsgBox out_file

A étudier...
 

fopy12

Habitué
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?
 

zeb

Modérateur
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 . Trop facile :sol:
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 128
Messages
6 717 834
Membres
1 586 369
Dernier membre
Mouslah
Partager cette page
Haut