Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Changer du VBA en VBS

28 réponses
Avatar
vswildcat
Bonjour,

Après avoir torturer Excel en long en large et en travers, je passe au
"vraies" base de données (c...gnos pour ne pas le citer)

J'ai besoin de faire un script qui va enregistrer un fichier en excel (avec
la date du jour), à un endroit précis, puis l'envoyer par mail.

Je sais faire ça dans Excel, donc, en VBA, mais, afin de ne pas avoir à lire
des pages et des pages de documentation, je me demandais s'il était possible
de "convertir" (automatiquement s'entend) du VBA en VBS ?

Je sais, question de feignasse... Je vais me mettre au VBS, mais si je
pouvais avoir un peu d'aide pour démarrer...

A tout hasard, je vous donne ma macro en VBA :

Private Sub CommandButton1_Click()

Dim LaDate As String
Dim NomClasseur As String

LaDate = Format(Date, "ddmmyyyy")
NomClasseur = LaDate & ".xls"

ActiveWorkbook.SaveAs Filename:= _
"C:\Mes Documents\TESTS\fic1_" & NomClasseur _
, FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False

ActiveWorkbook.SendMail "blabla@crétin.fr", "test envoi mail"
ActiveWorkbook.Close False

End Sub

J'ai installé un petit plug-in qui évite le warning Outlook, donc, ça
fonctionne.

Sauf que je ne peux pas conserver ça en VBA puisqu'il faut que la macro
(donc le script) tourne avant d'enregistrer le fichier en Excel (puisqu'il
faut que la date soit dans le nom du fichier). C'est possible dans l'outil de
base de données, mais évidement, il ne comprend que le "vrai" script VB, pas
le VBA...

J'espère que mon message est clair, et qu'une (ou plusieures) âme charitable
pourra m'aider.

Vswildcat

8 réponses

1 2 3
Avatar
jbongran
Stephane wrote:
Précisions:
L'objet CDO.Message, tel qu'utilisé dans le code, n'a rien à voir
avec Outlook, pour voir des exemples d'usage:
http://www.motobit.com/tips/detpg_send-email-from-asp/


Ah ? Outlook d'office peut-etre pas mais c'est lié à outlook express.
[...]

A noter que tel quel, le code d'envoi de mail nécessite que le
serveur smtp de IIS soit installé et configuré sur la machine d'où
s'exécute le script.


Ah ? Tu peux m'expliquer pourquoi ca fonctionne chez mois depuis à peu
près 2 ans sans IIS. Contrairement à ce que tu dis 'CDO.Message' est
lié à Outlook (express). Il suffit juste,dans outlook express, de
créer un compte et de déclarer le serveur SMTP et ca fonctionne.

Stephane


Oui, tu as raison, après quelques recherches, effectivement CDO n'est jamais
qu'une interface MAPI (sauf dans le contexte où je l'utilise, c'est à dire
avec un smtp de IIS installé, auquel cas, ce que j'ai dit se vérifie)
http://www.imibo.com/delphi/mapiorcdo.html
http://msdn2.microsoft.com/en-us/library/ms526939.aspx

Le souci d'utiliser CDO comme extension MAPI est qu'il faut être sûr qu'il y
ait un client MAPI configuré et accessible dans le contexte du script.
Et visiblement d'après le lien suivant, ce sera le compte par défaut
configuré sur le client qui sera utilisé. Sur la page il ya aussi un bout de
code permettant
1 - d'adresser un serveur smtp de son choix
2 - de s'y authentifier si cela est obligatoire par le serveur
http://msdn2.microsoft.com/en-us/library/ms526939.aspx
http://support.microsoft.com/kb/555287
C'est pourquoi j'avait mentionné le fait de retrouver le post de Gilles
Laurent qui permettait de stipuler un serveur smtp, tout comme on le fait
dans Blat, mais sans rien ajouter comme dépendance sur le poste, post que je
ne retrouve d'ailleurs plus du tout (ce doit être l'âge)


Avatar
Stephane
Stephane wrote:


Quelle cascade !

Oui, tu as raison, après quelques recherches, effectivement CDO n'est jamais
...
configuré sur le client qui sera utilisé. Sur la page il ya aussi un bout de
code permettant
1 - d'adresser un serveur smtp de son choix
2 - de s'y authentifier si cela est obligatoire par le serveur
http://msdn2.microsoft.com/en-us/library/ms526939.aspx
http://support.microsoft.com/kb/555287


Ca vaut le coup d'aller y jeter un yeux.

Blat,


C'est sûrement la meilleur solution !

@+ Stephane

Avatar
jbongran
Stephane wrote:
[...]
Blat,


C'est sûrement la meilleur solution !

@+ Stephane


Euh, pourquoi ? le plaisir de rajouter une dépendance à un script ;-)
CDO est capable de faire ce que fait blat, et même un peu plus comme
s'authentifier soit en texte clair (comme blat) soit en ntlm (ce que ne fait
pas à priori blat).

Est-ce qu'un test d'envoi de mail en utilisant telnet à été fait depuis la
machine où tourne le script ?
C'est vraiment le premier test à faire pour voir "où ça coince" ...


Avatar
Stephane
Stephane wrote:

Euh, pourquoi ? le plaisir de rajouter une dépendance à un script ;-)


Par rapport à l'historique et j'ai oublié les smileys :-))

Est-ce qu'un test d'envoi de mail en utilisant telnet à été fait depuis la
machine où tourne le script ?
C'est vraiment le premier test à faire pour voir "où ça coince" ...


C'est sûr ! à connaitre par coeur.

@+ Stephane

Avatar
jbongran
Stephane wrote:
Stephane wrote:

Euh, pourquoi ? le plaisir de rajouter une dépendance à un script
;-)


Par rapport à l'historique et j'ai oublié les smileys :-))

Est-ce qu'un test d'envoi de mail en utilisant telnet à été fait
depuis la machine où tourne le script ?
C'est vraiment le premier test à faire pour voir "où ça coince" ...


C'est sûr ! à connaitre par coeur.

@+ Stephane


Pour envoyer un mail en telnet:, depuis la ligne de commande de la machine
où doit s'exécuter le script:

telnet ip_du_serveur 25
ehlo nom_de_domaine (il n'y a pas de faute a ehlo)
mail from:
rcpt to:
data
subject: test 1

Ceci est un test
.
quit

Notes:
1 - Chaque commande se termine par la touche entrée, le serveur doit
répondre par quelque chose du style "250 Ok" (tous les serveurs ne répondent
pas forcément à chaque commande, certains attendent la dernière ligne pour
vous indiquer si le mail est accepté ou pas). La ligne du sujet n'est pas
obligatoire, l'avant dernière ligne doit être un point suivi de la touche
entrée. La commande quit n'est pas obligatoire mais permet au serveur de
fermer la connexion imméditement.
2 - Faire le premier test avec des adresses du domaine local de messagerie,
puis, si tout se passe comme prévu, faire un test avec une adresse de
destinataire qui ne soit pas dans le domaine local, cela permet de detecter
les eventuelles interdictions de relais.


Avatar
Gilles LAURENT [MVP]
"jbongran" a écrit dans le message de
news:

Bonjour Jérôme,

[...]
| C'est pourquoi j'avait mentionné le fait de retrouver le post de
| Gilles Laurent qui permettait de stipuler un serveur smtp, tout comme
| on le fait dans Blat, mais sans rien ajouter comme dépendance sur le
| poste, post que je ne retrouve d'ailleurs plus du tout (ce doit être
| l'âge)

C'est ici ;-)
http://groups.google.fr/group/microsoft.public.fr.scripting/msg/b8cc110c171d1bfe

--
Gilles LAURENT [MVP]
http://glsft.free.fr
Avatar
jbongran
Gilles LAURENT [MVP] wrote:
"jbongran" a écrit dans le message de
news:

Bonjour Jérôme,

[...]
C'est pourquoi j'avait mentionné le fait de retrouver le post de
Gilles Laurent qui permettait de stipuler un serveur smtp, tout comme
on le fait dans Blat, mais sans rien ajouter comme dépendance sur le
poste, post que je ne retrouve d'ailleurs plus du tout (ce doit être
l'âge)


C'est ici ;-)
http://groups.google.fr/group/microsoft.public.fr.scripting/msg/b8cc110c171d1bfe


Merci de me confirmer que ma tête (à défaut de mes doigts) fonctionne encore
normalement ;-)
Finies les vacances ?


Avatar
Gilles LAURENT [MVP]
"jbongran" a écrit dans le message de
news:%

| Merci de me confirmer que ma tête (à défaut de mes doigts) fonctionne
| encore normalement ;-)

Mais personne ici n'en doutait Jérôme ;-)

| Finies les vacances ?

Et oui, toutes les bonnes choses ont une fin !
Reprise "tranquille" Lundi ;-)

--
Gilles LAURENT [MVP]
http://glsft.free.fr
1 2 3