Aller au contenu


Photo
- - - - -

Lancer plusieurs macro *mcr en Javascript


  • Veuillez vous connecter pour répondre
36 réponses à ce sujet

#1 vlx360

vlx360

    Member

  • Membres
  • 34 messages

Posté 04 juin 2017 - 04:15

Salut,

 

Désolé de venir comme çà sans présentation, et pour le déterrage mais je suis à la bourre et ce topic est presque parfait pour ce que je recherche mais....

 

 

Depuis 15 jours, étant débutant, cherchant à lancer des macros *mcr via simplement un lien sur une page web, çà marche mais le problème est qu'a chaque fois les navigateurs te demande d'ouvrir ou d’enregistrer, impossible de le faire automatiquement, même après plusieurs posts sur les forums officiels pas eu de réponses réglant le problème !

 

Je suis donc arrivé sur ce site en cherchant d'autre solutions...

 

Alors le code donné par Leneuf22 marche nikel, sauf que je ne sais pas quelle ligne rajouter pour une autre macro, sachant que j'en ai 200 à faire...

 

Pour le coté graphique j'avais un peu peur mais en travaillant en html puis en sauvegardant avec dreamweaver en .hta çà passe nikel,

il ne reste plus qu'a pouvoir rajouter les 199 autres macros...

 

Voici le code actuel :

 

<html*************************************************************************************************************************************************************>
<head>
<script language="javascript">
<!--
  function lance() {
       var wScript = new ActiveXObject("Wscript.Shell");
       wScript.run("testmacro.mcr");
       return false;
  }
 
//-->
</script>
</head>
<body>
<hta:application border="yes" singleinstance="yes" windowstate="maximize" scroll="no" caption="no" innerborder="no"></hta:application>
<a href="" onClick="return lance();"><img src="240_F_41730951_EyMKKNC8LF8U0SlmiiJnxU9HCnraMXDR.jpg" width="63" height="64"></a>
</body>
</html*************************************************************************************************************************************************************>

 

Pouvez-vous me dire svp où doit-on mettre la seconde ligne ou code qui sera relatif aussi à une autre image ?

 

Merci


  • 0

PUBLICITÉ

    Annonces Google

#2 Dylav

Dylav

    Modérateur

  • Modérateur [Dylav]
  • 29 459 messages

Posté 04 juin 2017 - 11:50

Bonsoir vlx360, et bienvenue sur Zébulon ! icon_wink.gif

 

Je ne suis pas très fort en JavaScript, mais je te propose la démarche suivante,

  1. définir et renseigner un tableau de 200 postes, qui contiendront les noms des 200 macros (cf. myArray),
  2. fournir à la fonction lance un argument donnant le numéro de la macro à lancer (cf. Numero_Macro),
  3. utiliser ce n° de macro pour retrouver son nom dans le tableau et la lancer (cf. myMacro),
  4. mettre les 200 liens sur les 200 images (en HTML, on ne peut hélas pas programmer de boucle).

Je ne te garantis pas la syntaxe exacte des instructions ci-dessous, mais cela devrait se présenter ainsi.

<!DOCTYPE html>
<html>
<head>
<title>Lancement des macros</title>
<script type="text/JavaScript">
var myArray = ['appli_001.mcr', 'appli_002.mcr',
                ..... 
               'appli_199.mcr', 'appli_200.mcr'];
function lance(Numero_Macro) {
 var wScript = new ActiveXObject("Wscript.Shell");
 var myMacro = myArray(Numero_Macro);
 wScript.run(myMacro);
 return false;
}
</script>
</head>
<body>
.....
<a href="" onClick="return lance(1);"><img src="image_001.jpg"></a>
<a href="" onClick="return lance(2);"><img src="image_002.jpg"></a>
.....
<a href="" onClick="return lance(199);"><img src="image_199.jpg"></a>
<a href="" onClick="return lance(200);"><img src="image_200.jpg"></a>
.....
</body>
</html>

  • 0

#3 Jocko

Jocko

    Member

  • Membres
  • 82 messages

Posté 05 juin 2017 - 04:21

Hi vlx360

 

mettre les 200 liens sur les 200 images (en HTML, on ne peut hélas pas programmer de boucle).

Oui cela est possible en insérant une section javascript:

 

Remplacer l'ensemble des liens par ces lignes

<body>
<script language="javascript" type="text/javascript">
for (i=1;i<201;i++){
    document.write('<a href="#" ' + 'id="' + i + '" onclick="lance(this.id);"><img src="image_'+i+'.jpg"/></a>');
}
</script>
</body>

Bien sûr il faudrait aussi gérer la mise en page de tous ces liens...mais l'idée est là

 

Note: activeX n'est pas supporté par Firefox, donc le lanceur de macro en utilisant vbscript échouera avec ce navigateur


  • 0

#4 Dylav

Dylav

    Modérateur

  • Modérateur [Dylav]
  • 29 459 messages

Posté 05 juin 2017 - 07:41

Bonjour Jocko,

 

Il est vrai que la solution de la boucle JavaScript est plus concise. Mais il est également vrai qu'on ne peut pas programmer de boucle en HTML,. D'ailleurs, HTML n'est pas — à proprement parler — un langage de programmation, mais plutôt un langage de présentation.

 

Une autre solution consisterait à créer la page HTML à la volée en PHP, langage qui, lui, permet de programmer une boucle. Mais cela nécessite la mise en place de PHP sur le serveur (ou le PC) hébergeant le site.

<script language="javascript" type="text/javascript">

Nota : l'attribut language de la balise <script> est obsolète (deprecated) depuis HTML4.

Le standard est désormais l'attribut type.

 

Pour ActiveX, tu as raison de souligner que seul le navigateur Internet Explorer (et peut-être Edge ?) utilise ce dispositif, et que la page HTML ne fonctionnera pas sous les autres navigateurs.


  • 0

#5 vlx360

vlx360

    Member

  • Membres
  • 34 messages

Posté 05 juin 2017 - 10:11

Bonsoir, Dylav, Jocko,

 

 

Merci beaucoup, je vais étudier tout çà, car c'est tout nouveau, par contre j'ai lu en travers, je souhaite faire au plus simple et éviter d'installer un serveur !

 

Initialement, si je peux répéter à l'infini le code du début ce sera nikel !

 

Tout est sur un pc local sans connexion.

 

Bon je vais relire tout çà !

 

En tout cas si c'est bon vous m'enlevez une sacrée épine du pied !

 

Merci à nouveau


  • 0

#6 vlx360

vlx360

    Member

  • Membres
  • 34 messages

Posté 05 juin 2017 - 10:36

Par contre ce que je ne comprends pas dans le code, Je ne vois pas les liaisons comment je peux indiquer le numéro de macro à lancer

 

Je suis désolé je décroche, pour moi ce n'est pas logique  !

 

  1. fournir à la fonction lance un argument donnant le numéro de la macro à lancer (cf. Numero_Macro),
  2. utiliser ce n° de macro pour retrouver son nom dans le tableau et la lancer (cf. myMacro),

function lance(Numero_Macro) {
var wScript = new ActiveXObject("Wscript.Shell");
var myMacro = myArray(Numero_Macro);

 

Si je donne un nom à la macro autant la lancer par son nom plutôt que par un numéro que je dois "en plus" lui associer ?

 

Car comment défini-t-on dans myMacro que le numéro 1 vaut la macro appli_001.mcr

 

le code ce serait : var myMacro = myArray(1=appli_001.mcr);(2=appli_002.mcr)

 

Dans le lance le code serait :

 

function lance(Numero_Macro) là je ne sais même pas quoi rentrer lol !

 

C'est du chinois...

 

Pour moi ce serait çà :

<script type="text/JavaScript">
var myArray = ['testmacro.mcr', 'appli_002.mcr',
               'appli_199.mcr', 'appli_200.mcr'];
function lance(1) {
 var wScript = new ActiveXObject("Wscript.Shell");
 var myMacro = myArray(1);
 wScript.run(testmacro.mcr);
 return false;

 

Pour moi ce n'est pas clair du tout ! comme je ne connais pas les attributs du code, je ne sais pas qui fait quoi !

 

3 éme tentative et là je pensais avoir compris ! mais non c'est pas encore çà !

 

var myArray = ['testmacro.mcr', 'appli_002.mcr',
               'appli_199.mcr', 'appli_200.mcr'];
function lance(1) {
 var wScript = new ActiveXObject("Wscript.Shell");
 var myMacro = myArray(testmacro.mcr);
 wScript.run(myMacro);
 return false;


Modifié par vlx360, 05 juin 2017 - 11:11 .

  • 0

#7 Dylav

Dylav

    Modérateur

  • Modérateur [Dylav]
  • 29 459 messages

Posté 05 juin 2017 - 11:34

Bonsoir,

Tu lances la fonction lance pour la 1ère macro sur la ligne ci-dessous. Pour cela, tu lui fournis l'argument 1.
 

<a href="" onClick="return lance(1);"><img src="image_001.jpg"></a>


Dans le code JavaScript, la fonction récupère l'argument dans la variable Numero_Macro, qui va être l'indice de recherche du nom de la macro dans la table des noms de macros myArray. Puisque l'indice vaut 1, il désignera le 1er poste de cette table, 'appli_001.mcr', qui sera déversé dans la variable myMacro, et c'est donc la macro appli_001.mcr qui sera lancée par la ligne suivante.

var myMacro = myArray(Numero_Macro);
wScript.run(myMacro);

Pour faire fonctionner tout ça, il ne te reste plus que deux choses à faire

  • renseigner la table myArray des noms des macros,
    var myArray = ['appli_001.mcr', 'appli_002.mcr',
                    ..... 
                   'appli_199.mcr', 'appli_200.mcr'];
    
  • écrire tes 200 lignes d'appel (ou utiliser l'astuce de Jocko).
    <a href="" onClick="return lance(1);"><img src="image_001.jpg"></a>
    <a href="" onClick="return lance(2);"><img src="image_002.jpg"></a>
    .....
    <a href="" onClick="return lance(199);"><img src="image_199.jpg"></a>
    <a href="" onClick="return lance(200);"><img src="image_200.jpg"></a>
    

  • 0

#8 vlx360

vlx360

    Member

  • Membres
  • 34 messages

Posté 06 juin 2017 - 12:13

Dylav, j'ai donc repris ton code tel que (si je n'ai qu'a rajouter le nom des macros var myArray=) et renommé mes macros par le nom des tiennes, en *hta la page s'ouvre, mais une fois que je clique sur le premier lien de test, il y a erreur, çà ne fonctionne pas.

 

J'ai essayé avec ou sans extensions *mcr c'est pareil.

 

Là par contre si j'ai juste à copier/coller ton code, normalement çà devrait marcher !

 

Je précise que j'enregistre en *hta, pas html, car je me retrouverais avec le même problème d'ouverture ou je devrais choisir d’ouvrir, enregistrer ou que sais-je !

 

Problème que je ne rencontre pas avec le tout premier code de Leneuf22


Modifié par vlx360, 06 juin 2017 - 12:24 .

  • 0

#9 Jocko

Jocko

    Member

  • Membres
  • 82 messages

Posté 06 juin 2017 - 10:00

Bonjour,

 

Il y a une petite erreur dans la fonction lance().

 

Il faut remplacer la ligne

var myMacro = myArray(Numero_Macro);

par

var myMacro = myArray[Numero_Macro];

Note: l'utilisation return dans la déclaration de l'event onclick est inutile. D'ailleurs pour être certain d'arrêter la propagation de l'événement après exécution de la fonction lance, il est préférable d'écrire :

onClick="lance(1);return false;"

@Dylav

 

Nota : l'attribut language de la balise <script> est obsolète (deprecated) depuis HTML4.

Parfois les vieilles habitudes ont la vie dure...


  • 0

#10 vlx360

vlx360

    Member

  • Membres
  • 34 messages

Posté 06 juin 2017 - 12:11

Hello, je rentre en fin de journée, je retesterais à nouveau, merci encore pour (ton), votre aide !


  • 0