Donnez vie à vos documents numériques !
 

bebarth

Toutes mes réponses sur les forums

Affichage de 99 réponses de 1 à 99 (sur un total de 3,343)
  • Auteur
    Réponses
  • en réponse à : Action pour ouvrir une page web par script #75856
    bebarth
    Maître des clés

    Si je trouve, je te dirai pourquoi ça ne fonctionne pas en fonction, mais pour l’instant je ne sais pas !!!

    @+
    😎

    en réponse à : Action pour ouvrir une page web par script #75853
    bebarth
    Maître des clés

    …comme ça je ne comprends pas pourquoi cela ne fonctionne pas !
    Dans un premier temps tu peux mettre ce script sur tous tes boutons “AjouT”.

    var ind=event.target.name.substring(event.target.name.indexOf(".")+1);
    var nomBoutons=[];
    for (var k=0; k<10; k++) nomBoutons.push(this.getField("LinkT."+ind+"."+k).buttonGetCaption());
    for (var k=0; k<10; k++) {
    if (this.getField("LinkT."+ind+"."+k).buttonGetCaption()=="...") break;
    }
    if (k==10) app.alert("Tous les boutons renvoient à une URL.",3);
    lesElements=[0,1,2,3,4,5,6,7,8,9];
    var laListe="- Indices -";
    var listeElements="var listeElements \= \{\""+laListe+"\": "+(lesElements.length+1)+",";
    for (var i=0; i<lesElements.length; i++) {
    if (i!=k) var par=-1;
    else var par=1;
    listeElements+="\""+lesElements+"\": "+(par*(i+1)).toString()+",";
    }
    var listeElements=listeElements.substring(0, listeElements.length-1);
    listeElements+="\}";
    eval(listeElements);
    //
    var bDialogue={
    initialize: function(bDialogue) {
    this.cbInit=true;
    bDialogue.enable({url0: true});
    this.loadDefaults(bDialogue);
    },
    loadDefaults: function(bDialogue) {
    bDialogue.load({
    cb00: false,
    rd00: true,
    url0: "http://www.",
    menu: listeElements,
    });
    },
    cb00: function(bDialogue) {
    this.cbInit=!this.cbInit;
    bDialogue.enable({init: this.cbInit});
    },
    quelBtRd: function (oRslt) {
    for (var i=0; i<=1; i++) {
    if (oRslt["rd0"+i]) {
    switch (i) {
    case 0:
    resBtRd="Non";
    break;
    case 1:
    resBtRd="Oui";
    }
    }
    };
    return resBtRd;
    },
    validate: function(bDialogue) {
    var oRslt=bDialogue.store();
    var elements=bDialogue.store()["menu"];
    for (var i in elements) {
    if (elements>0) indice=i;
    }
    if (indice=="- Indices -") {
    app.alert("Veuillez sélectionner l'indice d'un champ;.",3);
    return false;
    } else {
    initialiser=oRslt["cb00"];
    if (initialiser) {
    texteBouton="...";
    texteURL="";
    return true;
    } else {
    texteBouton=oRslt["nmbt"];
    var testOK0=true;
    if (!/^(\w|\W)+( (\w|\W)+)*$/.test(texteBouton)) var testOK0=false;
    var testOK1=true;
    texteURL=oRslt["url0"];
    if (!/^(https?:\/\/)?([\w-]+(\.[\w-]+)+)(:\d+)?(\/[^\s]*)?$/i.test(texteURL)) var testOK1=false;
    cAc=this.quelBtRd(oRslt);
    if (nomBoutons[indice]!="...") {
    if (cAc=="Non") {
    app.alert("Le bouton \"LinkT."+ind+"."+indice+"\" est déjà renseigné.",3);
    return false;
    } else {
    var reponse=app.alert("Le bouton \"LinkT."+ind+"."+indice+"\" est déjà renseigné.\rSouhaitez-vous réellement le modifier ?",3,2);
    if (reponse==3) return false;
    }
    }
    if (!testOK0) app.alert("Veuillez indiquer un nom pour le bouton.",3);
    else if (!testOK1) app.alert("Veuillez renseigner une URL correcte.",3);
    var testOK=testOK0 && testOK1;
    return testOK;
    }
    }
    },
    description: {
    name: "Bouton vers URL",
    first_tab: "cb00",
    elements: [
    {
    type: "cluster", //
    elements: [
    {
    type: "static_text",
    name: "Indice du bouton",
    font: "dialog",
    bold: true,
    },
    {
    type: "popup",
    item_id: "menu",
    alignment: "align_fill",
    //width: 150,
    },
    {
    type: "check_box",
    alignment: "align_center",
    item_id: "cb00",
    name: " Réinitialiser le bouton",
    },
    {
    type: "gap",
    height: 5
    },
    {
    type: "cluster",
    item_id: "init",

    elements: [
    {
    type: "static_text",
    name: "Texte pour le bouton",
    font: "dialog",
    bold: true,
    },
    {
    type: "edit_text",
    item_id: "nmbt",
    alignment: "align_fill",
    },
    {
    type: "gap",
    height: 5
    },
    {
    type: "static_text",
    name: "URL à atteindre",
    font: "dialog",
    bold: true,
    },
    {
    type: "edit_text",
    item_id: "url0",
    alignment: "align_fill",
    },
    {
    type: "gap",
    height: 5
    },
    {
    type: "static_text",
    name: "Modifier le bouton si renseigné ?",
    font: "dialog",
    bold: true,
    },
    {
    type: "view",
    alignment: "align_center",
    align_children: "align_row",
    elements: [
    {
    type: "radio",
    group_id: "gr00",
    item_id: "rd00",
    name: " Non",
    },
    {
    type: "radio",
    group_id: "gr00",
    item_id: "rd01",
    name: " Oui",
    },
    ]
    },
    ]
    },
    {
    type: "gap",
    height: 5
    },
    {
    type: "ok_cancel",
    },
    ]
    },
    ]
    }
    };
    if("ok"==app.execDialog(bDialogue)){
    if (initialiser) {
    this.getField("LinkT."+ind+"."+indice).setAction("MouseUp","//");
    this.getField("LinkT."+ind+"."+indice).buttonSetCaption("...");
    this.getField("LinkT."+ind+"."+indice).fillColor=color.ltGray;
    } else {
    this.getField("LinkT."+ind+"."+indice).setAction("MouseUp","app.launchURL(\""+texteURL+"\");");
    this.getField("LinkT."+ind+"."+indice).buttonSetCaption(texteBouton);
    this.getField("LinkT."+ind+"."+indice).fillColor=color.green;
    }
    }

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Action pour ouvrir une page web par script #75844
    bebarth
    Maître des clés

    J’ai fait une version qui fonctionne apparemment avec PDF Expert !
    A vérifier quand même…

    Il y avait une erreur que j’ai modifié (dans les 2 fichiers);

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Action pour ouvrir une page web par script #75839
    bebarth
    Maître des clés

    PDF Expert gère nativement les boites de dialogue (AcroDialog).

    Je n’avais pas vérifié avec PDF Expert et effectivement :

    1. Il ne trouve pas le premier indice disponible
    2. Il ne comprend pas “insertSeparatorEntryInList”

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Calcul filetages #75837
    bebarth
    Maître des clés

    Voici ton fichier corrigé.
    Normalement ça fonctionne !!!

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Action pour ouvrir une page web par script #75833
    bebarth
    Maître des clés

    bonjour,

    c’est plus complexe que je ne le pensais

    C’est pas le plus simple dans le Javascript Acrobat… Il y a quelques exemples dans l’API Reference (https://opensource.adobe.com/dc-acrobat-sdk-docs/library/jsapiref/JS_API_AcroJS.html#execdialog) ou sur ce fichier de Thom Parker (page : https://www.pdfscripting.com/public/ACRODIALOGS-OVERVIEW.cfm, fichier : http://www.windjack.com/resources/Examples/DialogUses.pdf).
    Si cela t’intéresse de créer des boites de dialogue je peu de donner quelques exemples simples.

    Voilà ce que j’ai fait. Je pense l’avoir testé, mais dis-moi s’il y a des erreurs.
    J’en ai profité pour faire un peu de pub à ma fille !!!

    Voici le script :

    var nomBoutons=[];
    for (var k=0; k<10; k++) nomBoutons.push(this.getField("LinkT.1."+k).buttonGetCaption());
    for (var k=0; k<10; k++) {
    if (this.getField("LinkT.1."+k).buttonGetCaption()=="...") break;
    }
    if (k==10) app.alert("Tous les boutons renvoient à une URL.",3);
    //
    var bDialogue={
    initialize: function(bDialogue) {
    this.cbInit=true;
    bDialogue.enable({url0: true});
    this.loadDefaults(bDialogue);
    },
    loadDefaults: function(bDialogue) {
    bDialogue.load({
    cb00: false,
    rd00: true,
    url0: "http://www.",
    });
    bDialogue.insertEntryInList({"menu":{"- Indices -": 0}});
    bDialogue.insertSeparatorEntryInList("menu");
    for (var i=0; i<10; i++) {
    if (i!=k) var par=-1;
    else var par=1;
    eval("bDialogue.insertEntryInList({\"menu\":{\""+i+"\": "+(par*(i+1))+"}});");
    }
    },
    cb00: function(bDialogue) {
    this.cbInit=!this.cbInit;
    bDialogue.enable({init: this.cbInit});
    },
    quelBtRd: function (oRslt) {
    for (var i=0; i<=1; i++) { if (oRslt["rd0"+i]) { switch (i) { case 0: resBtRd="Non"; break; case 1: resBtRd="Oui"; } } }; return resBtRd; }, validate: function(bDialogue) { var oRslt=bDialogue.store(); var elements=bDialogue.store()["menu"]; for (var i in elements) { if (elements>0) indice=i;
    }
    if (indice=="- Indices -") {
    app.alert("Veuillez sélectionner l'indice d'un champ;.",3);
    return false;
    } else {
    initialiser=oRslt["cb00"];
    if (initialiser) {
    texteBouton="...";
    texteURL="";
    return true;
    } else {
    texteBouton=oRslt["nmbt"];
    var testOK0=true;
    if (!/^(\w|\W)+( (\w|\W)+)*$/.test(texteBouton)) var testOK0=false;
    if (!testOK0) app.alert("Veuillez indiquer un nom pour le bouton.",3);
    var testOK1=true;
    texteURL=oRslt["url0"];
    if (!/^(https?:\/\/)?([\w-]+(\.[\w-]+)+)(:\d+)?(\/[^\s]*)?$/i.test(texteURL)) var testOK1=false;
    if (!testOK1) app.alert("Veuillez renseigner une URL correcte.",3);
    cAc=this.quelBtRd(oRslt);
    if (nomBoutons[indice]!="...") {
    if (cAc=="Non") {
    app.alert("Le bouton d'indice \""+indice+"\" est déjà renseigné.",3);
    return false;
    } else {
    var reponse=app.alert("Le bouton d'indice \""+indice+"\" est déjà renseigné.\rSouhaitez-vous réellement le modifier ?",3,2);
    if (reponse==3) return false;
    }
    }
    var testOK=testOK0 && testOK1;
    return testOK;
    }
    }
    },
    description: {
    name: "Bouton vers URL",
    first_tab: "cb00",
    elements: [
    {
    type: "cluster", //
    elements: [
    {
    type: "static_text",
    name: "Indice du bouton",
    font: "dialog",
    bold: true,
    },
    {
    type: "popup",
    item_id: "menu",
    alignment: "align_fill",
    //width: 150,
    },
    {
    type: "check_box",
    alignment: "align_center",
    item_id: "cb00",
    name: " Réinitialiser le bouton",
    },
    {
    type: "gap",
    height: 5
    },
    {
    type: "cluster",
    item_id: "init",

    elements: [
    {
    type: "static_text",
    name: "Texte pour le bouton",
    font: "dialog",
    bold: true,
    },
    {
    type: "edit_text",
    item_id: "nmbt",
    alignment: "align_fill",
    },
    {
    type: "gap",
    height: 5
    },
    {
    type: "static_text",
    name: "URL à atteindre",
    font: "dialog",
    bold: true,
    },
    {
    type: "edit_text",
    item_id: "url0",
    alignment: "align_fill",
    },
    {
    type: "gap",
    height: 5
    },
    {
    type: "static_text",
    name: "Modifier le bouton si renseigné ?",
    font: "dialog",
    bold: true,
    },
    {
    type: "view",
    alignment: "align_center",
    align_children: "align_row",
    elements: [
    {
    type: "radio",
    group_id: "gr00",
    item_id: "rd00",
    name: " Non",
    },
    {
    type: "radio",
    group_id: "gr00",
    item_id: "rd01",
    name: " Oui",
    },
    ]
    },
    ]
    },
    {
    type: "gap",
    height: 5
    },
    {
    type: "ok_cancel",
    },
    ]
    },
    ]
    }
    };
    if("ok"==app.execDialog(bDialogue)){
    if (initialiser) {
    this.getField("LinkT.1."+indice).setAction("MouseUp","//");
    this.getField("LinkT.1."+indice).buttonSetCaption("...");
    this.getField("LinkT.1."+indice).fillColor=color.ltGray;
    } else {
    this.getField("LinkT.1."+indice).setAction("MouseUp","app.launchURL(\""+texteURL+"\");");
    this.getField("LinkT.1."+indice).buttonSetCaption(texteBouton);
    this.getField("LinkT.1."+indice).fillColor=color.green;
    }
    }

    …et le fichier où j’ai rajouté une ligne pour en avoir 10 (de 0 à 9).

    @+
    😎

    • Cette réponse a été modifiée le il y a 3 jours et 2 heures par bebarth.
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Calcul filetages #75830
    bebarth
    Maître des clés

    bonjour,
    Je regarde rapidement…

    @+
    😎

    en réponse à : Action pour ouvrir une page web par script #75829
    bebarth
    Maître des clés

    bonjour,

    D’ici là je vais chercher pour voir si j’y arrive.

    As-tu réussi à faire quelque chose ?
    Je m’y attelle dès ce soir. “Normalement” ça ne devrait pas être trop long. la boite de dialogue n’est pas très compliquée, mais lorsqu’on n’en fait pas depuis un certain temps il faut se remettre dans le bain.
    Je te tiens au courant…

    @+
    😎

    en réponse à : Calcul filetages #75824
    bebarth
    Maître des clés

    bonjour,
    L’expression régulière vérifie les chaines de caractères strictement !
    UNEF 1.11/16 – – 32 – Pas 1.720 n’est donc pas la même chose que UNEF 1 11/16 – 32 – Pas 1.720 (sans point et avec un simple tiret). La première chaine testée est donc fausse alors que la seconde est vraie.

    @+
    😎

    en réponse à : Calcul filetages #75817
    bebarth
    Maître des clés

    il y a 2 valeurs que je ne sais pas entrer ( 1.11/16-18 Pas 1,720 Perage 44,45 — 2″-18 Pas 1,971 Perçage 50.8)

    C’est compliqué de modifier toujours l’énoncé du problème. Il faut réadapter à chaque fois l’expression régulière… Maintenant elle en est à :
    var filetageRegEx=/^UNE?(C|F)[ ]*(\d{0,2}["]?[ ]*(\d+[/]\d+)?)[ ]*-[ ]*(\d{1,2})[ ]*-[ ]*\w*[ ]*(\d{1,2}[.,]\d{1,3})$/;

    Tu devrais maintenant pouvoir entrer tes nouvelles valeurs.

    @+
    😎

    • Cette réponse a été modifiée le il y a 1 semaine par bebarth.
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Calcul filetages #75814
    bebarth
    Maître des clés

    Et sur une page que j’ai recréé “UNEF”

    Il ne faut pas écrire :
    var filetageRegEx=/^UN(C|EF)[ ]*(\d?["]?[ ]*(\d[/]\d+)?)[ ]*-[ ]*(\d{1,2})[ ]*-[ ]*\w*[ ]*(\d{1,2}[.,]\d{1,3})$/;
    mais
    var filetageRegEx=/^UNE?(C|F)[ ]*(\d?["]?[ ]*(\d[/]\d+)?)[ ]*-[ ]*(\d{1,2})[ ]*-[ ]*\w*[ ]*(\d{1,2}[.,]\d{1,3})$/;

    @+
    😎

    en réponse à : Calcul filetages #75812
    bebarth
    Maître des clés

    bonjour,

    la page PG Beug, pourquoi aucune idée §

    Tout le monde aura remarqué (lol) qu’avec cette expression régulière :
    var filetageRegEx=/^(W|(BSF)|(PG)|(NPT))[ ]*(\d?["]?[ ]*(\d[/]\d+)?)[ ]*-[ ]*\w*[ ]*(\d{1,2}[.,]\d{1,3})$/;
    il n’est possible d’indiquer qu’un seul chiffre pour le diamètre. pour qu’il soit possible d’en indiquer 2, il faut écrire :
    var filetageRegEx=/^(W|(BSF)|(PG)|(NPT))[ ]*(\d{1,2}["]?[ ]*(\d[/]\d+)?)[ ]*-[ ]*\w*[ ]*(\d{1,2}[.,]\d{1,3})$/;
    et comme je viens de m’apercevoir de la possibilité d’une décimale, l’expression régulière devient :
    var filetageRegEx=/^(W|(BSF)|(PG)|(NPT))[ ]*(\d{1,2}[.]?\d?["]?[ ]*(\d[/]\d+)?)[ ]*-[ ]*\w*[ ]*(\d{1,2}[.,]\d{1,3})$/;

    Dans mon fichier de retour j’ai mis en fonction une parie du script ce qui permet de ne l’écrire qu’une seule fois dans le fichier et juste d’appeler cette fonction avec le menu déroulant.
    // Script de document
    function filetages() {
    for (var i=0; i<event.target.numItems; i++) {
    if (event.changeEx==event.target.getItemAt(i,true)) break;
    }
    var lesValeurs=event.target.getItemAt(i,false);
    //
    var vis="";
    var pas="";
    var filetageRegEx=/^M[ ]*(\d{1,2})[ ]*-[ ]*\w*[ ]*(\d{1,2}[.,]\d{1,3})$/;
    if (filetageRegEx.test(lesValeurs)) {
    var visPas=lesValeurs.replace(filetageRegEx,"$1-$2".replace(/,/g,"."));
    var vis=visPas.split("-")[0];
    var pas=visPas.split("-")[1];
    } else {
    var filetageRegEx=/^(W|(BSF)|(PG)|(NPT))[ ]*(\d{1,2}[.]?\d?["]?[ ]*(\d[/]\d+)?)[ ]*-[ ]*\w*[ ]*(\d{1,2}[.,]\d{1,3})$/;
    if (filetageRegEx.test(lesValeurs)) {
    var visPas=lesValeurs.replace("\""," ").replace(/[ ]+/g," ").replace(filetageRegEx,"$5-$7".replace(/,/g,"."));
    var laVis=visPas.split("-")[0].split(/[ ]/);
    if (laVis.length==1) {
    var vis=(Number(laVis[0].split("/")[0])/Number(laVis[0].split("/")[1]))*25.4;
    } else {
    if (laVis[1]) var vis=(Number(laVis[0])+(Number(laVis[1].split("/")[0])/Number(laVis[1].split("/")[1])))*25.4;
    else var vis=Number(laVis[0])*25.4;
    }
    var pas=visPas.split("-")[1];
    } else {
    var filetageRegEx=/^UN(C|F)[ ]*(\d{1,2}["]?[ ]*(\d[/]\d+)?)[ ]*-[ ]*(\d{1,2})[ ]*-[ ]*\w*[ ]*(\d{1,2}[.,]\d{1,3})$/;
    if (filetageRegEx.test(lesValeurs)) {
    var visPas=lesValeurs.replace("\""," ").replace(/[ ]+/g," ").replace(filetageRegEx,"$2-$4-$5".replace(/,/g,"."));
    var laVis=visPas.split("-")[0].split(/[ ]/);
    if (Number(visPas.split("-")[1])>=28 && /[^"]/.test(lesValeurs) && Number(visPas.split("-")[0])<=12) {
    var UN=[1.524,1.854,2.184,2.515,2.845,3.175,3.505,"-",4.166,"-",4.826,"-",5,486];
    var vis=UN[Number(visPas.split("-")[0])];
    } else if (laVis.length==1) {
    var vis=(Number(laVis[0].split("/")[0])/Number(laVis[0].split("/")[1]))*25.4;
    } else {
    var vis=(Number(laVis[0])+(Number(laVis[1].split("/")[0])/Number(laVis[1].split("/")[1])))*25.4;
    }
    var pas=visPas.split("-")[2];
    } else {
    var filetageRegEx=/^G[ ]*(\d{1,2}["]?[ ]*(\d[/]\d+)?)[ ]*-[ ]*\w*[ ]*(\d{1,2}[.,]\d{1,3})$/;
    if (filetageRegEx.test(lesValeurs)) {
    var visPas=lesValeurs.replace("\""," ").replace(/[ ]+/g," ").replace(filetageRegEx,"$1-$3".replace(/,/g,"."));
    var laVis=visPas.split("-")[0].split(/[ ]/);
    var filetageGaz=[["1/16",7.723],["1/8",9.728],["1/4",13.157],["3/8",16.662],["1/2",20.955],["5/8",22.911],["3/4",26.441],["7/8",30.201],["1",33.249],["1 1/8",37.897],["1 1/4",41.91],["1 1/2",47.803],["1 3/4",53.746],["2",59.614],["2 1/4",65.71],["2 1/2",75.184],["2 3/4",81.534],["3",87.884],["3 1/2",100.33],["4",125.73],["4 1/2",125.73],["5",138.43],["5 1/2",151.13],["6",163,83]];
    if (laVis.length>1 && laVis[1]) var filetage=laVis[0]+" "+laVis[1];
    else var filetage=laVis[0];
    for (var j=0; j<filetageGaz.length; j++) {
    if (filetageGaz[j][0]==filetage) {
    var vis=filetageGaz[j][1];
    break;
    }
    }
    if (j==filetageGaz.length) app.alert("Filetage incorrect",3);
    else var pas=visPas.split("-")[1];
    } else app.alert("Filetage incorrect",3);
    }
    }
    }
    return [vis, pas]
    }
    // Script de touches personnalisé
    if (!event.willCommit) {
    var visETpas=filetages();
    try {
    /*
    console.println("vis : "+vis);
    console.println("pas : "+pas);
    this.getField("Text5").value=vis;
    this.getField("Text6").value=pas;
    */
    this.getField("FiltagePGR").value=visETpas[0];
    this.getField("PasPGconv").value=visETpas[1];
    } catch(e) {
    app.alert("Filetage incorrect",3);
    }
    }

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Action pour ouvrir une page web par script #75811
    bebarth
    Maître des clés

    bonjour,

    Je n’arrive pas à savoir comment faire pour avoir tout ceci dans la même boite de dialogue…

    C’est un petit boulot, mais si tu n’es pas trop pressé je te fais ça en fin de semaine…

    @+
    😎

    en réponse à : Calcul filetages #75790
    bebarth
    Maître des clés

    J’ai voulu modifier le script car j’ai vu ou etait les diametres, je les mis mais le script sonne, je ne vois pas l’erreur

    Je regarderai lundi car ce ne sera pas possible ce weekend !

    Quelles sont les lignes modifiées ? Ça m’évitera de chercher trop longtemps…

    @+
    😎

    • Cette réponse a été modifiée le il y a 1 semaine et 3 jours par bebarth.
    en réponse à : Calcul filetages #75787
    bebarth
    Maître des clés

    Cette ligne correspond a quoi ? : var UN=[1.524,1.854,2.184,2.515,2.845,3.175,3.505,”-“,4.166,”-“,4.826,”-“,5,486];

    Cette ligne est une table de correspondance des petites vis UNC/UNF dont le numéro de 0 à 12 n’indique pas le diamètre.

    Attention, le dernier élément de la table doit être 5.486 (avec un point).

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Calcul filetages #75784
    bebarth
    Maître des clés

    Et juste pour savoir, c’est normal que l’exportation de valeurs perçage ne se fait plus ?

    Il faut cocher la case du menu déroulant “Valider la valeur sélectionnée immédiatement”.

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Action pour ouvrir une page web par script #75782
    bebarth
    Maître des clés

    bonjour,
    Voici ma proposition qui devrait correspondre à ce que tu demandes :
    var i=event.target.name.substr(6);
    var j=this.getField("NoLieT."+i).value;
    if (this.getField("LinkT."+i+"."+j).buttonGetCaption()!="....") {
    app.alert("Ce bouton renvoie déjà à une url.",3);
    } else {
    var leLien=this.getField("LaT."+i).value;
    if (j!="-" && /^(https?:\/\/)?([\w-]+(\.[\w-]+)+)(:\d+)?(\/[^\s]*)?$/i.test(leLien)) {
    this.getField("LinkT."+i+"."+j).setAction("MouseUp","app.launchURL(\""+leLien+"\");");
    var texteBouton="";
    while ((!/^(\w|\W)+( (\w|\W)+)*$/.test(texteBouton) && texteBouton!=null) || texteBouton=="Exemple") {
    var texteBouton=app.response({
    cQuestion: "Quel nom souhaitez-vous attribuer à ce bouton ?",
    cTitle: "Nom du bouton",
    cLabel: "Nom :",
    cDefault: "Exemple"
    });
    }
    if (texteBouton!=null) {
    this.getField("LinkT."+i+"."+j).buttonSetCaption(texteBouton);;
    this.getField("LinkT."+i+"."+j).fillColor=color.green;
    this.getField("LaT."+i).value="";
    for (var k=0; k<10; k++) {
    if (this.getField("LinkT."+i+"."+k).buttonGetCaption()=="....") {
    this.getField("NoLieT."+i).value=k;
    break;
    }
    }
    if (k==10) app.alert("Tous les boutons renvoient à une url",3);
    }
    }
    else if (j=="-") app.alert("Veuillez choisir un numéro d'indice",3);
    else app.alert("L'url indiquée n'est pas correcte",3);
    }

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Calcul filetages #75769
    bebarth
    Maître des clés

    bonjour,
    Voici un nouveau script ou les diamètres pour les filetages gaz sont indiqués dans une table.
    Pour info, j’ai retiré de ta liste le modèle 1″3/8 qui n’existe pas et que je prenais en exemple… ce qui m’a perturbé un moment car bien entendu il n’était pas dans la table !
    if (!event.willCommit) {
    for (var i=0; i<event.target.numItems; i++) { if (event.changeEx==event.target.getItemAt(i,true)) break; } var lesValeurs=event.target.getItemAt(i,false); // var vis=""; var pas=""; var filetageRegEx=/^M[ ]*(\d{1,2})[ ]*-[ ]*\w*[ ]*(\d{1,2}[.,]\d{1,3})$/; if (filetageRegEx.test(lesValeurs)) { var visPas=lesValeurs.replace(filetageRegEx,"$1-$2".replace(/,/g,".")); var vis=visPas.split("-")[0]; var pas=visPas.split("-")[1]; } else { var filetageRegEx=/^(W|(BSF)|(PG)|(NPT))[ ]*(\d?["]?[ ]*(\d[/]\d+)?)[ ]*-[ ]*\w*[ ]*(\d{1,2}[.,]\d{1,3})$/; if (filetageRegEx.test(lesValeurs)) { var visPas=lesValeurs.replace("\""," ").replace(/[ ]+/g," ").replace(filetageRegEx,"$5-$7".replace(/,/g,".")); var laVis=visPas.split("-")[0].split(/[ ]/); if (laVis.length==1) { var vis=(Number(laVis[0].split("/")[0])/Number(laVis[0].split("/")[1]))*25.4; } else { if (laVis[1]) var vis=(Number(laVis[0])+(Number(laVis[1].split("/")[0])/Number(laVis[1].split("/")[1])))*25.4; else var vis=Number(laVis[0])*25.4; } var pas=visPas.split("-")[1]; } else { var filetageRegEx=/^UN(C|F)[ ]*(\d?["]?[ ]*(\d[/]\d+)?)[ ]*-[ ]*(\d{1,2})[ ]*-[ ]*\w*[ ]*(\d{1,2}[.,]\d{1,3})$/; if (filetageRegEx.test(lesValeurs)) { var visPas=lesValeurs.replace("\""," ").replace(/[ ]+/g," ").replace(filetageRegEx,"$2-$4-$5".replace(/,/g,".")); var laVis=visPas.split("-")[0].split(/[ ]/); if (Number(visPas.split("-")[1])>=28 && /[^"]/.test(lesValeurs) && Number(visPas.split("-")[0])<=12) { var UN=[1.524,1.854,2.184,2.515,2.845,3.175,3.505,"-",4.166,"-",4.826,"-",5.486]; var vis=UN[Number(visPas.split("-")[0])]; } else if (laVis.length==1) { var vis=(Number(laVis[0].split("/")[0])/Number(laVis[0].split("/")[1]))*25.4; } else { var vis=(Number(laVis[0])+(Number(laVis[1].split("/")[0])/Number(laVis[1].split("/")[1])))*25.4; } var pas=visPas.split("-")[2]; } else { var filetageRegEx=/^G[ ]*(\d?["]?[ ]*(\d[/]\d+)?)[ ]*-[ ]*\w*[ ]*(\d{1,2}[.,]\d{1,3})$/; if (filetageRegEx.test(lesValeurs)) { var visPas=lesValeurs.replace("\""," ").replace(/[ ]+/g," ").replace(filetageRegEx,"$1-$3".replace(/,/g,".")); var laVis=visPas.split("-")[0].split(/[ ]/); var filetageGaz=[["1/16",7.723],["1/8",9.728],["1/4",13.157],["3/8",16.662],["1/2",20.955],["5/8",22.911],["3/4",26.441],["7/8",30.201],["1",33.249],["1 1/8",37.897],["1 1/4",41.91],["1 1/2",47.803],["1 3/4",53.746],["2",59.614],["2 1/4",65.71],["2 1/2",75.184],["2 3/4",81.534],["3",87.884],["3 1/2",100.33],["4",125.73],["4 1/2",125.73],["5",138.43],["5 1/2",151.13],["6",163.83]]; if (laVis.length>1 && laVis[1]) var filetage=laVis[0]+" "+laVis[1];
    else var filetage=laVis[0];
    for (var j=0; j<filetageGaz.length; j++) {
    if (filetageGaz[j][0]==filetage) {
    var vis=filetageGaz[j][1];
    break;
    }
    }
    if (j==filetageGaz.length) app.alert("Filetage incorrect",3);
    else var pas=visPas.split("-")[1];
    } else app.alert("Filetage incorrect",3);
    }
    }
    }
    try {
    console.println("vis : "+vis);
    console.println("pas : "+pas);
    this.getField("Text5").value=vis;
    this.getField("Text6").value=pas;
    } catch(e) {
    app.alert("Filetage incorrect",3);
    }
    }

    Attention, le dernier élément de la table filetageGaz doit être [“6”,163.83] (avec un point).

    @+
    😎

    • Cette réponse a été modifiée le il y a 1 semaine et 2 jours par bebarth.
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Calcul filetages #75765
    bebarth
    Maître des clés

    Comme indiqué sur la page “la lettre G suivi de la taille (qui, pour rappel, n’a aucun rapport avec le diamètre)“.
    Il me semble que pour le gaz la taille indiquée correspond au diamètre intérieur du tube, alors que le diamètre correspondant est son diamètre extérieur.
    Il faudra donc utiliser une table pour indiquer ces diamètres car le rapport intérieur/extérieur n’est pas constant. Je regarde plus tard…

    @+
    😎

    • Cette réponse a été modifiée le il y a 1 semaine et 4 jours par bebarth.
    • Cette réponse a été modifiée le il y a 1 semaine et 4 jours par bebarth.
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Calcul filetages #75758
    bebarth
    Maître des clés

    <p style=”text-align: left;”>bonjour,
    J’ai fait une petite modification du script :
    if (!event.willCommit) {
    for (var i=0; i<event.target.numItems; i++) { if (event.changeEx==event.target.getItemAt(i,true)) break; } var lesValeurs=event.target.getItemAt(i,false); // var filetageRegEx=/^M[ ]*(\d{1,2})[ ]*-[ ]*\w*[ ]*(\d{1,2}[.,]\d{1,3})$/; if (filetageRegEx.test(lesValeurs)) { var visPas=lesValeurs.replace(filetageRegEx,"$1-$2".replace(/,/g,".")); var vis=visPas.split("-")[0]; var pas=visPas.split("-")[1]; } else { var filetageRegEx=/^(W|(BSF)|G|(PG)|(NPT))[ ]*(\d?["]?[ ]*(\d[/]\d+)?)[ ]*-[ ]*\w*[ ]*(\d{1,2}[.,]\d{1,3})$/; if (filetageRegEx.test(lesValeurs)) { var visPas=lesValeurs.replace("\""," ").replace(/[ ]+/g," ").replace(filetageRegEx,"$5-$7".replace(/,/g,".")); var laVis=visPas.split("-")[0].split(/[ ]/); if (laVis.length==1) { var vis=(Number(laVis[0].split("/")[0])/Number(laVis[0].split("/")[1]))*25.4; } else { if (laVis[1]) var vis=(Number(laVis[0])+(Number(laVis[1].split("/")[0])/Number(laVis[1].split("/")[1])))*25.4; else var vis=Number(laVis[0])*25.4; } var pas=visPas.split("-")[1]; } else { var filetageRegEx=/^UN(C|F)[ ]*(\d?["]?[ ]*(\d[/]\d+)?)[ ]*-[ ]*(\d{1,2})[ ]*-[ ]*\w*[ ]*(\d{1,2}[.,]\d{1,3})$/; if (filetageRegEx.test(lesValeurs)) { var visPas=lesValeurs.replace("\""," ").replace(/[ ]+/g," ").replace(filetageRegEx,"$2-$4-$5".replace(/,/g,".")); var laVis=visPas.split("-")[0].split(/[ ]/); if (Number(visPas.split("-")[1])>=28 && /[^"]/.test(lesValeurs) && Number(visPas.split("-")[0])<=12) {
    var UN=[1.524,1.854,2.184,2.515,2.845,3.175,3.505,"-",4.166,"-",4.826,"-",5.486];
    var vis=UN[Number(visPas.split("-")[0])];
    } else if (laVis.length==1) {
    var vis=(Number(laVis[0].split("/")[0])/Number(laVis[0].split("/")[1]))*25.4;
    } else {
    var vis=(Number(laVis[0])+(Number(laVis[1].split("/")[0])/Number(laVis[1].split("/")[1])))*25.4;
    }
    var pas=visPas.split("-")[2];
    } else app.alert("Filetage incorrect",3);
    }
    }
    try {
    console.println("vis : "+vis);
    console.println("pas : "+pas);
    this.getField("Text5").value=vis;
    this.getField("Text6").value=pas;
    } catch(e) {
    app.alert("Filetage incorrect",3);
    }
    }</p>
    @+
    😎

    • Cette réponse a été modifiée le il y a 1 semaine et 2 jours par bebarth.
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Calcul filetages #75751
    bebarth
    Maître des clés

    Je te propose ce script valable (sauf erreur) pour toutes tes formes d’écritures.
    Si tu as un fichier terminé avec tous les différents filetages, Je te conseille de mettre ce script en fonction et de l’appeler par tous les menus déroulants.
    if (!event.willCommit) {
    for (var i=0; i<event.target.numItems; i++) { if (event.changeEx==event.target.getItemAt(i,true)) break; } var lesValeurs=event.target.getItemAt(i,false); // var filetageRegEx=/^M[ ]*(\d{1,2})[ ]*-[ ]*\w*[ ]*(\d{1,2}[.,]\d{1,3})$/; if (filetageRegEx.test(lesValeurs)) { var visPas=lesValeurs.replace(filetageRegEx,"$1-$2".replace(/,/g,".")); var vis=visPas.split("-")[0]; var pas=visPas.split("-")[1]; } else { var filetageRegEx=/^(W|(BSF)|G|(PG)|(NPT))[ ]*(\d?["]?[ ]*(\d[/]\d+)?)[ ]*-[ ]*\w*[ ]*(\d{1,2}[.,]\d{1,3})$/; if (filetageRegEx.test(lesValeurs)) { var visPas=lesValeurs.replace(filetageRegEx,"$5-$7".replace(/,/g,".")); var laVis=visPas.split("-")[0].split(/[ "]/); if (laVis.length==1) { var vis=(Number(laVis[0].split("/")[0])/Number(laVis[0].split("/")[1]))*25.4; } else { var vis=(Number(laVis[0])+(Number(laVis[1].split("/")[0])/Number(laVis[1].split("/")[1])))*25.4; } var pas=visPas.split("-")[1]; } else { var filetageRegEx=/^UN(C|F)[ ]*(\d?["]?[ ]*(\d[/]\d+)?)[ ]*-[ ]*(\d{1,2})[ ]*-[ ]*\w*[ ]*(\d{1,2}[.,]\d{1,3})$/; if (filetageRegEx.test(lesValeurs)) { var visPas=lesValeurs.replace(filetageRegEx,"$2-$4-$5".replace(/,/g,".")); var laVis=visPas.split("-")[0].split(/[ "]/); if (Number(visPas.split("-")[1])>=28 && /[^"]/.test(lesValeurs) && Number(visPas.split("-")[0])<=12) {
    var UN=[1.524,1.854,2.184,2.515,2.845,3.175,3.505,"-",4.166,"-",4.826,"-",5.486];
    var vis=UN[Number(visPas.split("-")[0])];
    } else if (laVis.length==1) {
    var vis=(Number(laVis[0].split("/")[0])/Number(laVis[0].split("/")[1]))*25.4;
    } else {
    var vis=(Number(laVis[0])+(Number(laVis[1].split("/")[0])/Number(laVis[1].split("/")[1])))*25.4;
    }
    var pas=visPas.split("-")[2];
    } else app.alert("Filetage incorrect",3);
    }
    }
    try {
    console.println("vis : "+vis);
    console.println("pas : "+pas);
    this.getField("Text5").value=vis;
    this.getField("Text6").value=pas;
    } catch(e) {
    app.alert("Filetage incorrect",3);
    }
    }

    @+
    😎

    • Cette réponse a été modifiée le il y a 1 semaine et 2 jours par bebarth.
    en réponse à : Calcul filetages #75735
    bebarth
    Maître des clés

    bonjour,
    Pour passer de pouces à millimètres il faut multiplier par 25,4.
    Exemple 5/8″ =  5*25.4/8 = 15.875 mm

    @+
    😎

    PS : Je n’avais pas vu sur ton fichier : 1″1/4 = 1.25″ = 1.25*25.4 = 31.75 mm

    • Cette réponse a été modifiée le il y a 1 semaine et 5 jours par bebarth.
    en réponse à : Calcul filetages #75730
    bebarth
    Maître des clés

    bonjour,
    Ça a l’air de fonctionner !

    @+
    😎

    en réponse à : Action pour ouvrir une page web par script #75724
    bebarth
    Maître des clés

    bonjour,
    Voici un script pour ajouter un lien aux boutons :
    var i=event.target.name.substr(6);
    var j=this.getField("NoLien."+i).value;
    var leLien=this.getField("LaC."+i).value;
    if (j!="-" && /^(https?:\/\/)?([\w-]+(\.[\w-]+)+)(:\d+)?(\/[^\s]*)?$/i.test(leLien)) {
    this.getField("Links."+i+"."+j).setAction("MouseUp","app.launchURL(\""+leLien+"\");");
    this.getField("LaC."+i).value="";

    }
    else if (j=="-") app.alert("Veuillez choisir un numéro d'indice",3);
    else app.alert("L'url indiquée n'est pas correcte",3);
    On trouve différentes expressions régulières sur internet qui correspondent à une url, celle-ci en est une !

    Pour la proposition de Merlin, on peut comme dans un post précédent lancer directement le lien depuis le menu déroulant en utilisant un script de touches personnalisé :
    if (!event.willCommit) {
    try {
    app.launchURL(event.changeEx);
    } catch(e) {}
    }
    On met le “try” au cas où la valeur d’exportation ne soit pas une url…

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Calcul filetages #75714
    bebarth
    Maître des clés

    …reste a trouver les autres !

    On doit bien trouver les formules sur internet !

    @+
    😎

    https://www.h7g6.fr/data/article/37/memento-des-types-filetages (Par exemple – A vérifier).

    • Cette réponse a été modifiée le il y a 2 semaines par bebarth.
    • Cette réponse a été modifiée le il y a 1 semaine et 6 jours par bebarth.
    en réponse à : Calcul filetages #75710
    bebarth
    Maître des clés

    Oui mais je n’ai trouvé que les formules pour le pas métrique pour l’instant (je cherche les autres, a moins que cela fonction sur d’autre filetage ?

    Dire que j’avais tout ça et que je m’en suis séparé il n’y a pas très longtemps…

    @+
    😎

    en réponse à : Calcul filetages #75709
    bebarth
    Maître des clés

    ça affichait la valeur précédemment sélectionnée dans le tableau

    Le premier fichier que j’ai partagé n’était pas le bon… mais le script est correct.
    J’ai maintenant remplacé le fichier. Ça évite d’avoir un bouton !

    @+
    😎

    en réponse à : Calcul filetages #75701
    bebarth
    Maître des clés

    bonjour,
    Je te propose un script de touches personnalisé :
    if (!event.willCommit) {
    for (var i=0; i<event.target.numItems; i++) {
    if (event.changeEx==event.target.getItemAt(i,true)) break;
    }
    var lesValeurs=event.target.getItemAt(i,false).split(" - Pas ");
    this.getField("Text5").value=lesValeurs[0];
    this.getField("Text6").value=lesValeurs[1];
    }

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Ajout d’un code #75694
    bebarth
    Maître des clés

    …et si tu veux écrire sur tous tes champs “Vol.” en script de calcul, tu exécutes :
    for (var i=0; i<126; i++) {
    this.getField("Vol."+i).setAction("Calculate", "var INDICE=event.target.name.substr(4);\revent.value=this.getField(\"JSerie.\"+INDICE).value*this.getField(\"JReps.\"+INDICE).value*this.getField(\"JCharge.\"+INDICE).value;");
    }

    @+
    😎

    en réponse à : Ajout d’un code #75693
    bebarth
    Maître des clés

    bonjour,
    Dans un premier temps il faut récupérer l’indice :
    var INDICE=event.target.name.substr(4);
    puis il faut écrire :
    this.getField("Vol."+INDICE).value=this.getField("JSerie."+INDICE).value*this.getField("JReps."+INDICE).value*this.getField("JCharge."+INDICE).value;

    @+
    😎

    en réponse à : Sauvegarde prefixe date #75670
    bebarth
    Maître des clés

    bonjour,

    Il est important de noter que l’exécution d’un tel script n’est pas permise sur un bouton.

    Ce n’est pas tout à fait vrai. C’est possible en plaçant une partie en script d’application pour élargir les privilèges. Mais c’est donc compliqué car il faut placer ce script en local dans le répertoire JavaScript d’Acrobat (ou Reader) de chaque ordinateur. Si ça t’intéresse tu me dis et je te fais un exemple.

    Pour les tablettes, tu oublies…

    @+
    😎

    • Cette réponse a été modifiée le il y a 2 semaines et 6 jours par bebarth.
    en réponse à : Générer des nombres se trouvant dans une table commune #75651
    bebarth
    Maître des clés

    Avec event.change (en script de touches personnalisé) on peut détecter la plupart des touches appuyées sauf pour les tabulations, les flèches, …

    @+
    😎

    en réponse à : Générer des nombres se trouvant dans une table commune #75650
    bebarth
    Maître des clés

    bonjour,
    Les valeurs retournées sont de 0 à 2 :
    0 — La valeur n’a pas été validée (par exemple, la touche Échap a été enfoncée).
    1 — La valeur a été validée en raison d’un clic en dehors du champ à l’aide de la souris.
    2 — La valeur a été validée en raison d’un appui sur la touche Entrée.
    3 — La valeur a été validée en appuyant sur la touche Tab pour accéder à un nouveau champ.

    @+
    😎

    en réponse à : Générer des nombres se trouvant dans une table commune #75641
    bebarth
    Maître des clés

    La discussion a été très rapide !

    @+
    😎

    en réponse à : Script pour changer de Helvetica à Courier ? #75640
    bebarth
    Maître des clés

    Ah oui, c’est vrai… mais mois je suis toujours retourné directement à l’interface “classique”.

    @+
    😎

    en réponse à : Script pour changer de Helvetica à Courier ? #75638
    bebarth
    Maître des clés

    Ça donne envie !
    Et c’est prévu pour quand ?

    @+
    😎

    en réponse à : Script pour changer de Helvetica à Courier ? #75636
    bebarth
    Maître des clés

    ils ne sont pas compatibles avec la “nouvelle expérience” de l’interface d’Acrobat.

    C’est quoi cette nouvelle expérience ?

    @+
    😎

    en réponse à : Script pour changer de Helvetica à Courier ? #75627
    bebarth
    Maître des clés

    bonjour,
    Si tu utilises mon utilitaire “Propriétés d’un champs” dans les abracadabraTools de Merlin, tu peux voir toutes les propriétés d’un champ spécifique, y compris le nom de la police de caractères utilisée.
    Si tu n’as pas les abracadabraTools, je te conseille de les télécharger. Ils sont très utiles.
    Il faudrait d’ailleurs que je pense à le mettre à jour…

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Générer des nombres se trouvant dans une table commune #75626
    bebarth
    Maître des clés

    Je fais évoquer le sujet sur le forum Adobe (plus tard) on verra si on a une réponse…

    Si vous voulez suivre la discussion :
    https://community.adobe.com/t5/acrobat-discussions/event-commitkey-values/m-p/15197726#M499460

    @+
    😎

    en réponse à : Script pour corriger une date #75623
    bebarth
    Maître des clés

    bonjour,
    J’ai légèrement modifié l’expression régulière car on pouvait écrire “00” pour les jours et mois lors d’une modification de date.
    La nouvelle expression régulière contrôlant la frappe est :
    var modeleRegEx=/^((0[1-9]?|[1-2][0-9]?|3[0-1]?)([\.]((0[1-9]?|1[0-2]?)([\.]([2]([0]\d{0,2})?)?)?)?)?)?$/;
    Maintenant, ce n’est plus possible… De plus, le 20 de l’année est automatiquement indiqué après le second point.

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Script pour changer de Helvetica à Courier ? #75621
    bebarth
    Maître des clés

    bonjour,
    Bêtement, j’utilise toujours les noms des polices standard données par l’api reference (font.Helv, font.Cour,…).
    https://opensource.adobe.com/dc-acrobat-sdk-docs/library/jsapiref/JS_API_AcroJS.html#id615
    Existe-t-il une différence ???

    @+
    😎

    en réponse à : Générer des nombres se trouvant dans une table commune #75608
    bebarth
    Maître des clés

    Je fais évoquer le sujet sur le forum Adobe (plus tard) on verra si on a une réponse…

    @+
    😎

    en réponse à : Générer des nombres se trouvant dans une table commune #75606
    bebarth
    Maître des clés

    Valeur 13 : Ce nombre correspond au code ASCII/Unicode de la touche Entrée (Enter).

    C’est bien ce que j’avais cru comprendre, mais pourquoi un simple signe “=” ? Si on en met 2 “==” ça ne fonctionne plus !
    Et ça n’a l’air de fonctionner qu’avec event.commitKey = 13;.

    @+
    😎

    en réponse à : Générer des nombres se trouvant dans une table commune #75603
    bebarth
    Maître des clés

    bonjour,
    Du coup, si PDF-XChange Editor comprend “event.commitKey”, je ne comprends pas pourquoi ça ne fonctionne pas avec ton fichier, et surtout pourquoi ça fonctionne avec l’autre ! Il ne l’interprète peut-être pas correctement. Il faut dire que “commitKey” est assez mal documenté.

    @+
    😎

    en réponse à : Générer des nombres se trouvant dans une table commune #75592
    bebarth
    Maître des clés

    … j’ai trouvé, mais j’ai fait quelques tests et apparemment PDF-XChange Editor ne connait pas “event.commitKey” !!!

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Générer des nombres se trouvant dans une table commune #75588
    bebarth
    Maître des clés

    Voici le script de touches personnalisé commenté :
    // Si aucun évènement ne sera exécuté, c’est à dire en cours de frappe
    if(!event.willCommit) {
    // La valeur du champ en table ou chaque élément est un caractère
    var aTester=event.value.split(“”);
    // Dans cette table, avec “splice”, on place le caractère frappé
    // entre la position de départ du curseur : event.selStart
    // et le nombre de caractères sélectionnés : event.selEnd-event.selStart
    // Si aucun caractère n’est sélectionné event.selEnd-event.selStart==0, on ajoute donc un caractère
    aTester.splice(event.selStart, event.selEnd-event.selStart, event.change);
    // testeChaine est la chaine de caractère à tester de la valeur du champ avec modification du caractère frappé
    var testeChaine=aTester.join(“”);
    // Expression régulière pour valider la frappe en cours
    // Chaque nouveau caractère doit être validé sans tenir compte des caractères à venir
    // D’où l’ajout de “?” qui signifie 0 ou 1
    // cf. explication de l’expression régulière ci-dessous
    var fractionRegEx=/^([1-9]\d*(\/([1-9]\d*)?)?)?$/;
    // La frappe est validée si le teste de la chaine avec l’expression régulière est vrai
    event.rc=fractionRegEx.test(testeChaine);
    // Sinon “if(event.willCommit)” : Si un évènement sera exécuté
    // Si on colle une valeur ou si on quitte le champ de quelque façon que ce soit
    } else {
    // Expression régulière pour valider l’entrée globale
    var fractionRegEx=/^[1-9]\d*(\/[1-9]\d*)?$/;
    // /^…$/ Teste la chaine de catactères du début jusqu’à la fin
    // [1-9] Le premier caractère doit être un chiffre de 1 à 9
    // \d* 0 ou plusieurs caractères numériques
    // (\/…)? Une barre de fraction et la suite, le tout facultatif
    // [1-9] Si il y a une barre de fraction, le premier caractère doit être un chiffre de 1 à 9
    // \d* suivi de 0 ou plusieurs caractères numériques
    // L’entrée est validée si le teste de la chaine avec l’expression régulière est vrai ou si le champ est vide
    event.rc=event.value==”” || fractionRegEx.test(event.value);
    }
    J’espère que c’est un peu plus clair pour toi !
    Ça ne fonctionne effectivement pas avec PDF-XChange Editor, mais je ne sais pas où trouver les scripts du champ…

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Générer des nombres se trouvant dans une table commune #75582
    bebarth
    Maître des clés

    bonjour,
    Je commente plus tard !
    Qu’est-ce qui ne fonctionne pas avec pdf XChange editor ? La validation avec la touche Enter ou l’expression régulière ?

    @+
    😎

    en réponse à : Exportation des données #75577
    bebarth
    Maître des clés

    bonjour,
    Non, je ne crois pas qu’il soit possible d’exporter directement en .xlsx, mais par contre on peut exporter au format .csv ! On doit pouvoir ensuite convertir le format avec une macro VBA.

    @+
    😎

    PS : Perso je ne sais pas écrire de macro VBA mais c’est la spécialité de mon frère… si ça t’intéresse je peux lui demander !

    • Cette réponse a été modifiée le il y a 3 semaines et 4 jours par bebarth.
    en réponse à : Générer des nombres se trouvant dans une table commune #75574
    bebarth
    Maître des clés

    bonjour,

    J’ai donc tenté de mettre en script sur le champ Result le code suivant : if (event.commitKey = 13) Verif();

    Pourquoi 13 ??? Si tu penses au caractère ASCII du retour ligne, ce n’est pas comme cela que fonctionne “event.commitKey”.
    https://opensource.adobe.com/dc-acrobat-sdk-docs/library/jsapiref/JS_API_AcroJS.html#commitkey
    Du coup, en script de format personnalisé tu écris :
    if (event.commitKey==2) Verif();
    Il faut également changer 2 lignes de la fonction Verif() car this.getField("Result").value = ""; provoque une erreur. Il faut donc remplacer (2 fois) cette ligne par this.resetForm(["Result"]);.

    Dans mon exemple, j’ai également ajouté un script de touches personnalisé pour ne pouvoir taper que les caractères utilisés pour écrire une fraction (ou juste un nombre).
    if (!event.willCommit) {
    var aTester=event.value.split("");
    aTester.splice(event.selStart, event.selEnd-event.selStart, event.change);
    var testeChaine=aTester.join("");
    var fractionRegEx=/^([1-9]\d*(\/([1-9]\d*)?)?)?$/;
    event.rc=fractionRegEx.test(testeChaine);
    } else {
    var fractionRegEx=/^[1-9]\d*(\/[1-9]\d*)?$/;
    event.rc=event.value=="" || fractionRegEx.test(event.value);
    }
    Demande si tu souhaites que je commente !

    Voici un lien pour télécharger ton fichier modifié : https://we.tl/t-RlWyRLbGyD

    @+
    😎

    • Cette réponse a été modifiée le il y a 3 semaines et 4 jours par bebarth.
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Générer des nombres se trouvant dans une table commune #75557
    bebarth
    Maître des clés

    bonjour,

    il y a par contre parfois le numérateur = au dénominateur

    Du coup, il faut écrire :
    ...
    while (a==b || PGCD(a,b)==1) hasard();
    ...

    Mon script va au plus simple en reprenant les valeurs des champs “Var.1.3” et “Var.2.3”. Je pense qu’on pourrait faire la même chose avant d’attribuer une valeur à ces champs, mais il faudrait revoir le script en entier ! Ça fonctionne comme ça…

    @+
    😎

    en réponse à : Générer des nombres se trouvant dans une table commune #75550
    bebarth
    Maître des clés

    Voici pour ton script de document “hasard”. La première fonction “function aleatoire (indice)” ne change pas, puis :

    function aleatoire (indice) {
    function getRandomIntInclusive(min,max,dec) {
    return Math.round((Math.random()*(max-min)+min)*Math.pow(10,dec))/Math.pow(10,dec);
    }
    if (this.getField("Var."+indice+".0").value !="" || this.getField("Var."+indice+".1").value !="" || this.getField("Var."+indice+".2").value !="") {
    this.getField("Var."+indice+".3").value=getRandomIntInclusive(this.getField("Var."+indice+".1").value,this.getField("Var."+indice+".2").value,this.getField("Dec."+i).value);
    }
    eval(this.getField("Var."+indice+".0").value+"="+this.getField("Var."+indice+".3").value);

    }
    function PGCD(a,b) {
    if (b) return PGCD(b,a%b);
    else return Math.abs(a);
    }
    function hasard () {
    for (i=1; i<=2; i++) {
    try {
    aleatoire (i);
    } catch(e) {
    this.getField("Var."+i+".3").value="";
    }
    }
    a=Math.abs(this.getField("Var.1.3").value);
    b=Math.abs(this.getField("Var.2.3").value);
    while (PGCD(a,b)==1) hasard();
    }

    @+
    😎

    PS : Bon, le fichier ne passe pas, je te laisse donc faire la modification.

    • Cette réponse a été modifiée le il y a 3 semaines et 6 jours par bebarth.
    en réponse à : Générer des nombres se trouvant dans une table commune #75545
    bebarth
    Maître des clés

    Voici une autre version avec moins de problèmes…

    Elle est où cette version ???

    @+
    😎

    en réponse à : Générer des nombres se trouvant dans une table commune #75544
    bebarth
    Maître des clés

    Le PGCD et le PPCM, mes cauchemars de collégien !

    Je crois même qu’on apprend ça en fin de primaire…

    @+
    😎

    en réponse à : Changement de couleur dans champ #75538
    bebarth
    Maître des clés

    bonjour,
    Il faut écrire :
    if (event.value>10) event.target.textColor=color.red;
    else event.target.textColor=color.black;

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Générer des nombres se trouvant dans une table commune #75536
    bebarth
    Maître des clés

    bonjour,
    En fait je n’arrive pas bien à comprendre comment ça fonctionne (Comment on génère les nombres aléatoires). Quand on clique sur “CLIQUE ICI” on a toujours un message… de plus il me semble qu’il y a une inversion quelque part entre le numérateur et le dénominateur (cf. copie d’écran).

    Sinon dans le principe il faudrait calculer le PGCD et faire une boucle (while) tant qu’il est égal à 1.
    Si tu m’éclaire un peu, je te fais ça (je l’ai déjà fait).

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Raccourcir un script #75528
    bebarth
    Maître des clés

    bonjour,

    Par contre ce qui est interdit partout, y compris sur les plaques d’immatriculation c’est “SS”.

    Je ne vais pas commenter la liste des noms partis à bannir, mais j’ai une info très intéressante à vous partager.
    Ma première voiture, une 4L, était immatriculée “2200 SS 77” et c’est la seule immatriculation que je me souvienne…
    Même l’immatriculation de ma voiture actuelle est notée sur mon téléphone. Intéressant, non ???

    @+
    😎

    en réponse à : Script pour corriger une date #75526
    bebarth
    Maître des clés

    bonjour,
    C’est possible si tu n’utilise pas un champ date mais un champ texte en forçant l’utilisation des caractère.
    Il y a 2 possibilités : Soit tu obliges l’utilisateur à taper tous les chiffres et dans ce cas tu peux insérer automatiquement les points de séparation ou l’utilisateur peut ne taper qu’un seul chiffres pour les jours et mois et 2 chiffres pour l’année et un script de format personnalisé se charge de remettre ça en forme.
    Voici les scripts utilisés dans mon document exemple qui vérifie les mois de 30 et 31 jours ainsi que le 29 février des année bissextiles :

    // script de document
    function verifDate(laDate) {
    var jour=Number(laDate.substr(0,2));
    var mois=Number(laDate.substr(3,2));
    var annee=Number(laDate.substr(6));
    var bissextile=annee%4==0 && (annee%100!=0 || annee%400==0)?"OUI":"NON";
    if (mois==2) {
    var leMois="FEVRIER";
    } else if (mois==4 || mois==6 || mois==9 || mois==11) {
    var leMois="30 JOURS";
    } else {
    var leMois="31 JOURS";
    }
    if (laDate.length==6) return (leMois=="30 JOURS" && jour<=30) || leMois=="31 JOURS" || (leMois=="FEVRIER" && jour<=29);
    else return (leMois=="30 JOURS" && jour<=30) || leMois=="31 JOURS" || (leMois=="FEVRIER" && jour<=28) || (bissextile=="OUI" && jour<=29);
    }

    // Script de touches personnalisé pour date entrée 01.02.2025
    if(!event.willCommit) {
    if (event.change==",") event.change=".";
    if ((/^0$/.test(event.value) || /^\d{2}\.0$/.test(event.value)) && event.change==0) var dateOK=false;
    else {
    var aTester=event.value.split("");
    if (event.value.length==1 && event.change!="") event.change=event.change+"\.";
    if (event.value.length==4 && event.change!="") event.change=event.change+"\.";
    aTester.splice(event.selStart, event.selEnd-event.selStart, event.change);
    var testeChaine=aTester.join("");
    if (testeChaine.length==6 || testeChaine.length==10) var dateOK=verifDate(testeChaine);
    else var dateOK=true;
    }
    var modeleRegEx=/^(([0-2][0-9]?|(3)[0-1]?)([\.](((0)[0-9]?|(1)[0-2]?)([\.]([2]([0]\d{0,2})?)?)?)?)?)?$/;
    event.rc=modeleRegEx.test(testeChaine) && dateOK;
    } else {
    var modeleRegEx=/^(\d{2}\.\d{2}\.\d{4})?$/;
    event.rc=event.value=="" || modeleRegEx.test(event.value);
    }

    // Script de touches personnalisé pour date entrée 1.2.25
    if(!event.willCommit) {
    if (event.change==",") event.change=".";
    if ((/^0$/.test(event.value) || /^\d{1,2}\.0$/.test(event.value) || /^\d{1,2}\.\d{1,2}\.0?$/.test(event.value)) && event.change==0) var dateOK=false;
    else {
    var aTester=event.value.split("");
    aTester.splice(event.selStart, event.selEnd-event.selStart, event.change);
    var testeChaine=aTester.join("");
    var aRetester=testeChaine.split(".");
    for (var i=0; i<aRetester.length; i++) {
    if (i==0 || i==1) {
    if (aRetester.length==1) aRetester="0"+aRetester+".";
    else aRetester=aRetester.toString()+".";
    } else if (i==3 && aRetester.length==2) aRetester="20"+aRetester;
    }
    var testeChaine=aRetester.join("");
    if (testeChaine.length==6 || testeChaine.length==10) var dateOK=verifDate(testeChaine);
    else var dateOK=true;
    }
    var modeleRegEx=/^(([0-2]?[0-9]?|(3)[0-1]?)([\.](((0)?[0-9]?|(1)[0-2]?)([\.](([2][0]?)?\d{0,2})?)?)?)?)?$/;
    event.rc=modeleRegEx.test(testeChaine) && dateOK;
    } else {
    var modeleRegEx=/^(\d{1,2}\.\d{1,2}\.\d{2,4})?$/;
    event.rc=event.value=="" || modeleRegEx.test(event.value);
    }

    // Script de format personnalisé
    var cetteDate=event.target.value.split(".");
    if (cetteDate[0].length==1) cetteDate[0]="0"+cetteDate[0];
    if (cetteDate[1].length==1) cetteDate[1]="0"+cetteDate[1];
    if (cetteDate[2].length==2) cetteDate[2]="20"+cetteDate[2];
    event.value=cetteDate[0]+"."+cetteDate[1]+"."+cetteDate[2];

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Raccourcir un script #75499
    bebarth
    Maître des clés

    Concrètement ça veut dire que :

    • si la variable pointA == “P” alors les variables pointB et pointC doivent être différentes de S et de C
    • si pointB == “P” alors pointC doit être différente de S et de C
    • si (pointA == “F”|| pointA == “R”) alors les variables pointB et pointC doivent être différentes de N
    • si (pointB == “F”|| pointB == “R”) alors la variables pointC doit être différente de N

    …ça va encore !

    On peut modifier la seconde expression régulière en /P.?(S|C|D|Q|T)|(F|R).?N|F.?O|L.?R|W.?C|GPT/, ce qui donne :

    var pointsABC="";
    while (pointsABC.length<3) {
    pointsABC+=String.fromCharCode(65+Math.floor(Math.random()*26));
    if (/^(?=.*(.).*\1)[A-Z]{1,3}$/.test(pointsABC) || /P.?(S|C|D|Q|T)|(F|R).?N|F.?O|L.?R|W.?C|GPT/.test(pointsABC)) var pointsABC=pointsABC.slice(0,-1);
    }

    @+
    😎

    • Cette réponse a été modifiée le il y a 1 mois par bebarth.
    en réponse à : Ajout de line de code avec JavaScript #75496
    bebarth
    Maître des clés

    bonjour,
    Attention aux scripts “Souris relâchée” pour les menus déroulants qui s’exécutent avant de relâcher réellement.
    Je pense qu’il vaut mieux utiliser un script de touches personnalisé tel que :
    if (!event.willCommit) fillDropdown();

    Donc pour placer cette ligne en Script de touches personnalisé de tous les menus déroulants il faut exécuter :
    for (var i=0; i<this.numFields; i++) {
    var f=this.getField(this.getNthFieldName(i));
    if (f.type=="combobox") f.setAction("Keystroke", "if (!event.willCommit) fillDropdown();");
    }

    Pour ajouter une petite précision, on peut utiliser if (event.willCommit)... si on est certain que la case “Valider la valeur sélectionnée immédiatement” est cochée, mais pour être certain que celà fonctionne j’ai l’habitude d’utiliser if (!event.willCommit)...

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Raccourcir un script #75488
    bebarth
    Maître des clés

    bonjour,
    J’ai eu le temps de réfléchir à “comment réduire le script” hier pendant que je conduisais sur mon chemin du retour…
    Voici donc le résultat de ma réflexion après l’avoir testé ce matin :
    var pointsABC="";
    while (pointsABC.length<3) {
    pointsABC+=String.fromCharCode(65+Math.floor(Math.random()*26))
    if (/^(?=.*(.).*\1)[A-Z]{1,3}$/.test(pointsABC) || /PS|PC|FN|RN|FO|LR|PD|PQ|WC|GPT|PT/.test(pointsABC)) var pointsABC=pointsABC.slice(0,-1);
    }
    console.println(pointsABC);

    On peut donc récupérer chaque point si nécessaire en “splitant” la chaine pointsABC.

    Une autre réflexion m’en est ensuite venue : les couples/trios de lettres interdits le sont ici pour des points consécutifs et dans l’ordre (AB et BC) mais doivent-ils également l’être dans un autre ordre (BA, CB ou AC et CA) ??? Ça risque de compliquer un peu l’expression régulière…

    @+
    😎

    en réponse à : Raccourcir un script #75470
    bebarth
    Maître des clés

    Je pense que ça devrait être ça !

    @+
    😎

    en réponse à : Raccourcir un script #75467
    bebarth
    Maître des clés

    bonjour,
    le principe est le bon mais il faut aussi vérifier que les 3 lettres sont différentes.
    Je pourrai regarder à mon retour mercredi ou jeudi…

    @+
    😎

    en réponse à : Renommer indice 2 #75460
    bebarth
    Maître des clés

    bonjour,
    Il suffit de faire la même chose avec la variable P3 qu’il était fait avec la variable P2. Donc :

    function Renommer_c() {

    for (var i=0; i<this.numFields; i++) {
    var nomChamp=this.getNthFieldName(i);
    //décomposer les noms de champs en 3 parties séparées par les points : P1 ; P2 et P3
    var b = nomChamp.split(".");
    var P1 = (b[0]);
    var P2 = (b[1]);
    var P3 = (b[2]);
    var P3a = this.getField("indice2_ancien").value;
    var P3n = this.getField("indice2_nouveau").value;

    if (P3==P3a) {
    renommerChamp (nomChamp,P1+"."+P2+"."+P3n);
    this.removeField(nomChamp);
    }
    }
    }
    function renommerChamp (leNom,nouveauNom) {
    try {
    g = this.getField(leNom);
    var laValeur=g.value;
    var leType=g.type;
    var laPage=String(g.page);
    var lesPages=laPage.split(",");
    for (var p=0; p<lesPages.length; p++) {
    var cettePage=Number(lesPages[p]);
    if (lesPages.length>1) {
    var nomChamp=leNom+"."+p;
    } else {
    var nomChamp=leNom;
    }
    g=this.getField(nomChamp);
    var lesCoord=g.rect;
    var f = this.addField(nouveauNom, leType, cettePage, lesCoord);
    f = this.getField(nouveauNom);
    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.strokeColor=["RGB",0,147/255,0];
    f.fillColor=color.white;
    //f.display=display.hidden;
    if (leType=="combobox" || leType=="listbox") {
    var liste=new Array();
    for (var k=0; k<g.numItems; k++) {
    var valeur = g.getItemAt(k,false);
    var valeurExport = g.getItemAt(k,true);
    var element=[valeur,valeurExport];
    liste.push(element);
    }
    f.setItems(liste);
    f.currentValueIndices=g.currentValueIndices;
    }
    if (leType=="button") {
    f.buttonSetIcon(g.buttonGetIcon());
    f.buttonSetCaption(g.buttonGetCaption());
    }
    }
    } catch(e) {app.alert("\nLe champ \""+leNom+"\"\rn'existe pas dans ce document.")}
    }

    Et comme le dit Merlin, si les champs possèdent des scripts il est impossible de les recopier.
    De même, il n’est pas possible de recopier les formats (mais on peut les définir si on les connait).

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : fonction aleatoire #75454
    bebarth
    Maître des clés

    bonjour,
    Il suffit de mettre la boucle en fonction !

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Ajout de line de code avec JavaScript #75445
    bebarth
    Maître des clés

    bonjour,
    C’est ce qu’est censé faire le fichier que j’ai partagé !

    @+
    😎

    en réponse à : Ajout de line de code avec JavaScript #75440
    bebarth
    Maître des clés

    bonjour,
    Je ne suis pas certain d’avoir tout compris, mais au cas où voici un fichier que j’avais fait à partir du fichier “Texte2Unicode” de Merlin.
    Ce fichier ajoute un caractère d’échappement pour différents cas. Tu me dis…

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Vérification et tri #75433
    bebarth
    Maître des clés

    bonjour,
    Il y avait plusieurs méthodes pour pallier ce message. En voici une :
    // Script de document
    var dropdownName="gato";
    var dropdownNumber=0;
    for (var i=0; i<this.numFields; i++) {
    if (this.getField(this.getNthFieldName(i)).name.indexOf(dropdownName+".")==0) dropdownNumber++;
    }
    var listeEleves=this.getField("entreesListe").value;
    var lesEleves=listeEleves.split("\r");
    lesEleves.sort(function(a,b){return a.localeCompare(b)});
    function liste() {
    lesNoms=lesEleves.map(function(element) {return [element.split("/")[0],element]});
    var theIndex=event.target.name.substr(event.target.name.indexOf(".")+1);
    theValue=event.target.value;
    for (var i=0; i<dropdownNumber; i++) {
    if (i!=theIndex) {
    var laPosition=this.getField(dropdownName+"."+i).currentValueIndices;
    for (j=0; j<lesNoms.length; j++) {
    if (lesNoms[j][0]==this.getField(dropdownName+"."+i).getItemAt(laPosition,false) && this.getField(dropdownName+"."+i).value!="-") {
    lesNoms.splice(j,1);
    break;
    }
    }
    }
    }
    }
    function fillDropdown() {
    liste();
    event.target.setItems(lesNoms);
    event.target.value=theValue;
    }
    function selection() {
    var theIndex=event.target.name.substr(event.target.name.indexOf(".")+1);
    if (event.changeEx=="-") this.getField("Group."+theIndex).value="-";
    else this.getField("Group."+theIndex).value=event.changeEx.split("/")[1];
    liste();
    if (event.changeEx=="-") this.getField("nonListes").value=lesNoms.length-1;
    else this.getField("nonListes").value=lesNoms.length-2;
    }
    function comptage() {
    lesNoms=lesEleves.map(function(element) {return [element.split("/")[0],element]});
    for (var i=0; i<dropdownNumber; i++) {
    var laPosition=this.getField(dropdownName+"."+i).currentValueIndices;
    for (j=0; j<lesNoms.length; j++) {
    if (lesNoms[j][0]==this.getField(dropdownName+"."+i).getItemAt(laPosition,false) && this.getField(dropdownName+"."+i).value!="-") {
    lesNoms.splice(j,1);
    break;
    }
    }
    }
    this.getField("nonListes").value=lesNoms.length-1;
    }
    comptage();

    Avec mon script, le bouton “Vérifier n’a plus lieu d’être” vu que les champs “Group” sont rempli automatiquement lors de chaque sélection d’élève.

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Vérification et tri #75430
    bebarth
    Maître des clés

    Oups ! Ça vient de la mise en fonction… et “event.target.name” lancé depuis le script de document n’a aucun sens… Je regarde demain !

    Par contre, je ne comprends pas ta copie d’écran !!! Ça fonctionne chez moi.

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Vérification et tri #75426
    bebarth
    Maître des clés

    bonjour,
    Je viens de finaliser le script.
    J’ai un peu galéré sur une erreur que je qualifierais “de débutant” (“<=” au lieu de “<“), mais avec un instant de lumière pendant la nuit j’ai enfin pu débloquer le script que voici :

    // Script de document
    var dropdownName="gato";
    var dropdownNumber=0;
    for (var i=0; i<this.numFields; i++) {
    if (this.getField(this.getNthFieldName(i)).name.indexOf(dropdownName+".")==0) dropdownNumber++;
    }
    function liste() {
    var listeEleves=this.getField("entreesListe").value;
    var lesEleves=listeEleves.split("\r");
    lesEleves.sort(function(a,b){return a.localeCompare(b)});
    lesNoms=lesEleves.map(function(element) {return [element.split("/")[0],element]});
    var theIndex=event.target.name.substr(event.target.name.indexOf(".")+1);
    theValue=event.target.value;
    for (var i=0; i<dropdownNumber; i++) {
    if (i!=theIndex) {
    var laPosition=this.getField(dropdownName+"."+i).currentValueIndices;
    for (j=0; j<lesNoms.length; j++) {
    if (lesNoms[j][0]==this.getField(dropdownName+"."+i).getItemAt(laPosition,false) && this.getField(dropdownName+"."+i).value!="-") {
    lesNoms.splice(j,1);
    break;
    }
    }
    }
    }
    }
    function fillDropdown() {
    liste();
    event.target.setItems(lesNoms);
    event.target.value=theValue;
    }
    function selection() {
    var theIndex=event.target.name.substr(event.target.name.indexOf(".")+1);
    if (event.changeEx=="-") this.getField("Group."+theIndex).value="-";
    else this.getField("Group."+theIndex).value=event.changeEx.split("/")[1];
    liste();
    if (event.changeEx=="-") this.getField("nonListes").value=lesNoms.length-1;
    else this.getField("nonListes").value=lesNoms.length-2;
    }
    liste();
    this.getField("nonListes").value=lesNoms.length-1;

    // Pour placer les scripts sur tous les menus déroulants
    for (var i=0; i<this.numFields; i++) {
    var nomChamp=this.getNthFieldName(i);
    if (nomChamp.indexOf("gato.")==0) {
    this.getField(nomChamp).setAction("MouseEnter", "fillDropdown();");
    this.getField(nomChamp).setAction("Keystroke", "if (!event.willCommit) {selection();}");
    };
    }

    Tu me dis si tu as des questions…

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Vérification et tri #75425
    bebarth
    Maître des clés

    bonjour,
    Je ne vais pas vous raconter ma vie, mais pour info j’ai terminé mais je ne pense pas avoir le temps de peaufiner le script aujourd’hui… Certainement demain !

    @+
    😎

    en réponse à : Vérification et tri #75417
    bebarth
    Maître des clés

    bonsoir,
    Je regarde rapidement…
    Je pense faire en sorte que lorsqu’un nom a été sélectionné il n’apparaisse plus dans les autres menus déroulants et afficher le nombre de noms qui n’ont pas encore été sélectionnés.
    Ça te conviendrait ???

    @+
    😎

    en réponse à : Vérification et tri #75411
    bebarth
    Maître des clés

    bonjour,
    Voici ma proposition :
    var listeEleves=this.getField("entreesListe").value;
    var VP1=[];
    var VTR=[];
    var VP2=[];
    var Alternance=[];
    var inconnus=[];
    var elevesX2=[];
    var lesEleves=listeEleves.split("\r");
    lesEleves.sort(function(a,b){return a.localeCompare(b)});
    var elevePrecedent="";
    for (var i=0; i<lesEleves.length; i++) {
    var unEleve=lesEleves.split("/");
    try {
    if (unEleve[0]==elevePrecedent) elevesX2.push(unEleve[0]);
    switch (unEleve[1]) {
    case "VP1":
    VP1.push(unEleve[0]);
    break;
    case "VTR":
    VTR.push(unEleve[0]);
    break;
    case "VP2":
    VP2.push(unEleve[0]);
    break;
    case "Alternance":
    Alternance.push(unEleve[0]);
    break;
    default:
    if (unEleve[0]!="-") inconnus.push(unEleve[0]);
    }
    var elevePrecedent=unEleve[0]
    } catch(e) {}
    }
    this.getField("groupe.1.1").value=VP1.toString().replace(/,/g,"\r");
    this.getField("groupe.1.2").value=VP1.length;
    this.getField("groupe.2.1").value=VTR.toString().replace(/,/g,"\r");
    this.getField("groupe.2.2").value=VTR.length;
    this.getField("groupe.3.1").value=VP2.toString().replace(/,/g,"\r");
    this.getField("groupe.3.2").value=VP2.length;
    this.getField("groupe.4.1").value=Alternance.toString().replace(/,/g,"\r");
    this.getField("groupe.4.2").value=Alternance.length;
    if (inconnus.length) app.alert("Les élèves suivants n'ont pas de groupe :\r"+inconnus.toString().replace(/,/g,"\r"),3);
    else app.alert("Tous les élèves ont un groupe.",3);
    if (elevesX2.length) app.alert("Les élèves suivants sont dans plusieurs groupes :\r"+elevesX2.toString().replace(/,/g,"\r"),3);

    Ceci est une version où l’on indique les noms des champs et des variables. On aurait pu en faire une qui les trouve automatiquement, mais ça complique un peu le script… Je me suis dit “commençons par le plus simple, on verra si il y a de la demande !”.

    @+
    😎

    • Cette réponse a été modifiée le il y a 1 mois et 3 semaines par bebarth.
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Effet au survol d’un champ #75386
    bebarth
    Maître des clés

    bonjour,
    Dans ton fichier tu exécutes un script “affiche();”, par exemple, qui est une fonction mais qui ici n’est définie nulle part…
    Lorsque les fonctions sont fréquemment utilisées dans un document, on les place souvent en script de document. Il n’y en a pas dans ton fichier.

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Effet au survol d’un champ #75380
    bebarth
    Maître des clés

    J’avais pas bien lu… Voilà !

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Effet au survol d’un champ #75377
    bebarth
    Maître des clés

    bonjour,
    Voici un exemple de ce que tu pourrais faire…

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Scripts de document #75373
    bebarth
    Maître des clés

    J’espère que ça t’as bien avancé… 😉

    en réponse à : Scripts de document #75364
    bebarth
    Maître des clés

    bonjour et Bonne Année !
    Je ne peux te donner que mon avis. Je ne suis pas assez calé en programmation/informatique pour savoir si cela à un impact sur la vitesse ou la fluidité d’exécution…
    Pour ma part, donc, je préfère diviser les différents scripts nécessaires pour faciliter la lecture et ainsi retrouver plus facilement des éventuelles erreurs. Vu qu’en général on avance petit à petit dans le document on ajoute au fur et à mesure différents scripts de document. Généralement j’en crée un premier où je mets les différentes variables utilisées fréquemment par d’autres scripts ainsi que les scripts d’ouverture, puis les autres scripts de document sont généralement des fonctions.
    Par contre, je ne suis pas pour tout mettre en fonction. Cela rend le script plus compliqué à comprendre. Il ne faut donc les utilisées que lorsqu’elles sont appelées fréquemment. Si on a des centaines de champs et que tous les scripts sont en script de calcul cela va énormément rallonger les temps de calcul…

    @+
    Par contre, ce qui est important pour des formulaires compliqués ou avec beaucoup de champs à calculer, c’est de savoir lancer les scripts par les bons évènements.

    en réponse à : Custom Tool – avec multiples niveaux #75355
    bebarth
    Maître des clés

    Je viens de te répondre par mail.

    @+
    😎

    en réponse à : Renommer indices #75353
    bebarth
    Maître des clés

    Tu as même fait en sorte de ne pas re-créer les champs R.a.b s’ils sont déjà présents…

    Dans mon script les champs R.a.b sont effacés s’ils existent (d’où le try) :
    try {
    this.removeField("R."+P2+"."+P3);
    } catch(e) {};
    avant d’être re-créés :
    renommerChamp ("Q."+P2+"."+P3,"R."+P2+"."+P3);

    @+
    😎

    en réponse à : Renommer indices #75350
    bebarth
    Maître des clés

    bonjour,
    Tu pourrais aussi faire ça dans le même fichier !
    function Renommer_c() {
    //récuperer les noms de tous les champs
    for (var i=0; i<this.numFields; i++) {
    var nomChamp=this.getNthFieldName(i);
    //décomposer les noms de champs en 3 parties séparées par les points : P1 ; P2 et P3
    var b = nomChamp.split(".");
    var P1 = (b[0]);
    var P2 = (b[1]);
    var P3 = (b[2]);
    //Si l'on désire modifier la partie 1 et que la partie 1 correspond à l'entrée saisie dans le champ Name.3.1
    if (P1=="Q") {
    try {
    this.removeField("R."+P2+"."+P3);
    } catch(e) {};
    renommerChamp ("Q."+P2+"."+P3,"R."+P2+"."+P3);
    }
    }
    }
    function renommerChamp (leNom,nouveauNom) {
    try {
    g = this.getField(leNom);
    var laValeur=g.value;
    var leType=g.type;
    var laPage=String(g.page);
    var lesPages=laPage.split(",");
    for (var p=0; p<lesPages.length; p++) {
    var cettePage=Number(lesPages[p]);
    if (lesPages.length>1) {
    var nomChamp=leNom+"."+p;
    } else {
    var nomChamp=leNom;
    }
    g=this.getField(nomChamp);
    var lesCoord=g.rect;
    var lesAutresCoord=[lesCoord[0],lesCoord[1]+30,lesCoord[2],lesCoord[3]+30];
    var f = this.addField(nouveauNom, leType, cettePage, lesAutresCoord);
    f = this.getField(nouveauNom);
    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.strokeColor=["RGB",0,147/255,0];
    f.fillColor=color.white;
    //f.display=display.hidden;
    if (leType=="combobox" || leType=="listbox") {
    var liste=new Array();
    for (var k=0; k<g.numItems; k++) {
    var valeur = g.getItemAt(k,false);
    var valeurExport = g.getItemAt(k,true);
    var element=[valeur,valeurExport];
    liste.push(element);
    }
    f.setItems(liste);
    f.currentValueIndices=g.currentValueIndices;
    }
    if (leType=="button") {
    f.buttonSetIcon(g.buttonGetIcon());
    f.buttonSetCaption(g.buttonGetCaption());
    }
    }
    } catch(e) {app.alert("\nLe champ \""+leNom+"\"\rn'existe pas dans ce document.")}
    }

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Renommer indices #75338
    bebarth
    Maître des clés

    bonjour,
    J’ai beaucoup mieux compris avec ta vidéo, et du coup je me suis aperçu qu’il y avait une erreur dans mon script (pour les menus déroulants et les listes).
    Il faut supprimer une ligne de script :
    ...
    if (leType=="combobox" || leType=="listbox") {
    var liste=new Array();
    for (var k=0; k<g.numItems; k++) {
    var valeur = g.getItemAt(k,false);
    var valeurExport = g.getItemAt(k,true);
    //       <----- Suppimer cette ligne
    var element=[valeur,valeurExport];
    liste.push(element);
    }
    f.setItems(liste);
    f.currentValueIndices=g.currentValueIndices;
    }
    ...
    Je ne me souviens pas pourquoi je l’avais mise !!! Peut-être pour une application spécifique.
    En tout cas cela fonctionne beaucoup mieux maintenant…

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Renommer indices #75332
    bebarth
    Maître des clés

    Je vais faire une petite vidéo si c’est trop confus…

    Je veux bien car je ne suis pas certain de comprendre !

    @+
    😎

    en réponse à : Custom Tool – avec multiples niveaux #75327
    bebarth
    Maître des clés

    bonjour,
    Je viens de relire ta demande, et en fait (si j’ai bien compris) tu pouvais n’utiliser que la partie “bouton” du fichier que je t’ai envoyé !
    Voici un exemple fait avec la méthode “popUpMenuEx” de l’api reference.

    //######################
    // * b2Tools * #
    // 12/24 #
    // ----------- #
    // PersoTool Example #
    // Exemple Outil Perso #
    //######################
    if (typeof app.formsVersion!="undefined" && app.formsVersion>9 && app.viewerVariation!="Reader") {
    // Traductions
    if (app.language=="FRA") {
    var txtBoutonPersoTool="Outil Perso"; // Texte bouton
    var txtInfoPersoTool="Infobulle"; // Infobulle bouton
    }
    else {
    var txtBoutonPersoTool="Personal Tool"; // Button text
    var txtInfoPersoTool="Tooltip"; // Button tooltip
    }
    // Exécution du script
    var executePersoTool=app.trustedFunction(function(){
    // Traductions
    if (app.language=="FRA") {
    var b2txt00="\u00C9l\u00E9ment 1";
    var b2txt01="\u00C9l\u00E9ment 2";
    var b2txt02="\u00C9l\u00E9ment 2, Sous-menu 1";
    var b2txt03="\u00C9l\u00E9ment 2, Sous-menu 2";
    var b2txt04="\u00C9l\u00E9ment 2, Sous-menu 2, Sous-sous-menu 1";
    var b2txt05="0";
    var b2txt06="\u00C9l\u00E9ment 3";
    var b2txt07="\u00C9l\u00E9ment 4";
    var b2txt08="1";
    var b2txt09="Vous avez choisi l'\u00E9l\u00E9ment menu \"";
    var b2txt10="\"";
    }
    else {
    var b2txt00="Item 1";
    var b2txt01="Item 2";
    var b2txt02="Item 2, Submenu 1";
    var b2txt03="Item 2, Submenu 2";
    var b2txt04="Item 2, Submenu 2, Subsubmenu 1";
    var b2txt05="0";
    var b2txt06="Item 3";
    var b2txt07="Item 4";
    var b2txt08="1";
    var b2txt09="You chose the \"";
    var b2txt10="\" menu item";
    }
    //
    var cChoice=app.popUpMenuEx(
    {
    cName: b2txt00,
    bMarked:true,
    bEnabled:false
    },{
    cName: "-"
    },{
    cName: b2txt01,
    oSubMenu: [
    {
    cName: b2txt02
    },{
    cName: b2txt03,
    oSubMenu: {
    cName:b2txt04,
    cReturn: b2txt05
    }
    }
    ]
    },{
    cName: b2txt06
    },{
    cName: b2txt07,
    bMarked: true,
    cReturn: b2txt08
    }
    )
    app.alert(b2txt09+cChoice+"\" menu item");
    //
    });
    // Icône PersoTool
    var dataIconePersoTool="ffffffffff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ffffffffff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3fffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff00ada3ff00ada3ff00ada3ff00ada3fffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff00ada3ff00ada3ff00ada3ff00ada3fffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff00ada3ff00ada3ff00ada3ff00ada3fffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff00ada3ff00ada3ff00ada3ff00ada3fffff7aefffff7aefffff7aefffff7aeffcb0000ffcb0000ffcb0000ffcb0000fffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff00ada3ff00ada3ff00ada3ff00ada3fffff7aefffff7aefffff7aefffff7aeffcb0000fffff7aefffff7aefffff7aeffcb0000fffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff00ada3ff00ada3ff00ada3ff00ada3fffff7aefffff7aefffff7aefffff7aeffcb0000fffff7aefffff7aeff21221fffcb0000ff21221fff21221fff21221ffffff7aefffff7aefffff7aefffff7aeff00ada3ff00ada3ff00ada3ff00ada3fffff7aefffff7aefffff7aefffff7aeffcb0000ffcb0000ffcb0000ffcb0000fffff7aeff21221ffffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff00ada3ff00ada3ff00ada3ff00ada3fffff7aefffff7aefffff7aefffff7aeffcb0000fffff7aefffff7aefffff7aefffff7aeff21221ffffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff00ada3ff00ada3ff00ada3ff00ada3fffff7aefffff7aefffff7aefffff7aeffcb0000fffff7aefffff7aefffff7aefffff7aeff21221ffffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff00ada3ff00ada3ff00ada3ff00ada3fffff7aefffff7aefffff7aefffff7aeffcb0000fffff7aefffff7aefffff7aefffff7aeff21221ffffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff00ada3ff00ada3ff00ada3ff00ada3fffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff21221ffffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff00ada3ff00ada3ff00ada3ff00ada3fffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff21221ffffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff00ada3ff00ada3ff00ada3ff00ada3fffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff00ada3ff00ada3ff00ada3ff00ada3fffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff00ada3ff00ada3ff00ada3ff00ada3fffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ffffffffff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ffffffff";
    var IconePersoTool={
    count: 0,
    width: 20,
    height: 20,
    read: function(nBytes){return dataIconePersoTool.slice(this.count,this.count+=nBytes);}
    };
    // Bouton PersoTool
    var objetBoutonPersoTool={
    cName: "nomBoutonPersoTool",
    cExec: "executePersoTool(event.target);",
    cEnable: "event.rc=(app.doc!=null)",
    cMarked: "event.rc=false",
    cTooltext: txtInfoPersoTool,
    oIcon: IconePersoTool,
    cLabel: txtBoutonPersoTool
    };
    //
    try {
    app.removeToolButton("nomBoutonPersoTool");
    } catch(e){}
    try {
    app.addToolButton(objetBoutonPersoTool);
    } catch(e){}
    }
    //########################
    // That's all folks! #
    // et pis c'est tout ! #
    // @+ #
    // bebarth #
    //########################

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Renommer indices #75326
    bebarth
    Maître des clés

    bonjour,
    …et pareil que Merlin : félicitations pour ce que tu fais !

    Je n’ai pas bien suivi ces derniers jours, du coup tu en es où dans tes demandes ?
    Si tu peux me repréciser ! Merci.

    @+
    😎

    en réponse à : Custom Tool – avec multiples niveaux #75312
    bebarth
    Maître des clés

    …je ne pense pas l’avoir déjà fait alors !

    @+
    😎

    en réponse à : Custom Tool – avec multiples niveaux #75308
    bebarth
    Maître des clés

    bonjour,
    Je t’ai envoyé mon fichier modèle que j’utilise lorsque je crée des utilitaires.
    Je ne le partage pas ici car c’est un peu compliqué et ça a été un peu de boulot à faire, mais je peux le partager sur demande.

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Custom Tool – avec multiples niveaux #75306
    bebarth
    Maître des clés

    bonjour Jean-Claude,
    Envoie-moi une adresse mail en MP à “bebarth arrobase sfr point fr” où je peux te faire parvenir un exemple.

    @+
    😎

    en réponse à : Renommer indices #75302
    bebarth
    Maître des clés

    bonjour,
    Voici les lignes pour pouvoir supprimer les anciens champs avec ton script :

    function Renommer_c() {
    var anciensChamps=[];
    for (var i=0; i<this.numFields; i++) {
    var nomChamp=this.getNthFieldName(i);
    var Menu = this.getField("Menu").value;
    var CaR = this.getField("nom_champ").value;
    var an = this.getField("AN").value;
    var P1new = this.getField("NN").value;
    var P2new = this.getField("NN").value;
    var b = nomChamp.split(".");
    var P1 = (b[0]);
    var P2 = (b[1]);
    var P3 = (b[2]);

    if (Menu == 1 && an == P1) {
    try{
    var ts=this.getField(P1+"."+P2+"."+P3).textSize;
    var tf=this.getField(P1+"."+P2+"."+P3).textFont;
    var rct=this.getField(P1+"."+P2+"."+P3).rect;
    var pg=this.getField(P1+"."+P2+"."+P3).page;
    var f=this.addField(P1new+"."+P2+"."+P3,"text",pg,rct);
    anciensChamps.push(P1+"."+P2+"."+P3);
    f.textSize=ts;
    f.textFont=tf;
    }catch(e){break}
    //this.removeField(P1+"."+P2+"."+P3)
    }

    if (Menu == 2 && an == P2 && CaR == P1) {
    try{
    var ts=this.getField(P1+"."+P2+"."+P3).textSize;
    var tf=this.getField(P1+"."+P2+"."+P3).textFont;
    var rct=this.getField(P1+"."+P2+"."+P3).rect;
    var pg=this.getField(P1+"."+P2+"."+P3).page;
    var f=this.addField(P1+"."+P2new+"."+P3,"text",pg,rct);
    anciensChamps.push(P1+"."+P2+"."+P3);
    f.textSize=ts;
    f.textFont=tf;
    }catch(e){break}
    //this.removeField(P1+"."+P2+"."+P3)
    //app.alert("Champ retiré : "+P1+"."+P2+"."+P3);
    }

    }
    for (var j=0; j<anciensChamps.length; j++) this.removeField(anciensChamps[j]);
    }

    Ton script fonctionne correctement, par contre il ne duplique pas toutes les propriétés. Tu devrais plutôt t’inspirer du miens…

    Pour ce qui est de ton autre problème ce n’est pas très compliqué, il suffit de créer le nouveau champ juste au dessus de l’ancien et de ne pas l’insérer dans la table des champs à supprimer si son nom est “Q”. J’essayerai de te faire ça demain !

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Renommer indices #75298
    bebarth
    Maître des clés

    …en gros lorsque tu ajoutes un nouveau champ et que tu effaces l’ancien immédiatement cela modifie la numérotation des champs c’est pourquoi ils ne sont pas tous remplacés.
    Alors que si tu rajoutes des champs sans supprimer les anciens immédiatement, la numérotation reste identique avec de nouveaux numéros à la fin. il faut donc créer tous les nouveaux avant de supprimer tous les anciens !

    Ai-je été compréhensible ???

    @+
    😎

    en réponse à : Renommer indices #75296
    bebarth
    Maître des clés

    bonjour,
    J’ai mixé ton script avec le mien répondre rapidement à ton problème.

    function Renommer_c() {
    var anciensChamps=[];
    //récuperer les noms de tous les champs
    for (var i=0; i<this.numFields; i++) {
    var nomChamp=this.getNthFieldName(i);
    //déclarer les variables
    var aN = this.getField("Name.3.1").value;
    var nN = this.getField("Name.3.2").value
    var CaR = this.getField("nom_champ").value;
    var Menu = this.getField("Menu").value;
    //décomposer les noms de champs en 3 parties séparées par les points : P1 ; P2 et P3
    var b = nomChamp.split(".");
    var P1 = (b[0]);
    var P2 = (b[1]);
    var P3 = (b[2]);

    //Si l'on désire modifier la partie 1 et que la partie 1 correspond à l'entrée saisie dans le champ Name.3.1
    if (Menu == 1 && aN == P1) {
    //déclarer la variable P1new (nouveau nom pour la partie 1)
    var P1new = nN;
    anciensChamps.push(P1+"."+P2+"."+P3);
    renommerChamp (P1+"."+P2+"."+P3,P1new+"."+P2+"."+P3);
    }

    //Si l'on désire modifier la partie 2 et que la partie 2 correspond à l'entrée saisie dans le champ Name.3.1 et que la partie 1 correspond à la variable CaR
    if (Menu == 2 && aN == P2 && CaR == P1) {
    //déclarer la variable P2new (nouveau nom pour la partie 2)
    var P2new = nN;
    anciensChamps.push(P1+"."+P2+"."+P3);
    renommerChamp (P1+"."+P2+"."+P3,P1+"."+P2new+"."+P3);
    }
    }
    for (var j=0; j<anciensChamps.length; j++) this.removeField(anciensChamps[j]);
    }
    function renommerChamp (leNom,nouveauNom) {
    try {
    g = this.getField(leNom);
    var leType=g.type;
    var laPage=String(g.page);
    var lesPages=laPage.split(",");
    for (var p=0; p<lesPages.length; p++) {
    var cettePage=Number(lesPages[p]);
    if (lesPages.length>1) {
    var nomChamp=leNom+"."+p;
    } else {
    var nomChamp=leNom;
    }
    g=this.getField(nomChamp);
    var lesCoord=g.rect;
    var f = this.addField(nouveauNom, leType, cettePage, lesCoord);
    f = this.getField(nouveauNom);
    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) {}
    }
    if (leType=="combobox" || leType=="listbox") {
    var liste=new Array();
    for (var k=0; k<g.numItems; k++) {
    var valeur = g.getItemAt(k,false);
    var valeurExport = g.getItemAt(k,true);
    if (valeur==valeurExport) valeurExport="";
    var element=[valeur,valeurExport];
    liste.push(element);
    }
    f.setItems(liste);
    f.currentValueIndices=g.currentValueIndices;
    }
    if (leType=="button") {
    f.buttonSetIcon(g.buttonGetIcon());
    f.buttonSetCaption(g.buttonGetCaption());
    }
    }
    } catch(e) {app.alert("\nLe champ \""+leNom+"\"\rn'existe pas dans ce document.")}
    }

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Action “Lire un son” #75220
    bebarth
    Maître des clés

    Je n’avais pas pensé à essayer avec mon émulateur… Du coup ça fonctionne bien sur PC.

    je me demande si tu ne devrais pas plutôt utiliser l’action souris relâchée

    J’avais pensé à la souris appuyée vu que sur un piano la note se joue lorsqu’on appuie sur la touche et non lorsqu’on la relâche.

    @+
    😎

    en réponse à : Action “Lire un son” #75215
    bebarth
    Maître des clés

    bonjour Merlin,

    Il me semble que c’est un vieux bug de la version Mac

    …comme ça j’aurai plus vite terminé ce que je voulais faire !

    @+
    😎

    PS : J’ai pas mis toutes les notes sinon le fichier ne passait pas;

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Champ image #75207
    bebarth
    Maître des clés

    bonjour,
    En fait, tout se passe à la création de ton champ image qui te propose un nom avec le suffixe “_af_image”.
    Si tu gardes ce nom et que tu le modifies ensuite le suffixe est caché mais bien présent pour une recherche en JavaScript.
    Si lors de la création tu modifies le nom en retirant le suffixe, il ne comporte définitivement pas ce suffixe, même en recherche via JavaScript.
    C’est peut-être (voir certainement) ce qui t’arrives, et si c’est le cas je ne vois pas comment différencier un bouton d’un champ image en JavaScript !!!

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Probleme Javascript dans PDF #75201
    bebarth
    Maître des clés

    bonjour,
    Voici une solution possible. Ici on ne peut écrire que sous le code sous format désiré (2 chiffres, 1 point, 2 chiffres et 1 lettre) et le nombre d’éléments possibles est indiqué si il est multiple ou nul. S’il n’y en a qu’un, l’élément est directement affiché.
    On pourrait également modifier le script pour ne permettre de taper que les codes disponibles… Tu me dis !

    // script de document
    this.getField("codeInput").value="";
    this.getField("filteredOptions").clearItems();
    var p=this.getDataObject(this.dataObjects[0].name);
    var fichier=this.getDataObjectContents(p.name);
    var donnees=util.stringFromStream(fichier);
    var rangees=donnees.split("\n");
    var colonnes=new Array();
    for (var i=0; i<rangees.length; i++) colonnes=rangees.split(";");
    var cellule=new Array();
    for (var j=0; j<colonnes.length; j++) cellule[j]=[colonnes[j][1].replace(/\s$/,""),colonnes[j][0]];
    cellule[0][0]="- "+(cellule.length-1)+" éléments -";
    this.getField("filteredOptions").setItems(cellule);

    // Script de touches personnalisé
    if (!event.willCommit) {
    event.change=event.change.toUpperCase();
    var aTester=event.value.split("");
    aTester.splice(event.selStart,event.selEnd-event.selStart,event.change);
    var testeChaine=aTester.join("");
    if (testeChaine.length<6) testOK=/^(\d{1,2}([.](\d{1,2})?)?)?$/.test(testeChaine);
    else testOK=/^\d{2}[.]\d{2}[a-zA-Z]$/.test(testeChaine);
    event.rc=testOK;
    if (testOK) {
    var lesElements=[];
    for (var i=1; i<cellule.length; i++) {
    if (cellule[1].indexOf(testeChaine)==0) lesElements.push([cellule[0],cellule[1]]);
    }
    var nb=lesElements.length;
    if (nb!=1) lesElements.unshift("- "+nb+" élément(s) -");
    this.getField("filteredOptions").setItems(lesElements);
    }
    } else {
    if (event.value.length<6) testOK=/^(\d{1,2}([.](\d{1,2})?)?)?$/.test(event.value);
    else testOK=/^\d{2}[.]\d{2}[a-zA-Z]$/.test(event.value);
    event.rc=testOK;
    }

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Champ image #75194
    bebarth
    Maître des clés

    bonjour,
    Le type de champ “image” n’existe pas en JavaScript.
    https://opensource.adobe.com/dc-acrobat-sdk-docs/library/jsapiref/JS_API_AcroJS.html#id619
    Un champ image est un champ de type bouton auquel on ajoute une action permettant d’ajouter ou modifier l’image et dont le nom “réel” est modifié en rajoutant un suffixe “_af_image” (cf. copie d’écran jointe).
    On pourrait donc écrire :
    if (nomChamp.indexOf("Question")==0 && nomChamp.indexOf("_af_image")>0) this.getField(nomChamp).readonly=true;

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Probleme Javascript dans PDF #75179
    bebarth
    Maître des clés

    Peux-tu partager un fichier Excel (au format csv ou txt) ou une partie de ce fichier et m’indiquer les cellules utiles.

    @+
    😎

    en réponse à : Probleme Javascript dans PDF #75176
    bebarth
    Maître des clés

    bonjour,
    Si les données sont extraites d’un fichier Excel, pourquoi ne pas attacher un fichier au pdf ?

    @+
    😎

    en réponse à : Supprimer les icônes #75170
    bebarth
    Maître des clés

    bonjour,
    Tu peux retirer les icônes de l’obet icon avec la méthode “removeIcon” : https://opensource.adobe.com/dc-acrobat-sdk-docs/library/jsapiref/doc.html#removeicon
    Ci-joint un fichier exemple.

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Identifier la couleur des champs en exportant les données #75140
    bebarth
    Maître des clés

    bonjour,
    Si je peux donner mon avis, l’extraction de toutes les données que propose Acrobat n’est pas toujours la meilleur solution car on récolte les valeurs de tous les champs, même de ceux qu’on n’a pas besoin (cases à cocher, boutons radio,…).
    Personnellement j’opterais pour un script qui n’extrait que les valeurs souhaitées et dans ce cas on pourrait extraire directement la couleur des champs que l’on aurait par exemple indiquée en info-bulle lors du changement de couleur. cela permettrait d’avoir un document affiché uniquement avec les désignations (sans le nom de la couleur), puis un fichier texte extrait et récupérable directement sans avoir à le retoucher.

    @+
    😎

Affichage de 99 réponses de 1 à 99 (sur un total de 3,343)