Toutes mes réponses sur les forums
- 
		AuteurRéponses
- 
		
			
				
 bebarthMaître des clés bebarthMaître des clésbonjour, 
 Voilà, je redonne l’ensemble des scripts qui ont, pour certains, un peu évolués :
 // Scripts de document
 //
 var nbDepart=0;
 for (var i=0; i<this.numFields; i++) {
 if (/^Départ\.\d+/.test(this.getNthFieldName(i))) nbDepart++;
 }
 var fichier=this.getDataObjectContents("Départ.csv");
 var donnees=util.stringFromStream(fichier);
 var lignes=donnees.split("\r\n");
 var colonnes=new Array();
 for (var ii=0 ; iivar colonne0=[];`
 for (var j=0 ; jif (colonnes[j][0]) colonne0.push([colonnes[j][0]]);`
 }
 for (var i=1; i<=colonne0.length; i++) {
 eval("var colonne"+(i+1)+"=[];");
 for (var j=0 ; jif (colonnes[j][i+1]) eval(« colonne »+(i+1)).push(colonnes[j][i+1]);`
 }
 }
 colonne0[0].push(0);
 for (var ii=1; ii<colonne0.length; ii++) {
 colonne0[ii].push(eval("colonne"+(i+1)))
 }
 // Fichier "Départ Arrivée.csv"
 var fichierDA=this.getDataObjectContents("Départ Arrivée.csv");
 var donneesDA=util.stringFromStream(fichierDA);
 var lignesDA=donneesDA.split("\r\n");
 var colonnesDA=new Array();
 for (var i=0 ; ifor (var i=1; i<=colonnesDA[0].length; i++) {`
 eval("var colonne"+(i+1)+"DA=[\"- Sélectionnez -\"];");
 for (var j=1 ; jif (colonnesDA[j][i+1]) eval(« colonne »+(i+1)+ »DA »).push(colonnesDA[j][i+1]);`
 }
 }
 //
 var leCanal=this.getField("Canal").value;
 this.getField("Canal").clearItems();
 this.getField("Canal").setItems(colonne0);
 this.getField("Canal").value=leCanal;
 //
 function menuCanal(laValeur) {
 try {
 for (var i=0; i<nbDepart; i++) {
 this.getField("Départ."+i).clearItems();
 this.getField("Arrivée."+i).clearItems();
 }
 if (laValeur!=0) {
 var leMenu=laValeur.split(",");
 var ind=leMenu[0].substr("Canal ".length);
 leMenu[0]=["- Sélectionnez -",0];
 for (var ii=1; ii<leMenu.length; ii++) {
 leMenu[ii]=[leMenu[ii],eval("colonne"+(i+1)+"DA")];
 }
 for (var i=0; i<nbDepart; i++) {
 this.getField("Départ."+i).clearItems();
 this.getField("Départ."+i).setItems(leMenu);
 }
 }
 } catch(e) {}
 }
 //
 function menuDepart(ind,laValeur) {
 this.getField("Arrivée."+ind).clearItems();
 this.getField("Arrivée."+ind).setItems(laValeur.split(","));
 }
 function menuArrivee(leChamp) {
 try {
 var ind=leChamp.name.substring(leChamp.name.indexOf(".")+1);
 var laTable=this.getField("Départ."+ind).value.split(",");
 for (var i=0; i<nbDepart; i++) {
 if (i==ind) continue;
 for (j=0; j<leChamp.numItems; j++) {
 if (this.getField("Départ."+i).getItemAt(this.getField("Départ."+i).currentValueIndices,false)==this.getField("Départ."+ind).getItemAt(this.getField("Départ."+ind).currentValueIndices,false) && this.getField("Arrivée."+i).value==laTable[j]) laTable.splice(j,1);
 }
 }
 var lArrivee=leChamp.value;
 leChamp.clearItems();
 leChamp.setItems(laTable);
 leChamp.value=lArrivee;
 } catch(e) {}
 }
 //
 function cAc(arrivee) {
 if (this.getField("Canal").value && this.getField("Départ.0").value && arrivee!="- Sélectionnez -") {
 this.getField("Check Box1").display=display.noPrint;
 } else {
 this.getField("Check Box1").display=display.hidden;
 var modeles=this.templates;
 if (this.getField("Check Box1").value!="Off") {
 for (ii=0; ii<modeles.length; ii++) {
 if (modeles[ii].name=="page2") {
 this.deletePages(1);
 break;
 }
 }
 }
 this.getField("Check Box1").value="Off";
 this.pageNum=0;
 }
 }// Script de touches personnalisé Menu "Canal"
 if (!event.willCommit) {
 menuCanal(event.changeEx);
 cAc(this.getField("Arrivée.0").value);
 }
 // Script de touches personnalisé des Menus "Départ" sauf "Départ.0"
 if (!event.willCommit) {
 if (event.changeEx!=0) {
 menuDepart(event.target.name.substring(event.target.name.indexOf(".")+1),event.changeEx);
 cAc(this.getField("Arrivée.0").value);
 } else {
 this.getField("Arrivée."+event.target.name.substring(event.target.name.indexOf(".")+1)).clearItems();
 }
 }
 // Script de touches personnalisé Menu "Départ.0"
 if (!event.willCommit) {
 if (event.changeEx!=0) {
 menuDepart(event.target.name.substring(event.target.name.indexOf(".")+1),event.changeEx);
 cAc(this.getField("Arrivée.0").value);
 } else {
 this.getField("Arrivée."+event.target.name.substring(event.target.name.indexOf(".")+1)).clearItems();
 this.getField("Check Box1").display=display.hidden;
 var modeles=this.templates;
 if (this.getField("Check Box1").value!="Off") {
 for (ii=0; ii<modeles.length; ii++) {
 if (modeles[ii].name=="page2") {
 this.deletePages(1);
 break;
 }
 }
 }
 this.getField("Check Box1").value="Off";
 this.pageNum=0;
 }
 }// Ajout Script de touches personnalisé de TOUS les Menus "Départ" sauf "Départ.0"
 for (var i=1; i<30; i++) {
 this.getField("Départ."+i).setAction("Keystroke","if (!event.willCommit) {\r\tif (event.changeEx!=0) {\r\t\tmenuDepart(event.target.name.substring(event.target.name.indexOf(\".\")+1),event.changeEx);\r\t\tcAc(this.getField(\"Arrivée.0\").value);\r\t} else {\r\t\tthis.getField(\"Arrivée.\"+event.target.name.substring(event.target.name.indexOf(\".\")+1)).clearItems();\r\t}\r}");
 }// Script de touches personnalisé Menu "Arrivée.0"
 if (!event.willCommit) {
 if (event.changeEx!="- Sélectionnez -") cAc(event.changeEx);
 }// Souris entrée de tous les Menus "Arrivée"
 menuArrivee(event.target);// Ajout Script Souris entrée de TOUS les Menus "Arrivée"
 for (var i=0; i<30; i++) {
 this.getField("Arrivée."+i).setAction("MouseEnter","menuArrivee(event.target);");
 }// Script d'ouverture de page
 if (app.viewerType!="Exchange-Pro") this.viewState={overViewMode:2};
 this.viewState={overViewMode:5}// Script Affichage Page 2
 if (event.target.value!="Off") {
 var modeles=this.templates;
 for (ii=0; ii<modeles.length; ii++) {
 if (modeles[ii].name=="page2") {
 modeles[ii].spawn(1, false, false);
 break;
 }
 }
 this.pageNum=0;
 } else {
 this.deletePages(1);
 }// Ajouter page 4
 var modeles=this.templates;
 for (ii=0; ii<modeles.length; ii++) {
 if (modeles[ii].name=="page4") {
 modeles[ii].spawn(this.numPages-1, false, false);
 break;
 }
 }PS : Les [ii] dans les scripts ci-dessus sont en fait de simples « i » entre crochets dans le document joint. Il est donc préférable de se reporter aux scripts contenus dans le fichier ci-joint. @+ 
 😎- 
		Cette réponse a été modifiée le il y a 1 année et 4 mois par  bebarth. bebarth.
 Attachments:You must be logged in to view attached files. bebarthMaître des clés bebarthMaître des clésbonsoir, 
 Pas de souci pour te le partager, mais sais-tu si tu peux ajouter un script d’application avec PDF-XChange ? Je n’ai pas l’impression…@+ 
 😎 bebarthMaître des clés bebarthMaître des clésbonsoir, 
 Je regarde ça demain… il faut utiliser la méthode spawn qui permet de dupliquer et supprimer des pages modèles avec Acrobat Reader.D’autre question, serait-il possible de dupliquer la page4 au besoin, et les pages dupliquer sera toujours avant la dernière page qui est p05? en respect toujours l’ordre des pages Pas de problème pour ça, mais peut-on dupliquer cette page plusieurs fois ou juste une fois ? @+ 
 😎 bebarthMaître des clés bebarthMaître des clésIl ne faut pas faire de retours lignes mais l’équivalent JavaScript « \r” et il faut échapper les guillemets pour qu’ils soient interprétés correctement. Cela donne : 
 this.addScript("init", "if (app.viewerVariation==\"Full\" || (app.viewerVariation!=\"Full\" && app.viewerVersion>=11)) {\rthis.getField(\"cache\").display=display.hidden;\rthis.dirty=false;\r}");@+ 
 😎 bebarthMaître des clés bebarthMaître des clésJe ne me souviens pas où on les trouvait sous Acrobat Pro 9, mais voici ce que j’ai trouvé : 
 https://answers.acrobatusers.com/Where-Page-Templates-Windows-Adobe-Acrobat-9-Pro-q21342.aspx
 Menu « Avancé », sélectionnez « Pages modèles »… ensuite tu devrais les trouver.@+ 
 😎 bebarthMaître des clés bebarthMaître des clésbonjour, 
 A vérifier que le script de document « init » est bien intégré à ton fichier et que la page modèle se nome bien « page2 », sinon il faut adapter le script.@+ 
 😎Attachments:You must be logged in to view attached files. bebarthMaître des clés bebarthMaître des clésbonjour, 
 Peux-tu coller dans une réponse ta ligne exacte ou faire une copie d’écran ?@+ 
 😎 bebarthMaître des clés bebarthMaître des clésbonjour, 
 Tu sais quoi ? Il y a 2 mois j’ai écris un utilitaire suite à une demande que j’avais eu.
 Je donne ici une version minifiée (car c’est un peu de boulot) d’un script qui peut être utilisé depuis l’assistant d’actions ou la console :var b2="ffea3337fff70000fff70000fff50f1aff3ca39eff00b0aaff00aea6ff00b4acff00b2aaff00aea6ff00aea6ff00b2abff93c1ccff92c7d7ff92c7d7ff9ccad7ff22b4abff00aea6ff00aea6ff00b4acff00afa8ff00aea6ff00aea6ff00b3abff00afa8ff00aea6ff00aea6ff00bab4ffea3337fff70000fff70000fff50f1aff23aba3ff00aea6ff00aea6ff00b3abff00afa8ff00aea6ff00aea6ff00b3abff00afa8ff00aea6ff00aea6ff00b5afff93c1ccff92c7d7ff92c7d7ff9ccad7ff00afa8ff00aea6ff00aea6ff00b5afff00aca7ff00aea6ff00aea6ff00b2aaffea3337fff70000fff70000ffea3337fff70000ffff0000ffff0000ffff0000ff009c96ff00aca0ff00aaa1ff00b2a8ff00aca3ff00aaa0ff00aaa0ff00b0a6ff84c4d3ff8ccfe6ff8ccfe6ff9bd3e7ff00aea6ff00aa9eff00aaa0ff00b2aaff00aca3ff00aaa0ff00aaa0ff00b2aaff00aba2ff00aaa0ff00aba1ff00b5adffec0000ffff0000ffff0000ffff0000ff00a59cff00ada3ff00aaa0ff00b2aaff00aba2ff00aaa0ff00aaa0ff00b3abff00aba2ff00aaa0ff00aaa0ff00b3abff89c5d5ff8ccfe6ff8ccfe6ff94d0e2ff00aba2ff00aaa0ff00aaa0ff00b3abff00aaa1ff00aba0ff00ada3ff00b1a8fff90000ffff0000ffff0000ffff0000ffec0000ffff0000ffff0000ffff0000ff009c96ff00ada3ff00aba1ff00b2aaff00ada6ff00aba0ff00aba1ff00b2a8ff84c4d3ff8ccfe6ff8ccfe6ff9bd3e7ff00b0aaff00aaa0ff00aba0ff00b5adff00aca3ff00aba1ff00aba1ff00b3abff00aca3ff00aba1ff00ada3ff00b5adffec0000ffff0000ffff0000ffff0000ff00a59cff00ada3ff00aba1ff00b3abff00aba2ff00aba1ff00aba1ff00b3abff00aba2ff00aba1ff00aba0ff00b3aaff89c5d5ff8ccfe6ff8ccfe6ff97d1e4ff00aca3ff00aba1ff00aba1ff00b3aaff00aba2ff00aca0ff00ada3ff00b1a8fff90000ffff0000ffff0000ffff0000fff50f1affff0000ffff0000ffff0000ff2ba19cff00b3acff00b2abff00b9b2ff00b2abff00b2aaff00b2aaff00b7afff92c7d7ff9bd3e7ff9bd3e7ffa6d6e7ff00b5afff00b2aaff00b2aaff00b9b3ff00b2abff00b2aaff00b2aaff00b8aeff00b2abff00b2aaff00b2aaff00b9b3fff50f1affff0000ffff0000ffff0000ff00aca7ff00b5adff00b2aaff00b9b3ff00aea6ff00b0a6ff00b2a8ff00b7afff00b1aaff00b2aaff00b2aaff00b9b3ff9ccad7ff9bd3e7ff9bd3e7ffa6d6e7ff00b1aaff00b2aaff00b2aaff00bbb4ff00b0aaff00b2abff00b2abff00b9b3fff70000ffff0000ffff0000ffff000fff3ca39eff009c96ff009c96ff2ba19cffb8ae91ffd5ad8fffd5ad8fffd1b49cff31aca5ff00ada5ff00ada5ff00b2abff22b4abff00b1aaff00b1aaff00b7b2ff00afa8ff00ada5ff00ada5ff00b4acff00afc5ff00aed3ff00aed3ff00b5d4ff00aca7ff00ada5ff00ada5ff00b4acff3ca39eff009c96ff009c96ff3ca39eff00aca7ff00ada5ff00ada5ff00b4acffdce6c1ffdce6c1ffd6dfbaffe6ecc5ff00afa8ff00ada5ff00ada5ff00b3abff00afa8ff00b2abff00b1aaff00b7b2ff00aca7ff00ada5ff00ada5ff00b3abffcbad93ffd5ad8fffd5ad8fffd1b49cff2ba19cff009c96ff009c96ff31aca5ff00b1a8ff00ada3ff00ada3ff00b2abffcbad93ffffac7effffac7effffb38aff00ada4ff00a9a0ff00aaa0ff00b2aaff00aca3ff00aaa0ff00aaa0ff00b0a6ff00aca3ff00aaa0ff00aaa0ff00b2aaff00aed6ff00ade7ff00ade7ff00b5e7ff00aca3ff00aaa0ff00aaa0ff00b3abff00ada5ff00ada3ff00ada3ff00b5adff00aba2ff00aaa0ff00aaa0ff00b2aafffeffceffb0a889ff83815bfffeffceff00aba2ff00aa9eff00aaa0ff00b3abff00aaa1ff00aaa0ff00aaa0ff00b2aaff00aba2ff00aba0ff00aaa0ff00b3aaffecaa88ffffac7effffac7efff7b591ff00aaa6ff00ada3ff00ada3ff00b8afff00aea6ff00aaa0ff00aba1ff00b2abffcbad93ffffac7effffad80ffffb58dff00ada4ff00aaa1ff00aba1ff00b2aaff00aca3ff00aba1ff00aba1ff00b2aaff00aca3ff00aba1ff00aba0ff00b2aaff00aed3ff00ade7ff00ade7ff00b5e7ff00ada7ff00aba0ff00aba1ff00b3abff00aca3ff00aba1ff00aba1ff00b3abff00aba2ff00aba1ff00aba1ff00b3abfff3f0c7ff7c7863ff615d48ffe6ddb4ff00b19fff00aba1ff00aba1ff00b3abff00aba2ff00aba1ff00aba1ff00b4acff00aba2ff00aca0ff00aba1ff00b3aaffe9ac8bffffad80ffffad80fff7b591ff00aaa1ff00ada3ff00aba0ff00b7afff00b4acff00b2aaff00b2aaff00b9b2ffe0b297ffffb38affffb58dffffb995ff00b2aaff00b2a8ff00b2abff00b9b2ff00b4acff00b2aaff00b2aaff00b9b3ff00b2abff00b2aaff00b2aaff00b8aeff00b5d8ff00b5e7ff00b5e7ff00bce5ff00b1aaff00b2a8ff00b2a8ff00b8aeff00b2abff00b2aaff00b2aaff00b9b3ff00b1aaff00b2a8ff00b2a8ff00b8aeffe6ecc5ffd9d0aaffe6ddb4ffd9d0aaff00b4acff00b2aaff00b2aaff00b9b3ff00b1aaff00b2aaff00b2aaff00b9b3ff00b0aaff00b2a8ff00b2abff00b9b3ffeeb192ffffb38affffb38afff2bb9bff00b1aaff00b2aaff00b2aaff00bbb4ff00b2aaff00ada5ff00ada5ff00b2abff31aca5ff00ada4ff00ada4ff00b2aaffb8ae91ffd5ad8fffd5ad8fffd1b49cff31aca5ff00ada5ff00ada5ff00b2abff00aca7ff00ada5ff00ada5ff00b2abff00aca7ff00aea9ff00aea9ff00b2abff87bdc8ff84c4d3ff84c4d3ff92c7d7ff00afa8ff00ada5ff00ada5ff00b4acff87bdc8ff84c4d3ff84c4d3ff92c7d7fffbf4c7ffe9e9b4ffd9d0aafffcf1c1ff00afa8ff00ada5ff00ada5ff00b4acff00aca7ff00ada5ff00ada5ff00b4acffcbad93ffd5ad8fffd5ad8fffd1b49cff31aca5ff00ada4ff00ada4ff22b4abff00ada4ff00ada5ff00ada5ff00bab2ff00ada5ff00aaa0ff00aba0ff00b2a8ff00aca3ff00a9a3ff00aaa1ff00b2abffd5ad8fffffac7effffac7effffb38aff00aca2ff00aba0ff00aba0ff00b2aaff00aca3ff00aba0ff00aba0ff00b2aaff00aca3ff00aaa1ff00aaa1ff00b2aaff89c5d5ff8ccfe6ff8ccfe6ff9bd3e7ff00ada6ff00aa9eff00aba0ff00b2aaff89c5d5ff8ccfe6ff8ccfe6ff97d1e4ffdce6c1ff8a866effb0a889ffe9e9b4ff00aca3ff00aba0ff00aba0ff00b3abff00aba2ff00aba0ff00aba0ff00b4acffe9ac8bffffac7effffac7efffbb38fff00aaa2ff00aba1ff00aaa1ff00b3abff00aaa2ff00aca0ff00aba0ff00b8afff00ada5ff00aaa0ff00aba1ff00b2aaff00ada6ff00aaa0ff00aba1ff00b2abffd5ad8fffffac7effffad80ffffb58dff00aca2ff00aba1ff00aba1ff00b2aaff00aca3ff00aba1ff00aba1ff00b2aaff00aca3ff00aba1ff00aba1ff00b2aaff89c5d5ff8ccfe6ff8ccfe6ff9bd3e7ff00ada5ff00aba1ff00a9a3ff00b2abff89c5d5ff9ed3e2ffaedbd6ffdce6c1ffe6ddb4ff8a866effc3be9affe9e9b4ff00aca3ff00aba1ff00aba1ff00b3abff00aba2ff00aba1ff00aba1ff00b4acffe9ac8bffffad80ffffad80fff7b591ff00aba2ff00ada3ff00aba1ff00b4acff00aaa2ff00ada3ff00aba0ff00b8afff00b2abff00b2aaff00b2aaff00b7afff00b4acff00b2aaff00b3abff00b9b2ffe0b297ffffb38affffb58dffffb995ff00b2aaff00b0a6ff00b2aaff00b7afff00b1aaff00b2a8ff00b2aaff00b7afff00b1aaff00b2aaff00b2aaff00b7afff92c7d7ff94d0e2ff94d0e2ff9bd3e7ff00b2abff00b2a2ff00c3a7ff80d7adffe9e9b4fffbf5aefffff7acfffffaabfffef8afffc3be9affbfb696ffe6ddb4ff00aca2ff00b2a8ff00b2aaff00b8aeff00b0aaff00b5adff00b5adff00b7aeffe0b297ffffb58dffffb58dfff2bb9bff00b1aaff00b3abff00b3abff00bbb4ff00b0aaff00b2aaff00b2aaff00bbb4ff93c1ccff84c4d3ff84c4d3ff92c7d7ff22b4abff00ada5ff00ada5ff00b2abff23aba3ff00ada4ff00ada4ff00b3abffdce6c1ffe6ecc5ffd6dfbaffe6ecc5ffe6ecc5ffdce6c1ffd6dfbaffe6ecc5ffdce6c1ffd6dfbaffd6dfbaffdce6c1fff3f0c7fff3f0c7fff3f0c7fff4edc0ffe9e9b4ffedf2adfffff9aefffefcaefffffaabfffff7aefffff6adfffff6adfffff7aefffeffb3fff4edc0fff4edc0ffe6ecc5ffdce6c1ffdce6c1ffe6ecc5ffe6ecc5ffc9d3b0ffc9d3b0ffe6ecc5fff4edc0ffd9d0aaffd9d0aaffe9e9b4ff00aca7ff00ada5ff00ada5ff00b5afff87bdc8ff84c4d3ff84c4d3ff9ccad7ff92c7d7ff8ccfe6ff8ccfe6ff9bd3e7ff00b1aaff00a89fff00aba0ff00b2aaff00aca3ff00aba1ff00aba1ff00b2abffe6ecc5fffeffceff959075fffcf1c1fffeffceffb8ae91ff726e51fffeffcefffcf1c1ffa69d7fffb8ae91ffece4a1fffefcb4fffff7aefffff7aefffff7acfffff9aefffff9aefffff7aefffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffffab0ffd6d294ffe9e9b4fffeffceffc3be9affbfb696fffeffcefffcf1c1ff7c7863ff726e51ffe6ddb4fffafccaff959075ff959075fff3f0c7ff00aba2ff00aba0ff00aba0ff00b4acff92c7d7ff8ccfe6ff8ccfe6ff9bd3e7ff92c7d7ff8ccfe6ff8ccfe6ff9bd3e7ff00b1aaff00aaa0ff00aba1ff00b2aaff00ada6ff00aba0ff00aba0ff00b0a6ffe6ecc5ffb8ae91ff7c7863fff3f0c7fffbf4c7ff7c7863ff726e51ffe9e9b4fffefcb4fff3eba3fffef5acfffff8aefffff6acfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffffab0fff9f2b3fffeffceffbfb696ffb8ae91fffeffcefff4edc0ff7b7757ffb8ae91fffcf1c1fffeffceffbfb696ffbfb696fffafccaff00aaa1ff00aba1ff00aba0ff00b4acff92c7d7ff8ccfe6ff8ccfe6ff9bd3e7ff9ccad7ff9bd3e7ff9bd3e7ffa6d6e7ff00b7b2ff00b2aaff00b3abff00b9b3ff00b4acff00b2aaff00b2aaff00b3abffe6ecc5ffc8ca9bffc8ca9bffe9e9b4fff9f2b3ffe4dd9cfffcf5acfffff7aefffff7aefffff9aefffff7aefffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff7aefffff6acfffbf4c7ffe6ddb4ffe6ddb4ffe6ecc5fffcf1c1ffd9d0aafffeffceffe6ddb4fffbf4c7ffe6ddb4ffe9e9b4ffe9e9b4ff00b1aaff00b3abff00b2aaff00bbb4ff9ccad7ff9bd3e7ff9bd3e7ffa6d6e7ff22b4abff00b0aaff00b0aaff00b5afff00afa8ff00aca3ff00aca3ff00b0aaff00aaa3ff00aba2ff00b3abff58c5a6ffc4deb1fffef8affffefcb4fffef5acfffff7acfffefdb1fffff8aefffff8aefffff8aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff7acfffff7a9fff2bb9bffeeb192ffe0b297ff22b4abff00b4a6ff00b0a4ff00b2aaff23aba3ff00b4a6ff00b2abff22b4abff00aaa3ff00ada6ff00aca3ff00b4acff00afa8ff00b0aaff00b0aaff00b7b2ff00ada5ff00aa9eff00aaa0ff00b2a8ff00aba2ff00a7a1ff00b0a6ff00c3aaff80d7adffabe3a9ffedf2adfffffaabfffff9aefffff8aefffff7aefffff7aefffff8aefffefdb1fffdffb9fffdffb5fffefdb1fffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff9aefff8f0a8ffffac7efffbb38fff00aba2ff00a9a0ff00aaa1ff00b3abff00aaa2ff00aba1ff00aaa0ff00b3abff00aaa1ff00aca0ff00aba1ff00b4acff00aaa2ff00aba0ff00aa9eff00b4acff00ada5ff00aaa0ff00aaa0ff00b2abff40bfaeffabe3a9ffedf2adfffff9aefffefcaefffefcaefffff9aefffff7aefffff7aefffff7aefffff7aefffffab0fffffab0ffddd99affaca776ff696649ffa4a071fffdffb9fffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6acfffefcaefffce1a2fff7b591ff00aba2ff00aba1ff00aba1ff00b4acff00aba2ff00aca0ff00aba1ff00b3aaff00aba2ff00aca0ff00aba1ff00b4acff00aaa1ff00ada3ff00aba0ff00b7afff00b4acff00b3abff00b3abff00b7afffedf2adfffef8affffef8affffef7aefffff7acfffff7aefffff7aefffff7aefffff7aefffff7aefffefdb1ffe4dd9cff4d4c36ff2b2b1eff181712ff14130fff2b2b1effece4a1fffeffb3fffff7aefffff7aefffff7aefffff8affffeffb3fffdffb9fffdffb9fffdffb5fffdffb9fffdffb5fffefdb1fffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff9aefffce1a2ff00b0aaff00b3abff00b3abff00bbb4ff00b1aaff00b3abff00b3abff00bbb4ff00b1aaff00b3abff00b3abff00bbb4ff00b1aaff00b3abff00b3abff00beb7ff00afa8ff00aca3ff00aca3ff00aea9ffcce3b0fffff7a9fffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffffab0fff7f8b0ff4d4c36ff161510ff242419ff242419ff161510ff7b7757fffdffb9fffff8aefffff7aefffeffb3fffdffb5ffe4dd9cffaca776ff8a8560ff7b7757ff8a8560ffb4af7bffe4dd9cfffdffb5fffefdb1fffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffffab0ff72c5adff00aba2ff00aca3ff00b2abff00ada4ff00aca3ff00aca3ff00b4acff00accbff00aed3ff00aed3ff00b5d4ff00aaa3ff00ada6ff00aba2ff00bab2ff00ada5ff00aaa0ff00aba1ff00b2abff72c5adfffef5acfffef6acfffff8aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffdffb5ffcac48aff1e1d15ff242419ff242419ff212017ff212017ffd0ca8dfffdffb5fffdffb5ffddd99aff696649ff29291cff181712ff161510ff181712ff161510ff181712ff2b2b1eff726e51ffddd99afffdffb5fffff7aefffff6adfffff6adfffff6adfffff6adfffff6adfffff8aeffedf2adff00bda5ff00a7a1ff00b3abff00aba2ff00aca0ff00aba0ff00b4acff00abd8ff00afe9ff00ade7ff00b5e7ff00aaa1ff00aca0ff00aba0ff00b8afff00ada5ff00aaa0ff00aba1ff00b2abff00afc5ffece4a1fffff6acfffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff8affffeffb3ff696649ff181712ff242419ff25241aff181712ff5c593ffffdffb9ffddd99aff313022ff14130fff212017ff242419ff212017ff212017ff242419ff242419ff212017ff161510ff29291cffa4a071fffdffb5fffff9aefffff6adfffff6adfffff6adfffff6adfffef6acfffefcaeffe9e9b4ff00b2a2ff00b2aaff00aba2ff00aca0ff00aba0ff00b3aaff00abd8ff00ade7ff00ade7ff00b5e7ff00aaa1ff00aca0ff00aba0ff00b7afff00b3abff00b3abff00b3abff00b8aeff00b5d8ffb6d6adfffff7acfffff6adfffff8aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffdffb5ffd4cc8dff201f17ff212017ff242419ff242419ff1b1b13ffb4af7bff696649ff181712ff242419ff181712ff1e1d15ff2b2b1eff2b2b1eff1b1b13ff1b1b13ff242419ff242419ff1f1e16ff161510ff8a8560fffdffb5fffff8aefffff6adfffff6adfffff6adfffff6adfffef6adfffefcaeffabe3a9ff00b7aeff00b1aaff00b2aaff00b2aaff00bbb4ff00b5d8ff00b5e7ff00b5e7ff00bce5ff00b1aaff00b4acff00b3abff00beb7ff00afa8ff00aca3ff00aca3ff00b1aaff00aca2ff74c19bfffdf2a9fffef5acfffff8aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff8affffdffb5ff726e51ff181712ff242419ff242419ff212017ff313022ff2b2b1eff212017ff1e1d15ff696649ffc4c187ffe4dd9cffddd99affb4af7bff4d4c36ff181712ff242419ff242419ff212017ff161510ff999468fffdffb9fffff6adfffff6adfffff6adfffff6adfffff6adfffef6adfffff9aeffc4deb1ff87bdc8ff89c5d5ff89c5d5ff92c7d7ff00ada4ff00ada6ff00ada6ff00b4acff00aaa3ff00aca3ff00aca3ff00bab2ff00ada5ff00aaa0ff00aba1ff00b2a8ff00aba2ff00b19fffece4a1fffff6acfffff7aefffff8aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffeffb3ffddd696ff25241aff212017ff242419ff242419ff212017ff212017ff1b1b13ff8a8560fffdffb9fffdffb9fffeffb3fffeffb3fffdffb9fff7f8b0ff696649ff181712ff242419ff242419ff201f17ff1e1d15ffc4c187fffdffb5fffff6adfffff6adfffff6adfffef6adfffef6adfffff7acfffff7a9ffb8d9caff8ccfe6ff8ccfe6ff97d1e4ff00aba2ff00aba1ff00aba0ff00b4acff00aaa2ff00ada3ff00aba0ff00b8afff00ada5ff00aba1ff00ada3ff00b2a8ff00ada7ff00aaa0ffa5c894fffef5acfffef5acfffff8aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff8aefffdffb9ff7b7757ff161510ff242419ff242419ff242419ff212017ff313022ffece4a1fffeffb3fffff7aefffff7aefffff7aefffff7aefffeffb3fffefcb4ff5c593fff181712ff242419ff242419ff1b1b13ff42412efff8f0a8fffffab0fffff6adfffff7aefffefdb1fffdffb5fffeffb3fffff8aefffff7a9ff9ed3e2ff8ccfe6ff97d1e4ff00aba2ff00aba1ff00aba1ff00b4acff00aaa2ff00ada3ff00aca0ff00b8afff00b4acff00b3abff00b5adff00b9b3ff00b4acff00b3abff4eba9cfff8f0a8fffef5acfffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffeffb3ffe4dd9cff2b2b1eff212017ff242419ff242419ff201f17ff383626fff3eba3fffefdb1fffff7aefffff7aefffff7aefffff7aefffff7aefffeffb3ffece4a1ff313022ff201f17ff242419ff242419ff161510ff9f9a6cfffdffb9fffff7aefffeffb3ffd6ce90ff9f9a6cffbdb882fffff7aefffefcaeffedf2adff9ed3e2ff97d1e4ff00b2abff00b3abff00b3abff00bbb4ff00b7aeff00b5adff00b3abff00beb7ffea3337ffec0000ffec0000fff50f1aff3ca39eff00ada7ff00aca2ffd6d294fffff7acfffef6acfffff8aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffdffb9ff83815bff161510ff242419ff242419ff242419ff1e1d15ffcac48afffdffb5fffff7aefffff7aefffff7aefffff7aefffff7aefffef7aefffdffb9ff999468ff181712ff242419ff242419ff181712ff4d4c36fffcf5acfffeffb3ff938f64ff42412eff83815bff5c593fff615d48fff3eba3fffefcaeffcce3b0ff00b5afff00aaa3ff00aca3ff00ada6ff00ada4ffea3337ffec0000ffec0000ffea3337fff70000ffff0000ffff0000ffff0000ff009c96ff00ada3ff00a9a3ff74c19bfffdf2a9fffff6acfffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffeffb3ffece4a1ff313022ff201f17ff242419ff242419ff181712ff696649fffdffb9fffff8affffff7aefffff7aefffff7aefffff7aefffff7aefffeffb3ffe4dd9cff2b2b1eff212017ff242419ff212017ff212017ffd6ce90fffeffb3ff383626ffb4af7bfffdffb9fffdffb9ff5c593fff83815bfffdffb5fffff7a9ffa1ddb1ff00a6a1ff00aca0ff00ada3ff00b1a8fff90000ffff0000ffff0000ffff0000fff70000ffff0000ffff0000ffff0000ff009c96ff00ada3ff00aba1ff00b19fffe4dd9cfffff7aefffff6adfffff8aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffdffb9ff938f64ff161510ff242419ff242419ff242419ff212017ffcac48afffdffb9fffff7aefffff7aefffff7aefffff7aefffff7aefffffab0fffdf4abff42412eff1e1d15ff242419ff242419ff181712ffb4af7bfffdffb9ff7b7757ff938f64fffdffb5fffdffb9ff7b7757ff696649fffdffb5fffef5acfffffaabff58c5a6ff00a9a3ff00ada3ff00ada7fff90000ffff0000ffff0000ffff0000ffea3337ffff0000ffff0000ffff0000ff31aca5ff00b4acff00b4acff00b7afffc8ca9bfffff7a9fffef5acfffff8aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffefdb1fff3eba3ff383626ff1f1e16ff242419ff242419ff1b1b13ff42412effece4a1fffdffb9fffff7aefffff7aefffff7aefffff7aefffeffb3fff3eba3ff313022ff201f17ff242419ff242419ff161510ffaca776fffdffb9fff8f0a8fff3eba3fffeffb3ffe4dd9cff313022ffcac48afffeffb3fffff8aefffff9aeffedf2adff00c2a9ff00b2aaff00bab4fff50f1affff0000ffff0000ffff000fff23aba3ff00a59cff00a59cff00aaa3ff00aca7ff00aba2ff00aca3ff00b0aaffa2bfacfff3eba3fffff7aefffff7aefffff8aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffdffb9ff9f9a6cff161510ff242419ff242419ff25241aff1b1b13ff42412effd6d294fffdffb9fffdffb9fffdffb5fffdffb9fffeffb3ff7b7757ff1b1b13ff242419ff242419ff242419ff181712ffbdb882fffdffb5fffff8affffff9aefffeffb3ff696649ff726e51fffdffb9fffdffb5ffece4a1ffece4a1fffff8aeffedf2adff00b4a6ff00aca2ff00aaa3ff00a59cff00a59cff00b2aaff00aea9ff00ada3ff00ada3ff00b2abff00ada6ff00aaa0ff00aba1ff00b2abff87bdc8ffddd99afffdf4abfffef5acfffff8aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffefdb1fff8f0a8ff42412eff1b1b13ff242419ff242419ff25241aff1b1b13ff29291cff7b7757ffbdb882ffc4c187ffa4a071ff4d4c36ff1e1d15ff25241aff242419ff242419ff1b1b13ff383626fff3eba3fffffab0fffef6adfffff9aefff8f0a8ff383626ffd6ce90ffe4dd9cff7b7757ff313022ff999468fffeffb3fffff7acffabe3a9ff00b4acff00aaa6ff00ada3ff00ada3ff00b8afff00ada5ff00aaa0ff00aba1ff00b2aaff00ada6ff00aaa0ff00aca0ff00b0a6ff7fc4d7ffb4ccb9fff8f0a8fffff6acfffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffdffb9ffa4a071ff181712ff242419ff242419ff242419ff242419ff212017ff181712ff1b1b13ff1e1d15ff181712ff1b1b13ff242419ff242419ff242419ff1e1d15ff161510ffaca776fffdffb5fffff6adfffef6adfffff7aefffefdb1ff5c593fff42412eff383626ff696649ffd0ca8dfffcf5acfffef5acfffdf2a9fffff7a9ffa1ddb1ff00a6a1ff00ada3ff00aba0ff00b8afff00b3abff00b3abff00b3abff00b9b3ff00b4acff00b3abff00b4acff00b8aeff92c7d7ffa7cfc6ffe4dd9cfffff7acfffef6adfffff8aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffffab0fffbf5aeff42412eff1e1d15ff242419ff242419ff242419ff242419ff25241aff181712ff1e1d15ff242419ff242419ff212017ff1e1d15ff14130fff2b2b1effa4a071fffdffb5fffff7aefffff6adfffef6adfffef6acfffeffb3ffc4c187ff83815bffe4dd9cfffdffb5fffefdb1fffdf4abfffdf2a9fffef6adfffefdb1fff9f2b3ff00b0aaff00b4acff00b3abff00beb7ff00afa8ff00aba2ff00aba2ff00b0a4ff00afc5ff00aed6ff00aed6ff00b5d8ff00aca7ff00aca3ffa5c894fffdf4abfffef5acfffff8aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffdffb9ffb4af7bff181712ff242419ff242419ff242419ff201f17ff42412eff8a8560ff42412eff242419ff1f1e16ff27251bff42412eff8a8560ffe4dd9cfffdffb5fffff7aefffff6adfffef6adfffef6adfffef5acfffef5acfffffab0fffdffb5fffffab0fffdf4abfffdf4abfffef7aefffefdb1fffefcaefff3eba3ff62c6c4ff00a7a5ff00aca3ff00aca3ff00b5afff00ada5ff00aaa0ff00aba1ff00b2a8ff00aed3ff00ade7ff00ade7ff00b5e7ff00ada7ff00a9a3ff02b69efffce1a2fffff7acfffff6adfffff8aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffffab0fffffab0ff4d4c36ff1b1b13ff242419ff242419ff242419ff181712ffb4af7bfff7f8b0ffd6d294ffcac48affddd696fffdf4abfffdffb9fffefdb1fffff6adfffff6adfffff6adfffef6adfffef6adfffef5acfffef5acfffef5acfffdf4abfffdf4abfffef7aefffefdb1fffef8affff3eba3ffeed78fff40bfaeff00b5e7ff00aaa2ff00aca0ff00aba0ff00b8afff00ada5ff00aaa0ff00aba0ff00b2a8ff00aed3ff00ade7ff00ade7ff00b5e7ff00ada6ff00aca0ff00aca0ffbbcc9bfffff7acfffef5acfffff8aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffdffb9ffbdb882ff1b1b13ff212017ff181712ff1b1b13ff42412effaca776fffdffb5fffeffb3fffdffb5fffefdb1fffff8affffff6adfffff6adfffff6adfffff6adfffff6adfffef6adfffef6acfffef5acfffdf4abfffef5acfffff8affffefdb1fffef6adffece4a1ffddd696ffdfcc8cff72c5adff00ade7ff00b5e7ff00aaa1ff00aca0ff00aba0ff00b8afff00b3abff00b3aaff00b3aaff00b9b3ff00b5d4ff00b7e4ff00b5e7ff00bce5ff00b5afff00b4acff00b4acff74c19bfffdf2a9fffef5acfffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff9aefffeffb3ff5c593fff1b1b13ff696649ffbdb882fffbf5aefffdffb5fffff7aefffff7aefffff7aefffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffef6adfffef5acfffef5acfffff9aefffffab0fffcf5acffece4a1ffd6d294ffd4cc8dffdfcc8cffbbcc9bff00b7e4ff00b7e4ff00bce5ff00b2abff00b4acff00b3aaff00beb7ff00afa8ff00aba2ff00aba2ff00b1aaff00aca7ff00aca3ff00aca3ff00b1aaff00aca7ff00aba2ff00aba2ff00ada4ffddd99afffff8aefffef5acfffff8aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffefcb4ffddd99affd6ce90fffdffb5fffdffb5fffffab0fffff7aefffff7aefffff7aefffff7aefffff6adfffff6adfffff6adfffff6adfffff6adfffff6adfffef5acfffef6adfffff9aefffffab0fff8f0a8ffece4a1ffd6ce90ffd4cc8dffdfcc8cffd0ca8dffa5c894ff00aaa3ff00ada7ff00aca3ff00b2abff00aaa3ff00aca3ff00aca3ff00b5afff00ada5ff00aaa0ff00aba1ff00b2a8ff00ada6ff00aaa0ff00aba0ff00b2aaff00ada6ff00aba0ff00aca0ff00b3acffbbcc9bfffdf2a9fffff6acfffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffeffb3fffeffb3fffff8aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff6adfffff6adfffff7aefffff6acfffef5acfffef6adfffffab0fffff9aefff8f0a8ffe4dd9cffd6ce90ffd4cc8dffdfcc8cffd4cc8dff74c19bff00b0a4ff00b5adff00aaa2ff00aca0ff00aba0ff00b4acff00aaa2ff00ada3ff00aba0ff00b8afff00ada5ff00aaa0ff00aba0ff00b2a8ff00ada6ff00aaa0ff00aba1ff00b2aaff00ada6ff00aba0ff00aaa0ff00b2abff4eba9cffece4a1fffff8aefffef6adfffff8aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff8aefffff6adfffef5acfffef5acfffef6adfffffab0fffff8affff3eba3ffddd99affd6ce90ffd0ca8dffdfcc8cffc2ca8fff8ac497ff00b0a4ff00aba1ff00aba0ff00b3aaff00aaa1ff00aca0ff00aba1ff00b4acff00aaa2ff00aca0ff00aba0ff00b8afff00b5afff00b3aaff00b3aaff00b9b3ff00b5afff00b3aaff00b3aaff00b9b3ff00b5afff00b3aaff00b3aaff00b9b3ff00b2aaffbbcc9bfffff7a9fffef5acfffff8aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff8aefffff7aefffef6acfffef5acfffef6adfffff9aefffef6adfff3eba3ffddd696ffd4cc8dffd4cc8dffdfcc8cffd6ce90ff98c7a7ff00b4a6ff00b9b3ff00b1aaff00b3aaff00b3aaff00bab4ff00b2abff00b3aaff00b3aaff00bab4ff00b2abff00b3aaff00b3aaff00beb7ff93c1ccff89c5d5ff89c5d5ff9ccad7ff00b2aaff00aba2ff00aca3ff00b1aaff00aca7ff00aba2ff00aba2ff00b0aaffcbad93ffddba87fff3eba3fffff7aefffff6adfffff8aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff8aefffff7aefffef6acfffef5acfffef6adfffff8affffef5acffece4a1ffddd696ffd4cc8dffd4cc8dffdfcc8cffc2ca8fff74c19bffd1a989ffd5ad8fffe9ac8bffe0b297ff00aaa3ff00aca3ff00aba2ff00b2abff00aaa3ff00aca3ff00aba2ff00b2abff93c1ccff92c7d7ff89c5d5ff9ccad7ff9ccad7ff8ccfe6ff8ccfe6ff9bd3e7ff00b1aaff00aaa0ff00aba1ff00b2aaff00ada6ff00aba0ff00aba1ff00b2abffd5ad8fffffad80ffddd99afffff8aefffef5acfffff8aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff8aefffff7aefffef5acfffdf4abfffef6adfffff8aefffdf2a9ffece4a1ffddd696ffd0ca8dffd4cc8dffdfcc8cffc2ca8fff4eba9cff00b2a2ff00b5adffe9ac8bffffac7effffac7efff7b591ff00aca3ff00ada3ff00aba1ff00b4acff00aaa1ff00aca0ff00aba0ff00b4acff92c7d7ff8ccfe6ff8ccfe6ff9bd3e7ff92c7d7ff8ccfe6ff8ccfe6ff9bd3e7ff00b1aaff00aaa0ff00aba1ff00b2aaff00ada7ff00aba0ff00aba1ff00b3acffd5ad8fffffac7effe6c08dfff8f0a8fffef6adfffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff8aefffff7aefffef5acfffdf4abfffef6acfffff7aefff8f0a8ffece4a1ffd6d294ffd4cc8dffd4cc8dffdfcc8cffa5c894ff58c5a6ff00aca3ff00aaa1ff00aaa1ff00b3abffe9ac8bffffac7effffac7efffbb38fff00aba2ff00ada3ff00aba1ff00b4acff00aaa1ff00aca0ff00aba1ff00b4acff92c7d7ff8ccfe6ff8ccfe6ff9bd3e7ff9ccad7ff94d0e2ff97d1e4ffa6d6e7ff00b7b2ff00b4acff00b3aaff00b9b3ff00b5afff00b4acff00b4acff00b9b3ffd1b49cfffbb38fffe6c08dffece4a1fffef7aefffef5acfffff8aefffff7aefffff7aefffff7aefffff7aefffff7aefffff8aefffff7aefffef5acfffdf4abfffef5acfffff6acfff8f0a8ffe4dd9cffd6ce90ffd4cc8dffd4cc8dffd4cc8dffc8ca9bff74c19bff00b8aeff00b9b3ff00b2abff00b4acff00b3aaff00bab4ffe0b297fffbb38ffffbb38ffff2bb9bff00b4acff00b4acff00b4acff00bab4ff00b2abff00b4acff00b3aaff00bab4ff9ccad7ff97d1e4ff94d0e2ffa6d6e7ff00afa8ff00aba2ff00aca3ff00b1aaff00aca7ff00aca3ff00aca3ff00b0aaffcbad93ffecaa88ffe9ac8bffeeb192ff23aba3ff00aba2ff00aca2ffbbcc9bfffff6acfffef5acfffff7aefffff7aefffff7aefffff8aefffff8aefffff7aefffef5acfffdf4abfffef5acfffff6acfff3eba3ffe4dd9cffd6ce90ffd0ca8dffd4cc8dffd4cc8dffc8ca9bffb4ccb9ff00aaa3ff00aaa6ff00aba2ff00b2abff00aaa3ff00aca3ff00aca3ff00b2abff00aaa3ff00aca3ff00aca3ff00b2abffd5ad8fffe9ac8bffe9ac8bffe0b297ff00aaa3ff00aca3ff00aca3ff00b2abff00aca2ff00ada7ff00aca3ff00b5afff00ada5ff00aaa0ff00aba1ff00b2a8ff00ada6ff00aaa0ff00aca0ff00b3acffd5ad8fffffac7effffad80ffffb38aff00aca2ff00ada3ff00aba1ff4eba9cfff3eba3fffff7aefffef6adfffff9aefffff8affffff7aefffef5acfffdf2a9fffef5acfffdf4abfff3eba3ffddd99affd6ce90ffd4cc8dffdfcc8cffdfcc8cffc8ca9bffa7cfc6ff8ccfe6ff9bd3e7ff00ada7ff00aca0ff00aca0ff00b3abff00aba2ff00aca0ff00aca0ff00b3abff00aaa1ff00aba1ff00aba1ff00b4acffe9ac8bffffac7effffac7efff7b591ff00aba2ff00ada3ff00aca0ff00b4acff00aaa2ff00ada3ff00aba0ff00b8afff00ada5ff00aaa0ff00aba1ff00b2a8ff00ada7ff00aaa0ff00aba1ff00b3acffd5ad8fffffac7effffad80ffffb38aff00aca2ff00aba1ff00aba1ff00b2a2ffddd696fffff8aefffef5acfffff7aefffef5acfffdf2a9fffef5acfffdf2a9fff3eba3ffddd99affd4cc8dffd4cc8dffd4cc8dffdfcc8cff8ac497ff22b4abff84c4d3ff8ccfe6ff8ccfe6ff97d1e4ff00ada7ff00aba0ff00aba0ff00b3abff00aba2ff00aba1ff00aba1ff00b3abff00aba2ff00aba1ff00aba1ff00b3aaffe9ac8bffffac7effffac7efff7b591ff00aaa1ff00ada3ff00aba1ff00b3abff00aaa2ff00ada3ff00aba0ff00b8afff00b5afff00b4acff00b4acff00b9b3ff00b5afff00b4adff00b4adff00b9b3ffd1b49cfffbb38ffff7b591fff2bb9bff22b4abff00b4acff00b4acff00b9b3ffbbcc9bfff8f0a8fffff7acfffdf4abfffdf4abfffdf2a9ffece4a1ffddd696ffd4cc8dffd4cc8dffdfcc8cffdfcc8cffbbcc9bff40bfaeff00b1a8ff00b9b3ff92c7d7ff9bd3e7ff97d1e4ff9ed3e2ff00b5afff00b4acff00b4acff00bab4ff00b4acff00b4acff00b4acff00bab4ff00b4acff00b4acff00b4acff00bab4ffe0b297fff7b591fff7b591fff2bb9bff00b4acff00b4adff00b4adff00bab4ff00b2abff00b4acff00b4acff00beb7ff00aca7ff00aba2ff00aba2ff00aea9ffcbad93ffecaa88ffe9ac8bffeeb192ff23aba3ff00aba2ff00aba2ff00b1aaff00ada4ff00aca3ff00aba2ff00aea9ff4eba9cffddd696fff8f0a8fffdf2a9ffece4a1ffddd696ffd4cc8dffd4cc8dffdfcc8cffd6ce90ff8ac497ff02b69eff00a7a5ff00aaa6ff00aba2ff00b1aaff00aaa3ff00aca3ff00aba2ff00b1aaff00accbff00aed6ff00abd8ff00b5d8ff00aaa3ff00aba2ff00aca3ff00b1aaff00aaa3ff00aba2ff00aba2ff00b2abff00aaa3ff00aca3ff00aba2ff00b2abffd5ad8fffecaa88ffecaa88ffe0b297ff00aca2ff00aba2ff00aba2ff00b5afff00aea6ff00aba0ff00aca0ff00b3acffd5ad8fffffac7effffad80ffffb38aff00ada4ff00aba1ff00ada3ff00b2aaff00ada7ff00aca0ff00aca0ff00b2a8ff00ada5ffa5c894ffdfcc8cffd6ce90ffd4cc8dffd4cc8dffdfcc8cffdfcc8cff8ac497ff00b0a4ff00ada3ff00b2aaff00aca3ff00aca0ff00aca0ff00b3abff00aba2ff00aba1ff00aba1ff00b3abff00aed6ff00afe9ff00ade7ff00b5e7ff00ada5ff00aca0ff00aca0ff00b3abff00aba2ff00aca0ff00aca0ff00b4acff00aba2ff00ada3ff00ada3ff00b4acffecaa88ffffac7effffac7efff7b591ff00aaa1ff00ada3ff00aca0ff00b8afff00aea9ff00ada3ff00ada3ff00b2abffd5ad8fffffac7effffad80ffffb38aff00ada4ff00aaa1ff00aba1ff00b2aaff00aca3ff00aba0ff00aba0ff00b2a8ff00aaa6ff4eba9cffdfcc8cffd4cc8dffdfcc8cffc8ca9bff72c5adff00b5d4ff00aaa6ff00aaa0ff00aba1ff00b3abff00ada5ff00ada3ff00ada3ff00b5adff00aca3ff00aba1ff00aba1ff00b3abff00aed6ff00ade7ff00ade7ff00b5e7ff00aba2ff00aba0ff00aba1ff00b3abff00aaa1ff00aba0ff00aba0ff00b3abff00aba2ff00aca0ff00aba1ff00b3aaffecaa88ffffac7effffac7efff7b591ff00aaa2ff00ada3ff00ada3ff00b8afff00b2aaff00b1a8ff00b1a8ff00b7aeffd1b49cfff7b591fff7b591fff2bb9bff22b4abff00b4acff00b4acff00bbb4ff00b5afff00b4adff00b4adff00bbb4ff00b4acff00b7aeffbbcc9bffd4cc8dff98c7a7ff00b5d4ff00b5e7ff00bce5ff00b5afff00b4acff00b4acff00bbb4ff00b3abff00b1a8ff00b1a8ff00bab4ff00b4acff00b4acff00b4acff00bbb4ff00b5d4ff00b7e4ff00b7e4ff00bce5ff00b4acff00b4acff00b4acff00bab4ff00b4acff00b4adff00b4adff00bab4ff00b4acff00b4acff00b4acff00bab4ffe0b297fff7b591fff7b591fff2bb9bff00b2abff00b1a8ff00b1a8ff00bab2ffea3337fff90000fff90000fff70000ff2ba19cff00ada5ff00aba2ff00b0a4ff00aaa3ff00aba2ff00aba2ff00aea6ff87bdc8ff92c7d7ff92c7d7ff9ccad7ff00aca7ff00aaa1ff00aaa2ff00b0a4ff00a7a5ff00aaa2ff00aba2ff00b0aaff00aaa3ff00aba2ff00aba2ff00b0aaffea3337fff90000fff90000fff70000ff00aaa3ff00ada5ff00aaa1ff00b1aaff00aaa3ff00aba2ff00aba2ff00b1aaff00aca2ff00aba2ff00aba2ff00b1aaff93c1ccff92c7d7ff92c7d7ff9ccad7ff00aca2ff00aba2ff00aba2ff00b1aaff00aca2ff00aba2ff00aba2ff00b0a4fff50f1afff90000fff90000fff50f1afff70000ffff0000ffff0000ffff0000ff009c96ff00ada3ff00ada3ff00b2a8ff00ada6ff00aca0ff00ada3ff00b2a8ff84c4d3ff8ccfe6ff8ccfe6ff9bd3e7ff00b0aaff00aba0ff00ada3ff00b5adff00aca3ff00ada3ff00aca0ff00b3abff00ada7ff00ada3ff00ada3ff00b5adffec0000ffff0000ffff0000ffff0000ff00a59cff00ada3ff00ada3ff00b3abff00aba2ff00aca0ff00aca0ff00b3abff00ada5ff00ada3ff00aca0ff00b4acff89c5d5ff8ccfe6ff8ccfe6ff9bd3e7ff00ada5ff00ada3ff00ada3ff00b4acff00aaa1ff00ada3ff00ada3ff00b3aafff90000ffff0000ffff0000ffff0000fff70000ffff0000ffff0000ffff0000ff009c96ff00ada3ff00aba0ff00b2aaff00aca3ff00aba0ff00aba0ff00b0a6ff84c4d3ff8ccfe6ff8ccfe6ff9bd3e7ff00b0aaff00aa9eff00aba0ff00b2aaff00aca3ff00aba0ff00aba0ff00b3abff00aca3ff00aba0ff00aca0ff00b5adffec0000ffff0000ffff0000ffff0000ff00a59cff00ada3ff00aba0ff00b3abff00aba2ff00aba0ff00aba0ff00b3abff00aba2ff00aba0ff00aba0ff00b3abff89c5d5ff8ccfe6ff8ccfe6ff94d0e2ff00aba2ff00aba0ff00aba0ff00b3aaff00aaa1ff00aca0ff00ada3ff00b1a8fff90000ffff0000ffff0000ffff0000ffea3337ffff0000ffff0000ffff000fff3ca39eff00b9b2ff00b7afff00bbb4ff00bab2ff00b7afff00b7afff00bbb4ff9ccad7ff9bd3e7ff9bd3e7ffa6d6e7ff00b7b2ff00b7afff00b7afff00beb7ff00b5afff00b7afff00b7afff00beb7ff00bab2ff00b7afff00b7afff00beb7ffea3337ffff0000ffff0000ffff000fff00b2aaff00b9b2ff00b7afff00beb7ff00b5afff00b7afff00b7afff00beb7ff00b5afff00b7afff00b7afff00beb7ff9ccad7ffa6d6e7ff9bd3e7ffa6d6e7ff00b5afff00b7afff00b7afff00beb7ff00b4acff00b9b2ff00b9b2ff00bab2fff50f1affff0000ffff0000ffff000f";nbChamps=this.numFields;for(var leChamp="- Liste des champs -",listeChamps='var listeChamps = {"'+leChamp+'": '+(nbChamps+1)+",",i=0;i<nbChamps;i++){var nomChamp=this.getNthFieldName(i);if("object"!=typeof this.getField(nomChamp).page)listeChamps+='"'+nomChamp+'": '+(-1*(i+1)).toString()+",";else for(var j=0;j<this.getField(nomChamp).page.length;j++)listeChamps+='"'+nomChamp+"."+j+'": '+(-1*(i+1)).toString()+","}var listeChamps=listeChamps.substring(0,listeChamps.length-1);eval(listeChamps+="}"),resScript="",resAction="",resQuand="";var bDialogue={initialize:function(f){var a={logo:{width:60,height:60,offset:0,read:function(f){return b2.slice(this.offset,this.offset+=f)}}};f.load(a),f.enable({Docu:!1,Acti:!1,Cham:!1}),this.loadDefaults(f)},loadDefaults:function(f){f.load({LCha:listeChamps})},quelScript:function(f){for(var a=0;a<=2;a++)if(f["Rd0"+a])switch(a){case 0:resScript="Document";break;case 1:resScript="Action";break;case 2:resScript="Champ"}return resScript},quelleAction:function(f){for(var a=0;a<=4;a++)if(f["Rd1"+a])switch(a){case 0:resAction="WillClose";break;case 1:resAction="WillSave";break;case 2:resAction="DidSave";break;case 3:resAction="WillPrint";break;case 4:resAction="DidPrint"}return resAction},quand:function(f){for(var a=0;a<=9;a++)if(f["Rd2"+a])switch(a){case 0:resQuand="MouseUp";break;case 1:resQuand="MouseDown";break;case 2:resQuand="MouseEnter";break;case 3:resQuand="MouseExit";break;case 4:resQuand="OnFocus";break;case 5:resQuand="OnBlur";break;case 6:resQuand="Format";break;case 7:resQuand="Keystroke";break;case 8:resQuand="Validate";break;case 9:resQuand="Calculate"}return resQuand},Rd00:function(f){f.enable({Docu:!0,Acti:!1,Cham:!1})},Rd01:function(f){f.enable({Docu:!1,Acti:!0,Cham:!1})},Rd02:function(f){f.enable({Docu:!1,Acti:!1,Cham:!0})},validate:app.trustedFunction(function(bDialogue){app.beginPriv();for(var alerte,oRslt=bDialogue.store(),elements=bDialogue.store().LCha,NoTestMaxi=9,i=0;i<=NoTestMaxi;i++)eval("var testOK"+i+"=true");if(this.quelScript(oRslt)){if("Document"==this.quelScript(oRslt)&&(""==oRslt.name||/^\s+|\s+$/gm.test(oRslt.name)))var testOK1=!1;else if("Action"!=this.quelScript(oRslt)||this.quelleAction(oRslt)){if("Champ"==this.quelScript(oRslt)){if(this.quand(oRslt)){for(var i in elements)elements>0&&(valeurListe=listeChamps,nomListe=i);if(valeurListe>0&&(""==oRslt.nmCh||/^\s+|\s+$/gm.test(oRslt.nmCh)))var testOK4=!1;else{nmChamp=valeurListe>0?oRslt.nmCh:nomListe;try{var leType=getField(nmChamp).type;switch(leType){case"text":var typeBouton="Champ de texte";break;case"checkbox":var typeBouton="Case \xe0 cocher";break;case"radiobutton":var typeBouton="Bouton radio";break;case"listbox":var typeBouton="Zone de liste";break;case"combobox":var typeBouton="Menu d\xe9roulant";break;case"button":var typeBouton="Bouton";break;case"signature":var typeBouton="Signature num\xe9rique"}switch(this.quand(oRslt)){case"Format":var typeScript="Script de format personnalis\xe9";break;case"Keystroke":var typeScript="Script de touches personnalis\xe9";break;case"Validate":var typeScript="Script de validation";break;case"Calculate":var typeScript="Script de calcul"}if(("Calculate"==this.quand(oRslt)||"Validate"==this.quand(oRslt)||"Keystroke"==this.quand(oRslt)||"Format"==this.quand(oRslt))&&"text"!=leType&&"combobox"!=leType)var testOK6=!1;else if(("Calculate"==this.quand(oRslt)||"Validate"==this.quand(oRslt)||"Format"==this.quand(oRslt))&&"listbox"!=leType)var testOK7=!1}catch(e){testOK5=!1}}}else var testOK3=!1}}else var testOK2=!1}else var testOK0=!1;if(""==oRslt.scri)var testOK8=!1;else if(!/\b^[\s\S]*\b(var[ ]+.+[ ]*=)|(event\.(?:change|name|shift|rc|source|changeEx|richChange|target|commitKey|richChangeEx|targetName|fieldFull|richValue|type|keyDown|selEnd|value|modifier|selStart|willCommit))|(this\.getField[(]["']?.+["']?[)])[\s\S]*$/.test(oRslt.scri)||!/[=]/.test(oRslt.scri))var testOK9=!1;for(var txtRetour="var retourAlerte=(",i=0;i<=NoTestMaxi;i++)txtRetour+="testOK"+i,i<NoTestMaxi&&(txtRetour+=" && ");if(eval(txtRetour+=")"),testOK0){if(testOK1){if(testOK2){if(testOK3){if(testOK4){if(testOK5){if(testOK6&&testOK7){if(testOK8){if(!testOK9&&4==app.alert({cMsg:"Le texte entr\xe9 semble ne pas correspondre \xe0 un script JavaScript pour Acrobat.\rVoulez-vous ajouter ce script ?",cTitle:"ATTENTION",nType:2,nIcon:2}))var retourAlerte=!0}else app.alert("Veuillez \xe9crire ou coller un script dans la fen\xeatre ci-contre.",3)}else app.alert('Le champ "'+nmChamp+'" est de type "'+typeBouton+'" et ne peut donc pas ex\xe9cuter un '+typeScript+".",3)}else app.alert('Le champ "'+nmChamp+"\" n'existe pas.",3)}else app.alert("Veuillez s\xe9lectionner ou indiquer un nom de champ.",3)}else app.alert("Veuillez s\xe9lectionner un type de script de champ.",3)}else app.alert("Veuillez s\xe9lectionner un script d'action de document.",3)}else app.alert("Veuillez indiquer un nom de script correct.",3)}else app.alert("Veuillez s\xe9lectionner un type de script.",3);return retourAlerte}),commit:function(f){var a=f.store(),$=f.store().LCha;for(var b in leScript=a.scri,nomScript=a.name,$)$>0&&(valeurListe=listeChamps,nomListe=b);nmChamp=valeurListe>0?a.nmCh:nomListe},description:{name:"b2Tools - Ajouter un Script",elements:[{type:"view",elements:[{type:"view",align_children:"align_top",elements:[{type:"view",elements:[{type:"static_text",name:"\xc9crivez ou collez un script dans la fen\xeatre ci-dessous.",alignment:"align_left",font:"dialog"},{type:"edit_text",item_id:"scri",width:400,height:485,multiline:!0,alignment:"align_fill"},]},]},]},{type:"view",elements:[{type:"view",align_children:"align_top",elements:[{type:"view",elements:[{type:"image",item_id:"logo",width:64,height:64},]},{type:"view",char_width:40,elements:[{type:"static_text",name:"AJOUTER UN SCRIPT",char_width:25,alignment:"align_center",font:"dialog",bold:!0},{type:"static_text",item_id:"stat",name:"bebarth (04/24)",alignment:"align_center",font:"palette",bold:!0,char_width:10,height:20},{type:"view",alignment:"align_center",align_children:"align_row",elements:[{type:"static_text",name:"Scripts : ",font:"dialog",bold:!0},{type:"radio",group_id:"GRP0",item_id:"Rd00",name:" du document"},{type:"radio",group_id:"GRP0",item_id:"Rd01",name:" Actions du document"},{type:"radio",group_id:"GRP0",item_id:"Rd02",name:" de champ"},]},]},]},{type:"gap",height:3},{type:"view",group_id:"Docu",alignment:"align_fill",elements:[{type:"static_text",name:"Scripts JavaScript du document",font:"dialog",bold:!0},{type:"cluster",item_id:"Docu",elements:[{type:"static_text",name:"Nom du script :"},{type:"edit_text",item_id:"name",height:20,alignment:"align_fill"},]},]},{type:"view",alignment:"align_fill",elements:[{type:"static_text",name:"Actions du document",font:"dialog",bold:!0},{type:"cluster",item_id:"Acti",align_children:"align_top",elements:[{type:"view",elements:[{type:"radio",group_id:"GRP1",item_id:"Rd10",name:" Le document sera ferm\xe9"},{type:"radio",group_id:"GRP1",item_id:"Rd11",name:" Le document sera enregistr\xe9"},{type:"radio",group_id:"GRP1",item_id:"Rd12",name:" Le document a \xe9t\xe9 enregistr\xe9"},]},{type:"static_text",name:" "},{type:"view",elements:[{type:"radio",group_id:"GRP1",item_id:"Rd13",name:" Le document sera imprim\xe9"},{type:"radio",group_id:"GRP1",item_id:"Rd14",name:" Le document a \xe9t\xe9 imprim\xe9"},]},]},]},{type:"view",alignment:"align_fill",elements:[{type:"static_text",name:"Scripts de champ",font:"dialog",bold:!0},{type:"cluster",item_id:"Cham",align_children:"align_top",elements:[{type:"view",elements:[{type:"static_text",name:"Nom du champ",font:"dialog",bold:!0},{type:"static_text",name:"S\xe9lectionnez..."},{type:"popup",item_id:"LCha",width:100,alignment:"align_fill"},{type:"static_text",name:"ou indiquez son nom :"},{type:"edit_text",item_id:"nmCh",height:20,alignment:"align_fill"},]},{type:"static_text",name:" "},{type:"view",elements:[{type:"static_text",name:"Action",font:"dialog",bold:!0},{type:"radio",group_id:"GRP2",item_id:"Rd20",name:" Souris rel\xe2ch\xe9e"},{type:"radio",group_id:"GRP2",item_id:"Rd21",name:" Souris enfonc\xe9e"},{type:"radio",group_id:"GRP2",item_id:"Rd22",name:" Souris entr\xe9e"},{type:"radio",group_id:"GRP2",item_id:"Rd23",name:" Souris sortie"},{type:"radio",group_id:"GRP2",item_id:"Rd24",name:" Champ activ\xe9"},{type:"radio",group_id:"GRP2",item_id:"Rd25",name:" Champ d\xe9sactiv\xe9"},]},{type:"static_text",name:" "},{type:"view",elements:[{type:"static_text",name:"Format",font:"dialog",bold:!0},{type:"radio",group_id:"GRP2",item_id:"Rd26",name:" Script de format"},{type:"radio",group_id:"GRP2",item_id:"Rd27",name:" Script de touches"},{type:"static_text",name:"Validation",font:"dialog",bold:!0},{type:"radio",group_id:"GRP2",item_id:"Rd28",name:" Script de validation"},{type:"static_text",name:"Calcul",font:"dialog",bold:!0},{type:"radio",group_id:"GRP2",item_id:"Rd29",name:" Script de calcul"},]},]},]},{type:"gap",height:5},{type:"ok_cancel"},]},]}};"ok"==app.execDialog(bDialogue)&&("Document"==resScript?this.addScript(nomScript,leScript):"Action"==resScript?this.setAction(resAction,leScript):this.getField(nmChamp).setAction(resQuand,leScript));Sur demande, je peux vous donner la version originale de ce script ou de celui qui fonctionne en script d’application. @+ 
 😎Attachments:You must be logged in to view attached files. bebarthMaître des clés bebarthMaître des clésbonjour, 
 Dans les boucles de vérifications, i est le premier indice et j le second. Donc si il y a des seconds indices qui commencent à 0, il faut écrire : « for (var j=0; j<lesSeries[1].length; j++)… »S’il n’y a aucun message à afficher : ne pas afficher la console ...
 if (txt) {
 console.clear();
 console.show();
 console.println(txt);
 }Pour info, var reponse=reponse.replace(/[,]{2,}/g,",").replace(/^,/,"").replace(/,$/,"");supprime les éventuelles virgules en début et fin de chaine, et remplace les virgules multiples par une simple. J’avais rajouté cette ligne au cas ou il y avait une erreur de frappe dans la boite de dialogue, mais cette ligne n’est pas nécessaire si on écrit la chaine dans la ligne de code. Je suppose que celui qui lancera le script fera attention à ce qu’il écrit !@+ 
 😎 bebarthMaître des clés bebarthMaître des clésDu coup j’ai remis l’ancien script d’affichage de la page 2 et j’ai rajouter un script de calcul pour les menus déroulants : // Script Affichage Page 2
 var modeles=this.templates;
 for (i=0; i<modeles.length; i++) {
 if (modeles.name=="page2") {
 modeles.hidden=(event.target.value=="Off");
 break;
 }
 }
 this.pageNum=0;// Script de calcul des menus déroulants
 if (this.getField("Canal").value && this.getField("Départ.0").value && this.getField("Arrivée.0").value!="- Sélectionnez -") {
 this.getField("Check Box1").display=display.noPrint;
 } else {
 this.getField("Check Box1").display=display.hidden;
 this.getField("Check Box1").value="Off";
 var modeles=this.templates;
 for (i=0; i<modeles.length; i++) {
 if (modeles.name=="page2") {
 modeles.hidden=true;
 break;
 }
 }
 this.pageNum=0;
 }@+ 
 😎Attachments:You must be logged in to view attached files. bebarthMaître des clés bebarthMaître des clésbonjour, 
 Voici un nouveau fichier. Ici, la case à cocher ne s’imprimera pas et la page 2 sera affichée uniquement si les 3 menus déroulants sont renseignés lorsque cette case est cochée.// Script Affichage Page 2 
 if (this.getField(« Canal »).value && this.getField(« Départ.0 »).value && this.getField(« Arrivée.0 »).value) {
 var modeles=this.templates;
 for (i=0; i<modeles.length; i++) {
 if (modeles.name== »page2″) {
 modeles.hidden=(event.target.value== »Off »);
 break;
 }
 }
 this.pageNum=0;
 }@+ 
 😎Attachments:You must be logged in to view attached files. bebarthMaître des clés bebarthMaître des clésbonjour, 
 Voici donc un script pour vérifier les indices de tes champs :
 var reponse="";
 while (!/^(\w+,*)+$/.test(reponse)) {
 var reponse=app.response({
 cQuestion: "Indiquez les différents noms de champs en les séparant par une virgule. Exemple :",
 cTitle: "Vérification des indices de champs",
 cDefault: "Verifier,Recommencer,Titre,Question,Q,R,Aide,cAc",
 cLabel: "Champ(s) :"
 });
 }
 if (reponse!=null) {
 var reponse=reponse.replace(/[,]{2,}/g,",").replace(/^,/,"").replace(/,$/,"");
 var aVerifier=reponse.split(",");
 var lesSeries=[];
 for (var i=0; i<this.numFields; i++) {
 var nomChamp=this.getNthFieldName(i);
 for (var j=0; j<aVerifier.length; j++) {
 var RegExTest=new RegExp("^"+aVerifier[j]+"\\.(\\d+)\\.(\\d+)$");
 var OK=nomChamp.match(RegExTest);
 if (OK) {
 var ind1=OK[1];
 var ind2=OK[2];
 if (lesSeries[j]==undefined) lesSeries[j]=[aVerifier[j],[]];
 if (lesSeries[j][1][ind1]==undefined) lesSeries[j][1][ind1]=[ind1,[]];
 if (lesSeries[j][1][ind1][1][ind2]==undefined) lesSeries[j][1][ind1][1][ind2]=[ind2];
 break;
 }
 }
 }
 var txt=""
 for (var ind=0; ind<lesSeries.length; ind++) {
 if (lesSeries[ind]==undefined) txt+="Il n'y a pas de champ \""+aVerifier[ind]+"\" avec indices.\r";
 else {
 for (var j=1; j<lesSeries[ind][1].length; j++) {
 if (lesSeries[ind][1][j]==undefined) txt+="Il n'y a pas d'indice de premier niveau \""+aVerifier[ind]+"."+[j]+"\".\r";
 else {
 for (var k=1; k<lesSeries[ind][1][j][1].length; k++) {
 if (lesSeries[ind][1][j][1][k]==undefined) txt+="Il n'y a pas d'indice de second niveau \""+aVerifier[ind]+"."+[j]+"."+k+"\".\r";
 }
 }
 }
 }
 }
 if (!txt) txt="Tout est OK !!!";
 console.clear();
 console.show();
 console.println(txt);
 }Ce script tient compte qu’il n’y a apparemment pas d’indices 0 pour tes champs. Je joint un fichier où le script regarde si il y a des indices 0. @+ 
 😎Attachments:You must be logged in to view attached files. bebarthMaître des clés bebarthMaître des clés…dans le principe c’est à peu près ça, et je voyais ça pas si compliqué, mais je crois que je me suis lancé dans une usine à gaz ! Je reprendrai à zéro ce weekend et à tête reposée… @+ 
 😎 bebarthMaître des clés bebarthMaître des clésToujours le souci d’affichage sur le forum lorsqu’un « i » est entre crochets « [] » ! 
 J’ai changé le « i » en « k » dans le script précédent, ça devrait marcher beaucoup mieux maintenant !@+ 
 😎 bebarthMaître des clés bebarthMaître des clésÇa marche chez moi… et avec ton dernier fichier ! 
 Je regarde plus tard.@+ 
 😎Attachments:You must be logged in to view attached files. bebarthMaître des clés bebarthMaître des clésbonjour, 
 Il faut ajouter 2 scripts d' »Actions du document », mais cela dépend de si tous les champs ont ou pas la même couleur de fond.Admettons qu’il sont tous en « Light Gray ». 
 Script « Le document sera imprimé » :
 for (var i=0; i<this.numFields; i++) this.getField(this.getNthFieldName(i)).fillColor=color.transparent;
 Script « Le document a été imprimé » :
 for (var i=0; i<this.numFields; i++) this.getField(this.getNthFieldName(i)).fillColor=color.ltGray;Si tous les champs ont une couleur différente (ou presque…). 
 Script « Le document sera imprimé » :
 lesCouleurs=[];
 for (var i=0; i<this.numFields; i++) {
 lesCouleurs.push(this.getField(this.getNthFieldName(i)).fillColor);
 this.getField(this.getNthFieldName(i)).fillColor=color.transparent;
 }
 Script « Le document a été imprimé » :
 for (var i=0; i<this.numFields; i++) this.getField(this.getNthFieldName(i)).fillColor=lesCouleurs;@+ 
 😎 bebarthMaître des clés bebarthMaître des clésbonjour, Sinon ta proposition précédente me va très bien. Très bien ! Mais perso il fallait que je trouve. 
 Voici donc un script qui fonctionne avec ton fichier :var lesChamps=[];
 for (var i=0; i<this.numFields; i++) {
 var nomChamp=this.getNthFieldName(i);
 if (typeof this.getField(nomChamp).page=="object") {
 lesChamps.push([nomChamp,this.getField(nomChamp).page])
 }
 }
 if (lesChamps.length) {
 var leTexte="";
 for (var k=0; k<lesChamps.length; k++) {
 var nom=lesChamps[k][0];
 var lesPages=lesChamps[k][1];
 for (var j=0; j<lesPages.length; j++) lesPages[j]=lesPages[j]+1;
 var frequences={};
 for (var j=0; j<lesPages.length; j++) {
 var nb=lesPages[j];
 if (frequences[nb]===undefined) frequences[nb]=1;
 else frequences[nb]++;
 }
 var parPage=[];
 var txt="• \""+nom+"\" - ";
 for (var nb in frequences) parPage.push(frequences[nb]+" fois en page "+nb);
 var parPage=parPage.toString();
 var n=parPage.lastIndexOf(",");
 if (n>-1) var parPage=(parPage.substring(0,n)+" et "+parPage.substring(n+1)).replace(/,/g,", ");
 if (!leTexte) leTexte+="Champs dupliqués :";
 leTexte+="\r"+txt+parPage+".";}
 console.clear();
 console.show();
 console.println(leTexte);
 app.alert(leTexte,3);
 } else app.alert("Tout est OK !!!",3);@+ 
 😎- 
		Cette réponse a été modifiée le il y a 1 année et 4 mois par  bebarth. bebarth.
 Attachments:You must be logged in to view attached files. bebarthMaître des clés bebarthMaître des clésJe pense que c’est une erreur de script. Ce champ est le dernier et si on le supprime, ça fait la même chose avec le nouveau dernier champ. De ce que j’ai pu constater, ça ne fait ça que si il n’y a pas de champs multiples. Je ne peux pas regarder aujourd’hui… @+ 
 😎 bebarthMaître des clés bebarthMaître des clésbonjour, 
 Etrange, effectivement ! Juste ce champ… Je regarde dès que je peux.@+ 
 😎 bebarthMaître des clés bebarthMaître des clésL’idéal serait encore de ne pas citer x fois la page lorsque le champ se trouve plusieurs fois sur cette page… Ça me trottait dans la tête : 
 for (var i=0; i<this.numFields; i++) {
 var nomChamp=this.getNthFieldName(i);
 if (typeof this.getField(nomChamp).page=="object") {
 var lesPages=this.getField(nomChamp).page;
 }
 }
 for (var j=0; j<lesPages.length; j++) lesPages[j]=lesPages[j]+1;
 var frequences={};
 for (var i=0; i<lesPages.length; i++) {
 var nb=lesPages;
 if (frequences[nb]===undefined) frequences[nb]=1;
 else frequences[nb]++;
 }
 var parPage=[];
 var txt="Le champ \""+nomChamp+"\" n'est pas unique; il se trouve "
 for (var nb in frequences) parPage.push(frequences[nb]+" fois en page "+nb);
 if (parPage.length>1) txt+=": ";
 var parPage=parPage.toString();
 var n=parPage.lastIndexOf(",");
 if (n>-1) var parPage=(parPage.substring(0,n)+" et "+parPage.substring(n+1)).replace(/,/g,", ");
 app.alert(txt+=parPage+".",3);@+ 
 😎 bebarthMaître des clés bebarthMaître des clésMaintenant je vais essayer de transformer la valeur this.getField(nomChamp).page pour que la numérotation commence à 1 et non pas à 0. Je pensais qu’il fallait convertir cette chaine en nombre avant de lui ajouter 1 mais je crois que ce n’est pas si simple. Tu peux écrire : 
 function doublons() {
 for (var i=0; i<this.numFields; i++) {
 var nomChamp=this.getNthFieldName(i);
 if (typeof this.getField(nomChamp).page=="object") {
 var lesPages=this.getField(nomChamp).page;
 for (var j=0; j<lesPages.length; j++) lesPages[j]=lesPages[j]+1;
 var lesPages=lesPages.toString();
 var n=lesPages.lastIndexOf(",");
 var lesPages=(lesPages.substring(0,n)+" et "+lesPages.substring(n+1)).replace(/,/g,", ");
 app.alert("Le champ \""+nomChamp+"\" n'est pas unique; il se trouve sur la(les) page(s) : "+lesPages,3);
 }
 }
 }L’idéal serait encore de ne pas citer x fois la page lorsque le champ se trouve plusieurs fois sur cette page… @+ 
 😎 bebarthMaître des clés bebarthMaître des clésbonjour, 
 Si tu listes juste les noms des champs, tu ne trouveras pas de doublons !
 Pour cela, il faut vérifier le paramètre « page » de chaque champ : si c’est un nombre le champ n’existe qu’une fois et si c’est une table, elle indique ou sont ces champs.Voici un script simple pour vérifier : 
 for (var i=0; i<this.numFields; i++) {
 var nomChamp=this.getNthFieldName(i);
 if (typeof this.getField(nomChamp).page=="object") app.alert("Le champ \""+nomChamp+"\" est présent sur en page(s) : "+this.getField(nomChamp).page,3);
 }
 Ici la table des pages est listée, donc les numéros sont basés sur 0 et peuvent être identiques…@+ 
 😎 bebarthMaître des clés bebarthMaître des clésbonjour, 
 Voici quelques lignes que j’avais écrites il y a un certain temps et que j’utilise pour gérer les doublons d’une table.// Suppression des doublons
 var laTable=["pomme","banane","orange","pomme","banane","pomme"];
 console.println("laTable : "+laTable);
 function sansDoublons(uneTable) {
 return uneTable.filter((valeur,indice)=>uneTable.indexOf(valeur)===indice);
 }
 console.println("laTable sans doublons mais non triée : "+sansDoublons(laTable));
 // Retour : laTable sans doublons mais non triée : pomme,banane,orange// Suppression des doublons
 var laTable=["pomme","banane","orange","pomme","banane","pomme"];
 console.println("laTable : "+laTable);
 function sansDoublons(uneTable){
 var newArr=[];
 for (var i=0; i<uneTable.length; i++) {
 if (newArr.indexOf(uneTable)===-1) newArr.push(uneTable);
 }
 return newArr;
 }
 console.println("laTable sans doublons mais non triée : "+sansDoublons(laTable));
 // Retour : laTable sans doublons mais non triée : pomme,banane,orange// Tous les doublons
 var laTable=["pomme","banane","orange","pomme","banane","pomme"];
 console.println("laTable : "+laTable);
 function lesDoublons(uneTable) {
 return uneTable.filter((valeur,indice)=>uneTable.indexOf(valeur)!==indice);
 }
 console.println("Tous les doublons : "+lesDoublons(laTable));
 // Retour : Tous les doublons : pomme,banane,pomme// Tous les doublons uniques
 var laTable=["pomme","banane","orange","pomme","banane","pomme"];
 console.println("laTable : "+laTable);
 function lesDoublonsUniques(uneTable){
 var newArr=[];
 for (var i=0; i<uneTable.length; i++) {
 if (newArr.indexOf(uneTable)===-1 && uneTable.indexOf(uneTable)!==i) newArr.push(uneTable);
 }
 return newArr;
 }
 console.println("Tous les doublons : "+lesDoublonsUniques(laTable));
 // Retour : Tous les doublons : pomme,banane// Suppression des doublons et tri
 var laTable=["pomme","banane","orange","pomme","banane","pomme"];
 console.println("laTable : "+laTable);
 function triSansDoublons(uneTable) {
 return uneTable.sort().filter(function(valeur,indice,cetteTable) {
 return !indice || valeur!=cetteTable[indice-1];
 });
 }
 console.println("laTable sans doublons mais triée : "+triSansDoublons(laTable));
 // Retour : laTable sans doublons mais triée : banane,orange,pomme@+ 
 😎 bebarthMaître des clés bebarthMaître des clésbonjour, 
 Voici ce que j’ai fait aujourd’hui. J’espère que cela te convient. Pour cacher les fichiers attaché on pourrait faire une tempo toutes les secondes par exemple, mais ça veut dire que le fichier est perpétuellement en calcul !Voici tous les scripts que j’ai utilisé. Si tu es débutant ça va peut-être un peu compliqué pour toi à comprendre : Il y a des scripts de document, des fonctions, une page modèle… // Script de document
 //
 var nbDepart=0;
 for (var i=0; i<this.numFields; i++) {
 if (/^Départ\.\d+/.test(this.getNthFieldName(i))) nbDepart++;
 }
 var fichier=this.getDataObjectContents("Départ.csv");
 var donnees=util.stringFromStream(fichier);
 var lignes=donnees.split("\r\n");
 var colonnes=new Array();
 for (var i=0 ; i<lignes.length ; i++) colonnes=lignes.split(";");
 var colonne0=[];
 for (var j=0 ; j<colonnes.length ; j++) {
 if (colonnes[j][0]) colonne0.push([colonnes[j][0]]);
 }
 for (var i=1; i<=colonne0.length; i++) {
 eval("var colonne"+(i+1)+"=[];");
 for (var j=0 ; j<colonnes.length ; j++) {
 if (colonnes[j]) eval("colonne"+(i+1)).push(colonnes[j]);
 }
 }
 colonne0[0].push(0);
 for (var i=1; i<colonne0.length; i++) {
 colonne0.push(eval("colonne"+(i+1)))
 }
 // Fichier "Départ Arrivée.csv"
 var fichierDA=this.getDataObjectContents("Départ Arrivée.csv");
 var donneesDA=util.stringFromStream(fichierDA);
 var lignesDA=donneesDA.split("\r\n");
 var colonnesDA=new Array();
 for (var i=0 ; i<lignesDA.length ; i++) colonnesDA=lignesDA.split(";");
 for (var i=1; i<=colonnesDA[0].length; i++) {
 eval("var colonne"+(i+1)+"DA=[\"- Sélectionnez -\"];");
 for (var j=1 ; j<colonnesDA.length ; j++) {
 if (colonnesDA[j]) eval("colonne"+(i+1)+"DA").push(colonnesDA[j]);
 }
 }
 //
 var leCanal=this.getField("Canal").value;
 this.getField("Canal").clearItems();
 this.getField("Canal").setItems(colonne0);
 this.getField("Canal").value=leCanal;
 //
 function menuCanal(laValeur) {
 try {
 for (var i=0; i<nbDepart; i++) {
 this.getField("Départ."+i).clearItems();
 this.getField("Arrivée."+i).clearItems();
 }
 if (laValeur!=0) {
 var leMenu=laValeur.split(",");
 var ind=leMenu[0].substr("Canal ".length);
 leMenu[0]=["- Sélectionnez -",0];
 for (var i=1; i<leMenu.length; i++) {
 leMenu=[leMenu,eval("colonne"+(i+1)+"DA")];
 }
 for (var i=0; i<nbDepart; i++) {
 this.getField("Départ."+i).clearItems();
 this.getField("Départ."+i).setItems(leMenu);
 }
 }
 } catch(e) {}
 }
 //
 function menuDepart(ind,laValeur) {
 this.getField("Arrivée."+ind).clearItems();
 this.getField("Arrivée."+ind).setItems(laValeur.split(","));
 }
 function menuArrivee(leChamp) {
 try {
 var ind=leChamp.name.substring(leChamp.name.indexOf(".")+1);
 var laTable=this.getField("Départ."+ind).value.split(",");
 for (var i=0; i<nbDepart; i++) {
 if (i==ind) continue;
 for (j=0; j<leChamp.numItems; j++) {
 if (this.getField("Départ."+i).getItemAt(this.getField("Départ."+i).currentValueIndices,false)==this.getField("Départ."+ind).getItemAt(this.getField("Départ."+ind).currentValueIndices,false) && this.getField("Arrivée."+i).value==laTable[j]) laTable.splice(j,1);
 }
 }
 var lArrivee=leChamp.value;
 leChamp.clearItems();
 leChamp.setItems(laTable);
 leChamp.value=lArrivee;
 } catch(e) {}
 }// Script de touches personnalisé Menu "Canal"
 if (!event.willCommit) menuCanal(event.changeEx);// Script de touches personnalisé Menu "Départ"
 if (!event.willCommit) menuDepart(event.target.name.substring(event.target.name.indexOf(".")+1),event.changeEx);// Ajout Script de touches personnalisé de tous les Menus "Départ"
 for (var i=0; i<30; i++) {
 this.getField("Départ."+i).setAction("Keystroke","if (!event.willCommit) menuDepart(event.target.name.substring(event.target.name.indexOf(\".\")+1),event.changeEx);");
 }// Souris entrée de tous les Menus "Arrivée"
 menuArrivee(event.target);// Ajout Script Souris entrée de tous les Menus "Arrivée"
 for (var i=0; i<30; i++) {
 this.getField("Arrivée."+i).setAction("MouseEnter","menuArrivee(event.target);");
 }// Script d'ouverture de page
 if (app.viewerType!="Exchange-Pro") this.viewState={overViewMode:2};
 this.viewState={overViewMode:5}// Script Affichage Page 2
 var modeles=this.templates;
 for (i=0; i<modeles.length; i++) {
 if (modeles.name=="page2") {
 modeles.hidden=(event.target.value=="Off");
 break;
 }
 }
 this.pageNum=0;@+ 
 😎Attachments:You must be logged in to view attached files. bebarthMaître des clés bebarthMaître des clésOn peut pas dupliquer le même choix de la liste déroulante (Départ) ou bien (Arrivée) de la page 1 sur les autre listes déroulante de la page 2. C’est-à-dire, si on sélectionne un choix (Départ et Arrivée) sur la page 1 pdf , les autres listes déroulantes de page 2 sera vide, afin qu’on aura la possibilité de sélectionner un autre choix diffèrent sur chaque liste déroulante (Départ et Arrivée) page2. Ça demande réflexion… une chose est sûre c’est que ce n’est pas simple et que les différents noms de champs ne peuvent pas être identiques à ceux de la page 1. Je regarderai ça jeudi. (page 2 c’est une page supplémentaire, c’est pour cela que je voudrais que cette page soit masquer et elle sera afficher si besoin via case à cocher non imprimable). Pages 2 et 3 donc ! Ça ne devrait pas être compliqué, dès que le problème précédent sera résolu. D’autre question s’ils vous plait, serait-il possible masquer les pièces jointes (excel.csv) pour que les autres utilisateurs de ce fichier pdf ne pourront pas accéder au pièces jointes, et ils n’auront donc pas la possibilité de les modifier? Ça c’est une bonne question dont je n’ai pas encore la réponse. On pourra peut-être caché ce panneau pour les utilisateurs de Reader, par exemple… Faut essayer. 
 
 @Merlin : Tu as une idée ???@+ 
 😎 bebarthMaître des clés bebarthMaître des clésbonjour, 
 Voici déjà un fichier pour la première partie. Les données doivent être en pièces jointes du fichier .pdf au format .csv. Il n’est donc pas possible d’avoir des onglets et il faut donc joindre 2 fichiers séparés.
 Et les scripts utilisés dans ce fichier :
 // Script de document
 //
 var fichier=this.getDataObjectContents("Départ.csv");
 var donnees=util.stringFromStream(fichier);
 var lignes=donnees.split("\r\n");
 var colonnes=new Array();
 for (var i=0 ; i<lignes.length ; i++) colonnes=lignes.split(";");
 var colonne0=[];
 for (var j=0 ; j<colonnes.length ; j++) {
 if (colonnes[j][0]) colonne0.push([colonnes[j][0]]);
 }
 for (var i=1; i<=colonne0.length; i++) {
 eval("var colonne"+(i+1)+"=[];");
 for (var j=0 ; j<colonnes.length ; j++) {
 if (colonnes[j]) eval("colonne"+(i+1)).push(colonnes[j]);
 }
 }
 colonne0[0].push(0);
 for (var i=1; i<colonne0.length; i++) {
 colonne0.push(eval("colonne"+(i+1)))
 }
 //
 var fichier1=this.getDataObjectContents("Départ Arrivée.csv");
 var donnees1=util.stringFromStream(fichier1);
 var lignes1=donnees1.split("\r\n");
 var colonnes1=new Array();
 for (var i=0 ; i<lignes1.length ; i++) colonnes1=lignes1.split(";");
 for (var i=1; i<=colonnes1[0].length; i++) {
 eval("var colonne"+(i+1)+"1=[\"- Sélectionnez -\"];");
 for (var j=1 ; j<colonnes1.length ; j++) {
 if (colonnes1[j]) eval("colonne"+(i+1)+"1").push(colonnes1[j]);
 }
 }
 //
 var leCanal=this.getField("Canal").value;
 this.getField("Canal").clearItems();
 this.getField("Canal").setItems(colonne0);
 this.getField("Canal").value=leCanal;// Script de touches personnalisé Menu "Canal"
 if (!event.willCommit) {
 this.getField("Départ").clearItems();
 this.getField("Arrivée").clearItems();
 if (event.changeEx!=0) {
 var leMenu=event.changeEx.split(",");
 var ind=leMenu[0].substr("Canal ".length);
 leMenu[0]=["- Sélectionnez -",0];
 for (var i=1; i<leMenu.length; i++) {
 leMenu=[leMenu,eval("colonne"+(i+1)+"1")];
 }
 this.getField("Départ").clearItems();
 this.getField("Départ").setItems(leMenu);
 }
 }// Script de touches personnalisé Menu "Départ"
 if (!event.willCommit) {
 this.getField("Arrivée").clearItems();
 if (event.changeEx!=0) {
 this.getField("Arrivée").clearItems();
 this.getField("Arrivée").setItems(event.changeEx.split(","));
 }
 }Le reste des listes déroulantes de la page 2 du PDF seront alimentées séparément quand on sélectionnera un choix, et non pas toutes à la fois avec le même choix. Et serait-il possible que la deuxième page PDF soit masquée au besoin via une case à cocher non imprimable ? Pour ça il me faudra quelques explications car je n’ai pas compris… @+ 
 😎Attachments:You must be logged in to view attached files. bebarthMaître des clés bebarthMaître des clésJe regarde ça dès que possible. @+ 
 😎 bebarthMaître des clés bebarthMaître des clésbonjour, 
 Moi je veux bien aider, mais il faudrait m’expliquer car je n’ai rien compris à ce que tu voulais faire…@+ 
 😎 bebarthMaître des clés bebarthMaître des clésbonjour, 
 Comme indiqué précédemment, il faut utiliser « valueAsString » pour ces 2 fonctions :
 function CorrQuest(ind) {
 var q=this.getField("Q."+ind);
 var r=this.getField("R."+ind);
 if (event.target.value!="Off") {
 var f=this.addField("tempo."+ind, r.type, q.page, q.rect);
 for (var j in f) {
 try {
 if (typeof f[j]!="function" && j!="name" && j!="type" && j!="page" && j!="rect") f[j]=r[j];
 } catch(e) {}
 }
 f.value=r.valueAsString.split("|")[0];
 f.textSize=q.textSize;
 q.display=display.hidden;
 } else {
 this.removeField("tempo."+ind);
 q.display=display.visible;
 q.readonly=false;
 }
 }
 et
 function corriger(ind) {
 var a = this.getField("cAc."+ind+"."+0).value;
 console.println("indice : " +ind);
 var nCompt = 0;
 for (var i = 0 ; i < this.numFields ; i++) {
 var oChamp = this.getField(this.getNthFieldName(i));
 if ((oChamp.type == "checkbox") && (/cAc./.test(oChamp.name))) {nCompt = nCompt + 1;}
 }
 var nbChamps=0;
 for (var i=0; i<this.numFields; i++) {
 if (this.getNthFieldName(i).indexOf("R."+ind+".")==0) nbChamps++;
 }
 for (b=1 ; b<=nbChamps ; b++) {
 var q=this.getField("Q."+ind+"."+b);
 var r=this.getField("R."+ind+"."+b);
 if (a!="Off") {
 var f=this.addField("tempo."+ind+"."+b, r.type, q.page, q.rect);
 for (var j in f) {
 try {
 if (typeof f[j]!="function" && j!="name" && j!="type" && j!="page" && j!="rect") f[j]=r[j];
 } catch(e) {}
 }
 f.value=r.valueAsString.split("|")[0];
 f.textSize=q.textSize;
 q.display=display.hidden;
 this.getField("cAc."+ind+"."+b).value = 1;
 } else {
 this.removeField("tempo."+ind);
 q.display=display.visible;
 q.readonly=false;
 this.getField("cAc."+ind+"."+b).value = "Off";
 }
 }
 }@+ 
 😎Attachments:You must be logged in to view attached files. bebarthMaître des clés bebarthMaître des clésbonjour, Par contre si je sélectionne les 3 premières cases par exemple (cAc.3.1 à c.A.c.3.3), là tout va bien mais quand je décoche l’une de ces cases (par exemple c.A.c.3.2), alors les 2 champs Q.3.1 et Q.3.3 restent masqués alors que je voudrais qu’ils redeviennent visibles. Lorsque tu supprimes le champ, il faut ajouter l’indice au nom du champ : this.removeField("tempo."+ind);L’autre truc que je n’arrive pas à faire, c’est la mise en place de la case : “Case.3” permettant de cocher ou décocher d’un seul coup toutes les cases c.A.c….. Les « + » sont mal placés. Il faut écrire : ...this.getField("cAc."+ind+"."+b).value = "Off";...et...this.getField("cAc."+ind+"."+b).value =1;...Par contre cela coche ou décoche juste les cases mais n’affiche ou ne cache pas les réponses comme lorsque l’on coche les cases individuellement. pour cela il faudrait mettre cela en fonction puis faire une boucle pour rappeler ces fonctions.Je regarderai lundi si tu n’y arrives pas ! @+ 
 😎 bebarthMaître des clés bebarthMaître des clésbonjour, dans le cas ou plusieurs réponses sont acceptées (dans le champ R.a.b avec le séparateur | entre chaque réponse acceptable), j’aimerais que dans ce cas précis, seule la chaine de caractère se trouvant avant le 1er séparateur s’affiche. Il faut rajouter cette ligne : f.value=r.value.split("|")[0];J’aimerais également que la taille de la police du champ R.a.b soit remplacée par celle du champ Q.a.b lorsque la case est cochée. Et celle-ci : f.textSize=q.textSize;Ci-joint un nouveau fichier. @+ 
 😎Attachments:You must be logged in to view attached files. bebarthMaître des clés bebarthMaître des clésJe me suis posé la question à savoir s’il n’y avait qu’une seule ou plusieurs cases à cocher. En fait, cela dépend de ce que tu veux faire exactement. Si il y a une case par question, il faut rajouter l’indice au nom du champ « tempo » créé (ex. : tempo.2.16 pour mon fichier). @+ 
 😎 bebarthMaître des clés bebarthMaître des clésbonjour, 
 Pour ma proposition je crée un champ temporaire identique au champ réponse à la position du champ question que je supprime lorsque la case est décochée. Le script de cet exemple pour la question/réponse 2.16 est :
 var ind=event.target.name.substring(event.target.name.indexOf(".")+1);
 var q=this.getField("Q."+ind);
 var r=this.getField("R."+ind);
 if (event.target.value!="Off") {
 var f=this.addField("tempo", r.type, q.page, q.rect);
 for (var j in f) {
 try {
 if (typeof f[j]!="function" && j!="name" && j!="type" && j!="page" && j!="rect") f[j]=r[j];
 } catch(e) {}
 }
 q.display=display.hidden;
 r.display=display.hidden;
 } else {
 this.removeField("tempo");
 q.display=display.visible;
 r.display=display.visible;
 }Juste une remarque au sujet du cartouche représenté : ne manque-t-il pas le symbole de disposition des vues (représenté par un cône et sa vue de gauche – à droite pour l’ISO) ? Indispensable pour la lecture des plans mécaniques… @+ 
 😎Attachments:You must be logged in to view attached files. bebarthMaître des clés bebarthMaître des clésIl faut utiliser « valueAsString » au lieu de « value ». « replace » fonctionne avec une chaîne de caractères mais pas avec un nombre. 123 est un nombre alors que 123|124 est une chaîne de caractères. « valueAsString » transforme le nombre en chaîne de caractères ! @+ 
 😎 bebarthMaître des clés bebarthMaître des clésJ’ai fait ça de tête pour l’explication de la déclaration des variables… C’est même un peu plus complexe mais il faudrait que je reprenne mes notes pour expliquer plus en détail ! Par contre je ne sais pas si ce qu’est valable pour Acrobat l’est également pour ton logiciel. J’espère que oui ! @+ 
 😎 bebarthMaître des clés bebarthMaître des clésC’est étrange !!! 
 En fait, la façon de déclarer les variables définie le « niveau de portée » des variables.- Une variable déclarée par « var » (var x= »toto ») à une portée limitée à l’environnement ou est déclarée cette variable : une fenêtre de document, une boite de dialogue,…
- Si il n’y a rien pour la déclarer (x= »toto »), sa portée est limitée à toutes les fenêtres ou boites de dialogue utilisées lors de l’exécution du script.
- Si elle est déclarée de façon globale (global.x= »toto »), sa portée est l’environnement total d’Acrobat. On peut fermer un fichier et en ouvrir un autre, la variable n’est pas perdue tant qu’on ne quitte pas Acrobat.
 C’est pour cela que dans cet exemple, les variables qui seront utilisées lorsque la boite de dialogue est fermée doivent être déclarée sans « var ». D’où “le champ « undefined » n’existe pas”. Dans le script que j’ai écris, je ne pensais pas l’utiliser depuis un bouton. Je l’ai testé directement depuis la console et il fonctionne bien. Par contre, depuis un bouton il faut retirer les privilèges et trustedFunction qui ne fonctionnent pas à ce niveau. 
 J’ai également modifié légèrement les lignes pour le repositionnement du champ qui ne fonctionnait pas bien avec ton document (pourquoi ???).Ci-joint un nouveau fichier qui fonctionne chez moi. Dis-moi si c’est OK pour toi. @+ 
 😎- 
		Cette réponse a été modifiée le il y a 1 année et 4 mois par  bebarth. bebarth.
 Attachments:You must be logged in to view attached files. bebarthMaître des clés bebarthMaître des clésbonjour, 
 Voici le script pour centrer un champ horizontalement en milieu de page.nbChamps=this.numFields;
 if (nbChamps) {
 var leChamp="- Liste des champs -";
 var listeChamps="var listeChamps \= \{\""+leChamp+"\": "+(nbChamps+1)+",";
 for (var i=0; i < nbChamps; i++) {
 var nomChamp=this.getNthFieldName(i);
 if (typeof this.getField(nomChamp).page!="object") {
 listeChamps+="\""+nomChamp+"\": "+(-1*(i+1)).toString()+",";
 } else {
 for (var j=0; j<this.getField(nomChamp).page.length; j++) listeChamps+="\""+nomChamp+"."+j+"\": "+(-1*(i+1)).toString()+",";
 }
 }
 var listeChamps=listeChamps.substring(0, listeChamps.length-1);
 listeChamps+="\}";
 eval(listeChamps);
 var bDialogue={
 initialize: function(bDialogue) {
 this.loadDefaults(bDialogue);
 },
 loadDefaults: function(bDialogue) {
 bDialogue.load({
 LCha: listeChamps,
 })
 },
 validate: app.trustedFunction(function(bDialogue) {
 app.beginPriv();
 var oRslt=bDialogue.store();
 var elements=bDialogue.store()["LCha"];
 var testOK=true;
 for (var i in elements) {
 if (elements>0) {
 valeurListe=listeChamps;
 nomListe=i;
 }
 }
 if (valeurListe>0 && (oRslt["nmCh"]=="" || (/^\s+|\s+$/gm).test(oRslt["nmCh"]))) {
 var txt="Veuillez sélectionner ou indiquer un nom de champ.";
 var testOK=false;
 } else {
 if (valeurListe>0) nmChamp=oRslt["nmCh"];
 else nmChamp=nomListe;
 try {
 laPage=getField(nmChamp).page;
 } catch(e) {
 var txt="Le champ \""+nmChamp+"\" n'existe pas.";
 var testOK=false;
 }
 }
 if (!testOK) app.alert(txt,3);
 return testOK;
 app.endPriv();
 }),
 description: {
 name: "Centrer un champ",
 elements: [
 {
 type: "view",
 elements: [
 {
 type: "view",
 alignment: "align_fill",
 elements: [
 {
 type: "static_text",
 name: "Nom du champ",
 font: "dialog",
 bold: true,
 },
 {
 type: "static_text",
 name: "Sélectionnez...",
 },
 {
 type: "popup",
 item_id: "LCha",
 width: 150,
 alignment: "align_fill",
 },
 {
 type: "static_text",
 name: "ou indiquez son nom :",
 },
 {
 type: "edit_text",
 item_id: "nmCh",
 height: 20,
 alignment: "align_fill",
 },
 ]
 },
 {
 type: "gap",
 height: 5
 },
 {
 type: "ok_cancel",
 },
 ]
 },
 ]
 }
 };
 if("ok"==app.execDialog(bDialogue)){
 var aRect=this.getField(nmChamp).rect;
 aRect[0]=(this.getPageBox()[2]/2)-(aRect[2]/2);
 aRect[2]=(this.getPageBox()[2]/2)+(aRect[2]/2);
 this.getField(nmChamp).rect=aRect;
 }
 } else app.alert("Il n'y a pas de champ dans ce document.",3);@+ 
 😎 bebarthMaître des clés bebarthMaître des clésbonjour, 
 C’est possible, mais pour ma part la réponse sera lundi…
 On pourra même faire un menu déroulant avec la liste de tous les champs !@+ 
 😎 bebarthMaître des clés bebarthMaître des clésC’est étrange car le caractère | (ou) est utilisé dans les expressions régulières, et ça fonctionne chez moi… Remarque, si tu es certain de ne pas utiliser ce caractère dans tes réponses il ne sera pas nécessaire ! @+ 
 😎 bebarthMaître des clés bebarthMaître des clésbonjour, 
 Après avoir jeté un coup d’œil sur le script, je ne trouvais pas !!!
 Puis, je me suis aperçu que si on mettait des valeurs simples dans les champs ça fonctionnait et que tous les champs qui ne fonctionnaient pas contenaient des parenthèses… Eurêka !!!Lorsqu’on crée l’expression régulière, il faut échapper certains caractères pour qu’ils soient interprétés correctement, donc : 
 var RegExTest=new RegExp("^"+this.getField("R."+n+"."+a).value.replace(/[.*+?^${}()|/\[\]\\]/g,"\\$&")+"$");@+ 
 😎PS : Le fichier ne passe pas, je te laisse donc faire la modification… - 
		Cette réponse a été modifiée le il y a 1 année et 5 mois par  bebarth. bebarth.
  bebarthMaître des clés bebarthMaître des clésbonjour, 
 Il faut écrire une expression régulière :
 var lesMots=this.getField("R."+n+"."+a).value.replace(/###/g,"|");
 var RegExTest=new RegExp("^"+lesMots+"$");
 if (RegExTest.test(this.getField("Q."+n+"."+a).value))...Et si tu sépares tes mots par une barre verticale « | » (clé|clef) tu peux directement écrire : 
 var RegExTest=new RegExp("^"+this.getField("R."+n+"."+a).value+"$");
 if (RegExTest.test(this.getField("Q."+n+"."+a).value))...@+ 
 😎 bebarthMaître des clés bebarthMaître des clésbonjour, 
 Le fichier que j’ai partagé n’est qu’un exemple à partir de ton fichier pour montrer qu’on peut insérer des pages n’importe où dans le document et non uniquement au début ou à la fin.
 Pour que l’on puisse afficher/supprimer des pages avec Reader, ces pages doivent être des pages modèle. Il faut donc indiquer les pages que tu veux cacher comme « Page Modèle » et modifier le script de sorte qu’elles soient cachées après sélection des menu déroulants !@+ 
 😎Attachments:You must be logged in to view attached files. bebarthMaître des clés bebarthMaître des clésOTAN pour moi, je viens de vérifier et j’ai barré ce qui ne fonctionne pas ci-dessus. D’où l’intérêt de toujours vérifier avant de poster …et de vérifier correctement !!! La dernière fois avec l’exemple en GREP, j’avais bien testé avec un point, mais comme un point signifie n’importe quel caractère ça fonctionnait forcément ! @+ 
 😎 bebarthMaître des clés bebarthMaître des clésMalgré tout je me force à m’en servir afin de mieux pouvoir la dompter le jour ou elle sera imposée par Adobe. (à regret) C’est ce que je me suis dit un moment, puis je suis repassé à l’ancienne interface… @+ 
 😎 bebarthMaître des clés bebarthMaître des clésbonjour, 
 Effectivement si tu veux traiter tous les champs il n’y a pas besoin de mettre de condition sur la recherche du nom de champ !@+ 
 😎 bebarthMaître des clés bebarthMaître des clésJ’ai lu en diagonale vite fait les scripts, et il y a quelque chose qui m’interpelle et que je ne comprends d’ailleurs pas pourquoi il n’y a pas d’erreur retournée. 
 Lorsque tu écris :
 ...
 if (nomChamp.indexOf("Q.")==0) {
 this.getField("Q.").readonly=false;
 ...
 La première ligne signifie « si le nom du champ commence par Q. » (Q suivi d’un point quel que soit un indice à la suite). Si on avait voulu uniquement « Q. » on aurait écritif (nomChamp=="Q.")et on n’aurait pas eu besoin de mettre cette ligne dans une boucle.La deuxième ligne devrait être this.getField(nomChamp).readonly=false;car il n’y a pas de champ qui se nomme uniquement « Q. » !
 Ça peut également fonctionner avecthis.getField("Q").readonly=false;(sans le point) pour exécuter le script sur l’ensemble des champs « Q » avec un indice.Et ce, plusieurs fois dans tous les scripts, et idem pour les champs qui commencent par « R. » @+ 
 😎Attachments:You must be logged in to view attached files. bebarthMaître des clés bebarthMaître des clésEn GREP le point tout seul signifie “n’importe quel caractère”, il faut donc l’échapper avec un antislash si on veut détecter le point. Oups !!! J’ai modifié le post. @+ 
 😎 bebarthMaître des clés bebarthMaître des clésJ’avais compris qu’il fallait trouver l’indice n maxi qui n’est pas forcément le nombre d’indices… ni 1 le numéro mini d’ailleurs ! @+ 
 😎 bebarthMaître des clés bebarthMaître des clésBonjour, 
 Je dirais même plus …/Verifier\./.test(oChamp.name)… avec le point (échappé à l’aide d’une barre oblique inversée ou backslash) pour être certain que le nom n’est que « Verifier » !Lorsqu’on veut vérifier les indices et que l’on compte le nombre de champs il faut être certain qu’ils sont tous consécutif. 
 Je dis ça car je me suis déjà fait avoir plusieurs fois pensant qu’ils l’étaient et qu’au final ils ne l’étaient pas.
 Dans ce cas il faut mettre tous les indices dans une table puis les trier car ils ne sont pas forcément ajoutés dans la table dans le bon ordre…@+ 
 😎- 
		Cette réponse a été modifiée le il y a 1 année et 5 mois par  bebarth. bebarth.
  bebarthMaître des clés bebarthMaître des clésbonjour, 
 « color » est un objet, donc il faut écrire :
 ...
 this.getField("Q."+n+"."+a).fillColor=eval("color."+colorErr);
 ...pour que la valeur d’exportation du menu déroulant associée à « color » soit interprétée correctement. @+ 
 😎 bebarthMaître des clés bebarthMaître des clésPour récupérer a & b tu fais comme précédemment ! 
 var nomChamp="Question.12.25";
 var n1=nomChamp.indexOf(".");
 var n2=nomChamp.lastIndexOf(".");
 var a=Number(nomChamp.substring(n1+1,n2));
 var b=Number(nomChamp.substring(n2+1));
 console.println("a : "+a);
 console.println("b : "+b);@+ 
 😎 bebarthMaître des clés bebarthMaître des clésMeni.5 est une case à cocher, if faut donc la mettre = « Off » et non =0. 
 … et ça fonctionne avec PDF XChange editor !Tu peux sortir l’initialisation des champs « Erreurs » et « Menu.5 » de la boucle. Ça ne sert pas à grand chose que ces champs soient initialisés X fois… @+ 
 😎- 
		Cette réponse a été modifiée le il y a 1 année et 5 mois par  bebarth. bebarth.
 Attachments:You must be logged in to view attached files. bebarthMaître des clés bebarthMaître des clésPeut-être une commande JavaScript qui ne fonctionne pas avec PDF XChange editor ! 
 Il faut les tester une à une…@+ 
 😎 bebarthMaître des clés bebarthMaître des clésbonjour, 
 J’ai peut-être pas bien compris, mais ça a l’air de fonctionner…@+ 
 😎Attachments:You must be logged in to view attached files. bebarthMaître des clés bebarthMaître des clésque tous les champs “R.” soient cachés if (nomChamp.indexOf("R.")==0) {this.getField(nomChamp).display=display.hidden;}que la couleur de fond de tous les champs “Q.” soit transparent if (nomChamp.indexOf("Q.")==0) {this.getField(nomChamp).fillColor=color.transparent;}que tous les autres champs et boutons dont le 1er indice est supérieur à 1 soient cachés aussi Il faut capturer le nombre entre le premier et deuxième point avec indexOf et si c’est un chiffre ou nombre supérieur à 1, var n1=nomChamp.indexOf(".");
 var n2=nomChamp.lastIndexOf(".");
 if (Number(nomChamp.substring(n1+1,n2))>1) {this.getField(nomChamp).display=display.hidden;}Essaye ça et tu mes dis ! @+ 
 😎 bebarthMaître des clés bebarthMaître des clésbonjour, 
 Pour vérifier qu’une chaine de caractères commence par une autre chaine de caractères, personnellement j’utilise indexOf==0 :
 if (nomChamp.indexOf("Menu")==0)...
 Avant j’utilisais startsWith() mais il me semble me rappeler avoir eu des soucis (existe aussi avec endsWith()) :
 if (nomChamp.startsWith("Menu")...
 https://www.w3schools.com/jsref/jsref_startswith.aspSi tu souhaites supprimer tous les commentaires, ce n’est pas la peine de vérifier tous les types. 
 Tu peux simplement écrire :
 var annots=this.getAnnots();
 if (annots) for (var j=0; j<annots.length; j++) annots[j].destroy();@+ 
 😎 bebarthMaître des clés bebarthMaître des clésbonjour, 
 Pour « default », essaye ça :
 for (var i=0; i<this.numFields; i++) {
 var nomChamp=this.getNthFieldName(i);
 if (nomChamp.indexOf("Q.")==0) {
 if (this.getField(nomChamp).type=="text") this.getField(nomChamp).defaultValue="";
 else this.getField(nomChamp).value=this.getField(nomChamp).getItemAt(0,false);
 }
 }
 et pour « EditReps » :
 for (var i=0; i<this.numFields; i++) {
 var nomChamp=this.getNthFieldName(i);
 if (this.getField("Menu.5").value!="Off") {
 if (nomChamp.indexOf("Q.")!=0) this.getField(nomChamp).readonly=false;
 } else {
 this.getField(nomChamp).readonly=true;
 }
 }Mais là, même ton bouton sera en lecture seule !!! Il faudra l’exclure si tu ne veux pas. 
 Tu me dis…@+ 
 😎 bebarthMaître des clés bebarthMaître des clésbonjour, Comment pourrais-je faire pour supprimer les pages process B, C et D si l’utilisateur sélectionne process A. Ou supprimer les pages Process A, C et D s’il sélectionne le process B? Par supprimer je veux dire qu’il n’aura pas la visibilité sur ces pages car ça ne le concerne pas. C’est bien se qui se passe dans le document que j’ai partagé, non ! Comment faire apparaître des pages formulaires à la sélection du process et non des pages avec seulement un titre. Par exemple, pourrais-je ajouter au document toutes les pages formulaires liées à tous les process (document global). Depuis la sélection du process, le document filtre et n’affiche que les pages en lien avec la sélection initiale. Moi je dirai de la même façon que les autres pages, avec des pages modèles… mais je ne suis pas certain d’avoir bien compris ! @+ 
 😎 bebarthMaître des clés bebarthMaître des clés bebarthMaître des clés bebarthMaître des clésbonjour, 
 Ci-joint le fichier qui devrait répondre à ton attente, et ci-dessous les scripts utilisés :// Script de document
 var listesFilles= {
 "Product 1": [["- Please Choose -",0],"Process A1", "Process B1", "Process C1", "Process D1"],
 "Product 2": [["- Please Choose -",0],"Process A2", "Process B2", "Process C2", "Process D2"],
 "Product 3": [["- Please Choose -",0],"Process A3", "Process B3", "Process C3", "Process D3"],
 "Product 4": [["- Please Choose -",0],"Process A4", "Process B4", "Process C4", "Process D4"],
 };
 var nbPages=4; // Nombre de pages sans les modèles
 var apresPage=2; // No de page après laquelle insérer les modèles
 function suppression() {
 if (this.numPages>nbPages) {
 this.deletePages({
 nStart: apresPage,
 nEnd: this.numPages-apresPage-1
 });
 }
 }// Script de touches personnalisé Product Type
 if (!event.willCommit) {
 suppression();
 if (event.changeEx!=0) this.getField("ProcessType").setItems(listesFilles[event.changeEx]);
 else this.getField("ProcessType").clearItems();
 }// Script de touches personnalisé Process Type
 if (!event.willCommit) {
 suppression();
 if (event.changeEx!=0) {
 var pagesModeles=this.templates;
 for (var j=pagesModeles.length-1; j>=0; j--) {
 if (pagesModeles[j].name.indexOf(event.changeEx)==0) pagesModeles[j].spawn(apresPage, true, false);
 }
 }
 }Est-ce que cela te convient ? N’hésite pas à demander pour des explications. @+ 
 😎PS : Changement de variable de i en j car il y a un problème d’affichage lorsque le i est entre crochets… - 
		Cette réponse a été modifiée le il y a 1 année et 6 mois par  bebarth. bebarth.
 Attachments:You must be logged in to view attached files. bebarthMaître des clés bebarthMaître des clésbonsoir, c’est faisable et la complexité dépend des connaissances en JavaScript! Je regarde demain. bonne soirée. @+ 
 😎 bebarthMaître des clés bebarthMaître des clésbonjour, 
 Je viens de commencer à regarder ton fichier.
 Est-ce bien des liste mère/filles ? Est-ce que tous les éléments du menu « Process Type » diffèrent en fonction de chaque élément du menu « Product Type » ? Par exemple, pour « Product 1 » on va avoir un menu « Process Type » avec les éléments « Process A1 », « Process B1″, »Process C1 », etc. et pour « Product 2 » on va avoir un menu « Process Type » avec les éléments « Process A2 », « Process B2″, »Process C2 », etc. et ainsi de suite ?
 Pour chaque sélection, ajoute-t-on une seule ou plusieurs pages ? En fin de document ou dans le milieu ?@+ 
 😎 bebarthMaître des clés bebarthMaître des clésbonjour, 
 Ce serait possible de créer un script, mais manuellement se sera plus rapide.
 Il existe une fonction Acrobat pour créer plusieurs copies. Comme tu en as besoin de 72 sur 3 pages, il faut d’abord les mettre tous sur une seule, puis les répartir.Plus de détails ce soir si tu n’y es pas arrivé… @+ 
 😎Attachments:You must be logged in to view attached files. bebarthMaître des clés bebarthMaître des clésbonjour, 
 De ce que je comprend, il faut combiner une liste mère-fille avec des pages modèles qui ne seront affichées qu’en fonction du choix.
 Je ne sais pas si je pourrai regarder ton fichier cette semaine… mais je fais ça au plus vite ! Désolé si c’est urgent.@+ 
 😎 bebarthMaître des clés bebarthMaître des clésbonsoir, J’ai du formater la date en américain YYYY-MM-JJ pour supprimer les “/” et pour le classement dans l’explorateur. Pour le classement, ce format est beaucoup plus adéquat que le format français… @+ 
 😎 bebarthMaître des clés bebarthMaître des clésbonjour, 
 Tu ajoutes un script à ton bouton « insertimage » :
 this.getField("image").buttonImportIcon();Par contre, ton champ « image » doit être un bouton ou un champ image mais pas un champ texte… @+ Attachments:You must be logged in to view attached files. bebarthMaître des clés bebarthMaître des clésbonjour, 
 …et si cela te convient, voici le script à placer dans le répertoire JavaScipt d’Acrobat. Tu peux nommer ce fichier comme il te convient. Pour mon exemple je l’ai nommé SaveAs_tfx256.js
 SaveAs_tfx256=app.trustedFunction(function(chemin) {
 app.beginPriv();
 this.saveAs({
 cPath: chemin,
 bCopy: true,
 bPromptToOverwrite: true
 });
 app.endPriv();
 })Et voici le script du bouton d’enregistrement. Ici on ne vérifie que les champs ne sont pas vide, mais on peut également vérifier si le champ DATE est bien une date et si les autres champs contiennent bien certains caractères. A noter que si le champ DATE contient des barres obliques « / » il faudra les remplacer ou supprimer pour ne pas perturber le chemin du fichier. 
 if (this.getField("DATE").value!="" && this.getField("NOM").value!="" && this.getField("Prénom").value!="" && this.getField("Lieu").value!="") {
 try {
 SaveAs_tfx256(this.path.substr(0,this.path.lastIndexOf("/")+1)+this.getField("DATE").value+" # "+this.getField("NOM").value+" # "+this.getField("Prénom").value+" # "+this.getField("Lieu").value+".pdf");
 this.resetForm();
 } catch(e) {
 this.getField("leScript").display=display.visible;
 app.alert("Le fichier \"SaveAs_tfx256.js\" n'est pas installé sur cet ordinateur.");
 }
 } else app.alert("Les 4 champs doivent être remplis.",3);
 this.dirty=false;@+ 
 😎Attachments:You must be logged in to view attached files. bebarthMaître des clés bebarthMaître des clésbonjour, 
 Il faudrait voir exactement ton formulaire car de ce que je comprends ce ne sont pas exactement des listes mères-filles vu qu’il n’y a qu’un seul menu déroulant…@+ 
 😎 bebarthMaître des clés bebarthMaître des clésPetite précision, il faut enregistrer ton fichier Excel au format .csv, avec séparateur point-virgule. Voici un exemple avec un menu déroulant. 
 En script de document :
 this.getField("Zone d'alarme").clearItems();
 var p=this.getDataObject(this.dataObjects[0].name);
 var fichier=this.getDataObjectContents(p.name);
 var donnees=util.stringFromStream(fichier);
 var rangees=donnees.split("\r\n");
 var colonnes=new Array();
 for (var i=0 ; ivar cellule=[[« Sélectionnez »,0]]`
 for (var j=1 ; jthis.getField(« Zone d’alarme »).setItems(cellule);`
 Et en script de touches personnalisé du menu déroulant :
 if (!event.willCommit) {
 if (event.changeEx!=0) {
 var lesValeurs=event.changeEx.split(";");
 this.getField("Catégorie").value=lesValeurs[0];
 this.getField("Libellé").value=lesValeurs[1];
 } else {
 this.getField("Catégorie").value="";
 this.getField("Libellé").value="";
 }
 }Pour info, il faut éviter d’indiquer des noms de champs avec des caractères accentués qui peuvent perturber le calcul des scripts. @+ 
 😎- 
		Cette réponse a été modifiée le il y a 1 année et 6 mois par  bebarth. bebarth.
 Attachments:You must be logged in to view attached files. bebarthMaître des clés bebarthMaître des clésbonjour, 
 Pour pouvoir remplir automatiquement certains champs il faut forcément en remplir au moins un…
 Ton champ « Zone d’alarme » est de type « Zone de liste ». Veux-tu le remplir automatiquement avec la liste indiquée dans le champ Excel ? Si il y a 3000 référence ça ne va pas être très pratique d’utilisation. Idem si c’est un menu déroulant…@+ 
 😎 bebarthMaître des clés bebarthMaître des clésbonjour, 
 Écrire un élément d’un menu déroulant sur plusieurs lignes n’est possible qu’avec un script, par exemple :
 this.getField("nomChamp").setItems(["Élément 1\rsur 2 lignes","Élément 2","Élément 3","Élément 4\rsur 2 lignes","Élément 5"]);Tu colles ce script dans la console vide, puis tu sélectionnes tout ce script et touche ENTER du clavier numérique. @+ 
 😎Attachments:You must be logged in to view attached files. bebarthMaître des clés bebarthMaître des clésbonsoir, 
 Voici un script pour calculer la date de fin de projet pour ton document (fichier Essai_calcul_date_sur_masque_BB).
 try {
 var n=event.target.name.indexOf(".");
 var nomChamp=event.target.name.substr(0,n)+".FLECHAGE.103a_DebutTravaux";
 if (this.getField("103c_DureeMois").value!="" && this.getField(nomChamp).value!="") {
 var laDate=this.getField(nomChamp).value;
 var objetDate=util.scand("dd/mm/yyyy",laDate);
 objetDate.setMonth(objetDate.getMonth()+this.getField("103c_DureeMois").value);
 event.value=util.printd("dd/mm/yyyy",objetDate);
 } else event.value="";
 } catch(e) {}Si lorsque que tu génères la page tu indiques de ne pas renommer les champs de la page modèle (si tu n’as besoin de générer qu’une seule page) cela simplifie le script (fichier Essai_calcul_date_sur_masque_BB1). 
 Pour générer la page sans renommer les champs :
 this.getTemplate("FLECHAGE").spawn(this.numPages, false, false);
 Le script réduit :
 if (this.getField("103c_DureeMois").value!="" && this.getField("103a_DebutTravaux").value!="") {
 var laDate=this.getField("103a_DebutTravaux").value;
 var objetDate=util.scand("dd/mm/yyyy",laDate);
 objetDate.setMonth(objetDate.getMonth()+this.getField("103c_DureeMois").value);
 event.value=util.printd("dd/mm/yyyy",objetDate);
 } else event.value="";@+ 
 😎Attachments:You must be logged in to view attached files. bebarthMaître des clés bebarthMaître des clésbonjour, 
 Effectivement, il faut que chaque page soit une page modèle puis qu’elle soit générée depuis Acrobat (Reader), comme dans l’exemple joint.
 Voici le script pour cet exemple.
 var noPage=event.target.name.substr(4);
 var modeles=this.templates;
 if (event.target.value!="Off") {
 for (i=0; i<modeles.length; i++) {
 if (modeles.name==noPage) modeles.spawn(this.numPages,false);
 }
 } else {
 var lesPages=this.getField("Page "+noPage).page;
 this.deletePages(lesPages[1]);
 }
 this.pageNum=0;@+ 
 😎Attachments:You must be logged in to view attached files. bebarthMaître des clés bebarthMaître des clésbonjour, Curieusement il fonctionne pour les champs réponse mais ne fonctionne pas pour les champs question (sans que la console ne renvoie d’erreur). Ça fait un peu juste pour trouver le pourquoi ça ne fonctionne pas ! Pour la numérotation des champs, je trouvais plus simple comme ça plutôt qu’avoir 2 indices en fin de nom de champ OK ! Pour moi i était l’indice du champ et pour modifier tous les champs on ne devait pas mettre le point (par exemple this.getField(« question »).fillColor pour modifier tous les champs de même nom sans indiquer les indices) mais je viens de vérifier et avec le point ça fonctionne également… @+ 
 😎 bebarthMaître des clés bebarthMaître des clésbonjour, 
 Voici une version pour « simplifier » l’écriture du script :
 function CoulQ() {
 switch (this.getField("Menu.3").value) {
 case "Jaune":
 var Coul=color.yellow;
 break;
 case "Vert":
 var Coul=color.green;
 break;
 case "Bleu":
 var Coul=color.blue;
 break;
 case "Rouge":
 var Coul=color.red;
 break;
 default:
 var Coul=color.transparent;
 }
 for (var i=2; i<6; i++) this.getField(i+"question.").fillColor=Coul;
 }Juste une question : dans la boucle finale, la position de la variable « i » me parait étrange ! Ne serait-ce pas plutôt : 
 ... this.getField("question."+i).fillColor ...@+ 
 😎 bebarthMaître des clés bebarthMaître des clésbonjour, Comme ce script ne fonctionne me semble-t-il que sur une page, Le script est effectivement écrit pour fonctionner sur une seule page. On pourrait l’adapter pour une utilisation sur plusieurs pages mais il faut définir avant ce que l’on veut exactement car ça complique un peu… @+ 
 😎 bebarthMaître des clés bebarthMaître des clésbonjour, je ne pourrai regarder que demain… @+ 
 😎 bebarthMaître des clés bebarthMaître des clésbonjour, 
 Tu peux utiliser ce script soit depuis la console ou en utilisant une action.
 Si tu ne l’utilise qu’une ou quelques fois je te conseille la console sinon si tu penses l’utiliser fréquemment, privilégie l’action.
 Et si tu ne sais pas comment ça se passe, tu demandes !@+ 
 😎 bebarthMaître des clés bebarthMaître des clésbonjour, 
 2 façons de faire :for (var i=0; i<this.numFields; i++) {
 if (this.getNthFieldName(i).indexOf("ABC")==0) {
 ...
 }
 }
 ou
 for (var i=0; i<this.numFields; i++) {
 if (/^ABC/.test(this.getNthFieldName(i))) {
 ...
 }
 }@+ 
 😎 bebarthMaître des clés bebarthMaître des clésVoici le script expliqué : var indMax=0;
 for (var i=0; i<this.numFields; i++) { // numFields = Nombre de champs dans le document
 if (this.getNthFieldName(i).indexOf("question.")==0) indMax++; // Si le nom du champ commence par "question." on incrémente indMax
 // this.getNthFieldName(i) = Nom du champ d'indice i
 // indexOf("question.") = Recherche la chaine de caractères "question."
 // si le résultat est -1 la chaine de caractères n'a pas été trouvée
 // sinon indique la position de cette chaine de caractères
 // donc ==0 signifie que le nom du champ commence par "question."
 }
 for (var a=0; a<indMax; a++) { // strictement inférieur car "question." basé sur 0
 ...
 }Tu devrais trouver beaucoup d’explication en consultant : 
 https://opensource.adobe.com/dc-acrobat-sdk-docs/library/jsapiref/JS_API_AcroJS.html
 pour les propriétés ou méthodes, ou en anglais
 https://www.w3schools.com/jsref/default.asp
 ou en français
 https://developer.mozilla.org/fr/docs/Web/JavaScript/Guide/Introduction
 pour le JavaSCript@+ 
 😎 bebarthMaître des clés bebarthMaître des clésbonjour, 
 Voici un script qui compte le nombre de chqmps dont le nom commence par « question. ».
 var indMax=0;
 for (var i=0; i<this.numFields; i++) {
 if (this.getNthFieldName(i).indexOf("question.")==0) indMax++;
 }
 for (var a=0; a<indMax; a++) { // strictement inférieur
 ...
 }Avec ce script il faut que tous les indices soient consécutifs en partant de zéro sinon il faut mettre les noms des champs (ou juste les indices) dans une table et utiliser la longueur de la table en indMax; @+ 
 😎 bebarthMaître des clés bebarthMaître des clésJ’ai écris un utilitaire il y a quelques temps, mais il ne sera pas très utile à Michel car il se place en script d’application et je ne sais pas si et comment ça fonctionne avec son logiciel. Je partage le fichier .txt (à renommer en .js) si ça intéresse quelqu’un. @+ 
 😎Attachments:You must be logged in to view attached files. bebarthMaître des clés bebarthMaître des clésbonjour, 
 https://opensource.adobe.com/dc-acrobat-sdk-docs/library/jsapiref/JS_API_AcroJS.html#id602
 La position d’un champ est définie dans une table de 4 éléments qui indique les positions x et y dans la feuille du point supérieur gauche et du point inférieur droit [x supérieur gauche, y supérieur gauche, x inférieur droit, y inférieur droit].@+ 
 😎 bebarthMaître des clés bebarthMaître des clésVoici ce que je te disais avec la méthode fieldfull. if (event.fieldFull) {
 app.alert("Le champ texte est plein.\rNous allons augmenter sa hauteur pour pouvoir continuer à frapper.");
 var nomChamp=event.target.name;
 this.resetForm([nomChamp]); // Reset field to lose focus
 var aRect=event.target.rect;
 aRect[3]=aRect[3]-event.target.textSize*1.16;
 event.target.rect=aRect;
 event.change=event.changeEx;
 this.getField(nomChamp).setFocus();
 }Par contre : - Je n’arrive pas à re-frapper directement. Il faut re-cliquer dans le champ.
- Impossible de revenir directement à un champ plus petit si on supprime du texte.
 @+ 
 😎- 
		Cette réponse a été modifiée le il y a 1 année et 8 mois par  bebarth. bebarth.
 Attachments:You must be logged in to view attached files. bebarthMaître des clés bebarthMaître des clésbonjour, 
 Voici ce que je t’ai fait ! Les champs ne sont visibles que si la question et la réponse correspondante ne sont pas hors page.
 Ce n’est pas très compliqué. Tu me dis ce que tu ne comprends pas.// Script de document
 var hauteurChamp=7.5;
 var corps=9.5;
 var interligne=corps*1.16;
 var margeBas=0;
 var mm2pt=72/25.4;
 margeBas*=mm2pt;
 function reglage(champ,rect) {
 champ.delay=true;
 champ.rect=rect;
 champ.delay=false;
 }
 function reglageChamps(ind) {
 for (var i=ind; i<10; i++) {
 var f=this.getField("question."+i);
 var fRect=f.rect;
 var haut=fRect[1];
 var ff=this.getField("nbQ."+i);
 var ffRect=ff.rect;
 var g=this.getField("reponse."+i);
 var gRect=g.rect;
 var gg=this.getField("nbR."+i);
 var ggRect=gg.rect;
 if (i==ind) {
 if (event.target.name.indexOf("nbQ")==0) {
 var originale=fRect[3];
 var finale=fRect[1]-hauteurChamp*mm2pt-(Number(event.changeEx)-1)*interligne;
 } else {
 var originale=gRect[3];
 var finale=gRect[1]-hauteurChamp*mm2pt-(Number(event.changeEx)-1)*interligne;
 }
 var delta=originale-finale;
 if (event.target.name.indexOf("nbQ")==0) {
 fRect[3]=finale;
 reglage(f,fRect);
 gRect[1]-=delta;
 ggRect[1]-=delta;
 ggRect[3]-=delta;
 }
 gRect[3]-=delta;
 var bas=gRect[3];
 reglage(g,gRect);
 reglage(gg,ggRect);
 } else {
 fRect[1]-=delta;
 fRect[3]-=delta;
 reglage(f,fRect);
 ffRect[1]-=delta;
 ffRect[3]-=delta;
 reglage(ff,ffRect);
 gRect[1]-=delta;
 gRect[3]-=delta;
 var bas=gRect[3];
 reglage(g,gRect);
 ggRect[1]-=delta;
 ggRect[3]-=delta;
 reglage(gg,ggRect);
 }
 if (haut>=margeBas && bas>=margeBas) {
 f.display=display.visible;
 ff.display=display.visible;
 g.display=display.visible;
 gg.display=display.visible;
 } else {
 f.display=display.hidden;
 ff.display=display.hidden;
 g.display=display.hidden;
 gg.display=display.hidden;
 }
 }
 }// Script de touches personnalisé
 if (!event.willCommit) {
 reglageChamps(event.target.name.substring(event.target.name.lastIndexOf(".")+1));
 }@+ 
 😎Attachments:You must be logged in to view attached files. bebarthMaître des clés bebarthMaître des clés…et si le ou les premiers champs ont beaucoup de lignes, que deviennent les derniers champs qui deviennent hors page ? Il sont supprimés ? Doit-il être possible de revenir en arrière en diminuant le nombre de lignes d’un champ ? @+ 
 😎 bebarthMaître des clés bebarthMaître des clésbonjour, 
 Je ne suis pas dispo aujourd’hui, mais regarde si tu peux faire quelque chose avec la méthode fieldFull.@+ 
 😎 bebarthMaître des clés bebarthMaître des clésC’est le plus simple… @+ 
 😎 bebarthMaître des clés bebarthMaître des clésbonjour & Merci pour tous ces compliments… 
 Quand on est passionné, on fait ça avec plaisir ! Je n’ai qu’un petit regret c’est qu’il n’y a pas plus de problèmes posés sur ce forum car ils sont généralement bien plus intéressants (JavaScriptement parlant :-)) que ceux posés sur le forum Adobe.Oui, je me demandais si ça pouvais marcher à partir d’un bouton en désactivant le code permettant de créer une nouvelle page. Pour cela il faudrait connaitre le nombre de lignes et pour connaitre le nombre de lignes, la seule solution que j’ai trouvé est celle proposée avec ajout/suppression de pages. @+ 
 😎 bebarthMaître des clés bebarthMaître des clésbonjour, // En script d'application (extension du fichier .js)
 if (app.formsVersion>=8) {
 ajoutPage=app.trustedFunction(function(cettePage,largeur,hauteur) {
 app.beginPriv();
 this.newPage(cettePage,largeur,hauteur);
 app.endPriv();
 });
 suppressionPage=app.trustedFunction(function(cettePage) {
 app.beginPriv();
 this.deletePages(cettePage);
 app.endPriv();
 });
 }Comme indiqué, cette partie doit être placée en script d’application dans un fichier .js, mais avec PDF XChange editor je ne sais pas si c’est possible, et si ça l’est je ne sais pas ou il faut placer le fichier. Sans les privilèges, tu ne pourras pas ajouter une page ou la supprimer depuis un script déclenché depuis un bouton ! Tu ne pourras le faire qu’à partir de la console ou d’une action. @+ 
 😎- 
		Cette réponse a été modifiée le il y a 1 année et 9 mois par  bebarth. bebarth.
  bebarthMaître des clés bebarthMaître des clésLorsque tu auras trouvé si on peut placer des scripts d’application, voici un nouveau fichier qui devrait fonctionner avec un bouton. 
 J’ai supprimé le calcul des nombres de paragraphes, mots et caractères et le script est en pièce jointe au fichier au format txt.// En script d'application (extension du fichier .js)
 if (app.formsVersion>=8) {
 ajoutPage=app.trustedFunction(function(cettePage,largeur,hauteur) {
 app.beginPriv();
 this.newPage(cettePage,largeur,hauteur);
 app.endPriv();
 });
 suppressionPage=app.trustedFunction(function(cettePage) {
 app.beginPriv();
 this.deletePages(cettePage);
 app.endPriv();
 });
 }// En script de calcul du bouton
 console.show();
 console.clear();
 // Variables
 var p=this.numPages;
 var g=this.getField("champTexte");
 var gRect=g.rect;
 var hautChamp=gRect[1];
 var basChamp=gRect[3];
 var paragraphes=g.value.split("\r");
 var nbParagraphes=paragraphes.length;
 var toutLeTexte=g.value;
 var nbCaracteres=toutLeTexte.length;
 var texteEntier=g.value;
 var nbLignesTexte=0;
 var nbLignes=0;
 var deltaLignes=0;
 var aRect=this.getPageBox("Crop");
 var laPage=0;
 if (toutLeTexte.length) {
 // Boucle si texte débordant de la page
 while (toutLeTexte.length) {
 // Nouvelle page
 ajoutPage(p, aRect[2], aRect[1]);
 //this.newPage(p, aRect[2], aRect[1]);
 var basMot=hautChamp;
 // Copie du champ
 var f=this.addField("autreChamp", "text", p, g.rect);
 for (var j in g) {
 try {
 if (typeof g[j]!="function" && j!="name" && j!="type" && j!="page" && j!="rect") f[j]=g[j];
 } catch(e) {}
 }
 f.value=toutLeTexte;
 // Aplatissement
 this.flattenPages(p);
 // Nombre de mots
 var nbMots=this.getPageNumWords(p);
 for (var i=0; i<nbMots; i++) {var leMot=this.getPageNthWord(p, i, true);var q=this.getPageNthWordQuads(p, i);m=(new Matrix2D).fromRotated(this,p);mInv=m.invert();r=mInv.transform(q);r=r.toString();r=r.split(",");if (Number(r[5])>basChamp) {
 if (Number(r[5])<basMot) {
 var basMot=Number(r[5]);
 if (!laPage) nbLignesTexte++;
 nbLignes++;
 }
 if (!laPage) {
 if (i==0) {
 var hautTexte=Number(r[1]);
 var premiereLigne=basMot;
 var deltaV=hautChamp-hautTexte;
 }
 if (nbLignes==2 && !deltaLignes) var deltaLignes=premiereLigne-Number(r[5]);
 }
 var toutLeTexte=toutLeTexte.substr(toutLeTexte.indexOf(leMot)+leMot.length)
 var toutLeTexte=toutLeTexte.replace(/[\"\”\*\-\_\,\.\;\:!?\'\(\)\{\}\[\]\«\»]$/, "").replace(/\s+$/, "");
 } else break;
 }
 laPage++;
 suppressionPage(p);
 //this.deletePages(p);
 }
 // Redimensionnement
 var champBas=premiereLigne-(deltaLignes*(nbLignes-1))-deltaV;
 if (champBas<=0) var champBas=0;gRect[3]=champBas;g.rect=gRect;g.value=texteEntier;// Texte Alerte et Consolevar leTexte="Le texte du champ \""+this.getField("champTexte").name+"\" est écrit sur "+nbLignes+" ligne";if (nbLignes>1) leTexte+="s";
 leTexte+=". ";
 if (champBas!=basChamp) leTexte+="\r\rLe champ a été redimensionné.\rIl comportait "+nbLignesTexte+" lignes visibles entièrement.";
 if (champBas<basChamp) {if (champBas>0) leTexte+="\r\rToutes les lignes sont maintenant visibles.";
 else leTexte+="\r\rLe champ n'est pas assez haut pour afficher tout le texte avec ce corps.";
 }
 console.println(leTexte);
 app.alert(leTexte,3);
 console.hide();
 //this.dirty=false;
 } else {
 app.alert("Il faut écrire un texte dans ce champ pour pouvoir le redimensionner !",3);
 }@+ 
 😎- 
		Cette réponse a été modifiée le il y a 1 année et 9 mois par  bebarth. bebarth.
 Attachments:You must be logged in to view attached files. bebarthMaître des clés bebarthMaître des clésJ’ai réussi à faire fonctionner le script via un émulateur PC sur Acrobat et PDF XChange editor. Sur PDF XChange editor l’espace en bas de champ est un peu plus important… Je n’ai pas trouvé où on pouvait placer des scripts d’application ! 
 S’il y a un support client ou un forum tu peux peut-être te renseigner, mais je n’ai pas l’impression que c’est possible ! Idem pour les actions…@+ 
 😎- 
		Cette réponse a été modifiée le il y a 1 année et 9 mois par  bebarth. bebarth.
- 
		Cette réponse a été modifiée le il y a 1 année et 9 mois par  bebarth. bebarth.
 Attachments:You must be logged in to view attached files. bebarthMaître des clés bebarthMaître des clésPar-contre même depuis la Console il n’ajoute pas de page, mais sans retourner de message d’erreur, et le message de résultat précise bien que tout le texte n’est pas affiché. …du coup ça ne fonctionne pas ??? @+ 
 😎 bebarthMaître des clés bebarthMaître des clésJ’ai placé ce script en script de document au départ, dans une fonction que j’ai appelé Redim et que j’appelle via un bouton par la commande Redim(); et ça ne fonctionne pas. Ce n’est pas en script de document mais en script d’Application qu’il faut le placer ! PDF : les différents niveaux d’utilisation des scripts JavaScript Je regarde pour ton logiciel plus tard… @+ 
 😎- 
		Cette réponse a été modifiée le il y a 1 année et 9 mois par  bebarth. bebarth.
  bebarthMaître des clés bebarthMaître des clésbonjour, De mon coté, le script fonctionne depuis la console Ça me réconforte de savoir que ça ne fonctionne pas uniquement chez moi ! mais je n’arrive pas à le faire tourner à partir d’un bouton Comme je l’ai dis précédemment il n’est possible d’exécuter ce script à partir d’un bouton uniquement si le (ou une partie du) script est placé en script d’application. Avec Acrobat il y a un répertoire JavaScript où l’on place ces scripts qui sont exécutés à l’ouverture d’Acrobat. A mon avis, il doit y avoir aussi un répertoire JavaSript pour ton logiciel (lequel est-ce déjà ?). Tu mes dis ! @+ 
 😎 bebarthMaître des clés bebarthMaître des clésEt avec ton texte d’origine qui déborde largement ça retourne ce message d’erreur : NotAllowedError: Security settings prevent access to this property or method. Doc.newPage:35:Field champTexte:Format Voudrais tu donner raison à ma première réponse ? Je ne comprends pas, moi ça fonctionne sur mes 2 Mac ? 
 Je vais essayer de trouver un PC pour essayer le script !@+ 
 😎Attachments:You must be logged in to view attached files. bebarthMaître des clés bebarthMaître des clésbebarth : on ne peut ni lire ni extraire la pièce jointe, c’est un fichier .js ! J’ai changé la pièce jointe en .txt, je joints également le fichier. 
 C’est étrange car avec mes Mac je peux ouvrir les fichiers .js attachés !Est il possible d’exécuter ce script grâce à un bouton? Pour que ça fonctionne depuis un bouton il faut mettre un script d’application pour Acrobat, avec ton logiciel je ne sais pas ! @+ 
 😎Attachments:You must be logged in to view attached files. bebarthMaître des clés bebarthMaître des clésIdem que Merlin ! …et avec celui de la pièce attachée au fichier, c’est pareil ??? Effectivement lorsqu’on copie/colle le script du post, cela ne fonctionne plus !!! @+ 
 😎 bebarthMaître des clés bebarthMaître des clésEffectivement, le script collé dans le post ne fonctionne pas, mais celui en pièce attaché au fichier est correct ! 
 Je donne ici le script qui marche. Je vous invite à modifier les dimensions du champ ou la taille des caractères pour voir la différence.console.show();
 console.clear();
 // Variables
 ...
 } else {
 app.alert("Il faut écrire un texte dans ce champ pour en connaître les détails !",3);
 }@+ 
 😎- 
		Cette réponse a été modifiée le il y a 1 année et 9 mois par  bebarth. bebarth.
 Attachments:You must be logged in to view attached files.
- 
		Cette réponse a été modifiée le il y a 1 année et 4 mois par 
- 
		AuteurRéponses

