Donnez vie à vos documents numériques !
 

bebarth

Toutes mes réponses sur les forums

Affichage de 99 réponses de 298 à 396 (sur un total de 3,263)
  • Auteur
    Réponses
  • en réponse à : Action automatisée pour ajouter une page à une autre #73309
    bebarth
    Maître des clés

    bonjour,
    On peut lancer le script soit par une action ou directement depuis la console.

    @+
    😎

    en réponse à : Pourcentage > Demande simple #73304
    bebarth
    Maître des clés

    Il suffit de modifier cette ligne :
    ...
    this.getField("Mht02").value=event.value*0.1;
    ...

    @+
    😎

    • Cette réponse a été modifiée le il y a 1 année et 2 mois par bebarth.
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Pourcentage > Demande simple #73300
    bebarth
    Maître des clés

    bonjour,
    En script de calcul du champ Mht01 :
    this.getField("Mht02").value="";
    if (this.getField("QLigne01").value!=0) {
    event.value=this.getField("QLigne01").value*950;
    if (this.getField("CC.0").value!="Off") this.getField("Mht02").value=event.value*1.1;
    }
    else event.value="";

    J’ai modifié les formats des 2 champs pour qu’ils soient identiques.

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Case à cocher > Limiter le nombre #73296
    bebarth
    Maître des clés

    bonjour,
    Tu crée une fonction “verif()” en script de document :
    function verif() {
    var nbCases=0;
    for (var i=0; i<21; i++) {
    if (this.getField("CC1."+i).value!="Off") nbCases++;
    if (nbCases>3) {
    this.getField("CC1."+i).value="Off";
    app.alert("Vous ne pouvez pas cocher plus de 3 cases.",3);
    break;
    }
    }
    }
    Et pour chaque case à cocher une action qui  appelle cette fonction en souris relâchée :
    verif();
    Pour écrire ce script pour toutes les cases à cocher, tu lances celui-ci à partir de la console :
    for (var i=0; i<21; i++) {
    this.getField("CC1."+i).setAction("MouseUp", "verif();");
    }

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Action automatisée pour ajouter une page à une autre #73295
    bebarth
    Maître des clés

    bonjour,
    Pour ajouter la page du fichier “VersoPage.pdf” après la dernière page, il faut écrire :
    var Chemin=this.path;
    var nomDocument=this.documentFileName;
    var repertoire=Chemin.substring(0,Chemin.length-nomDocument.length);
    this.insertPages ({
    nPage: this.numPages-1,
    cPath: repertoire+"VersoPage.pdf",
    nStart: 0
    });
    this.saveAs({
    cPath: Chemin,
    bPromptToOverwrite: false,
    });

    @+
    😎

    en réponse à : Tampons – Texte retour “Undefined” #73280
    bebarth
    Maître des clés

    …et si tu as besoin pour vérifier que les champs nécessaires sont bien remplis dans la boite de dialogue, n’hésite pas !

    @+
    😎

    en réponse à : Tampons – Texte retour “Undefined” #73277
    bebarth
    Maître des clés

    bonjour,
    J’ai passé pas mal de temps à étudier les tampons et boites de dialogue, donc si je peux me permettre, voici un script un peu “simplifié”.
    S’il n’y a rien à initialiser ou rien à vérifier, pas besoin des fonctions “initialize” et “validate” dans le script.
    Par contre, si on veut qu’il y ait au moins une case cochée et tous les champs textes remplis, ce serait peut-être bon de les vérifier…
    Et si on met les valeurs de la boite de dialogue en variables, autant s’en servir lorsqu’on les rappelle pour remplir les champs !

    ///////////////////////////////////
    // Acrobat JavaScript Dialog
    //////////////////////////////////
    var oJSDlg={
    DoDialog: function(){return app.execDialog(this);},
    commit: function (oJSDlg) {
    var oRslt=oJSDlg.store();
    // Lorsqu'on a plusieurs lignes semblables on peut simplifier
    for (var i=1; i<=4; i++) eval("bChk"+i+"=oRslt[\"Chk"+i+"\"];");
    for (var i=1; i<=3; i++) eval("text"+i+"=oRslt[\"Txt"+i+"\"];");
    },
    description: {
    name: "Conformité",
    elements: [{
    type: "view",
    width: 362,
    height: 200,
    elements: [
    {
    type: "check_box",
    item_id: "Chk1",
    name: "Vu",
    },
    {
    type: "check_box",
    item_id: "Chk2",
    name: "Vu avec annotation(s)",
    },
    {
    type: "check_box",
    item_id: "Chk3",
    name: "Corriger tel qu’annoté",
    },
    {
    type: "check_box",
    item_id: "Chk4",
    name: "Refusé",
    },
    {
    type: "edit_text",
    item_id: "Txt1",
    width: 300,
    height: 20,
    name: "Text Field 1",
    },
    {
    type: "static_text",
    name: "Description for Text Field 1",
    },
    {
    type: "edit_text",
    item_id: "Txt2",
    width: 300,
    height: 20,
    name: "Text Field 2",
    },
    {
    type: "static_text",
    name: "Description for Text Field 2",
    },
    {
    type: "edit_text",
    item_id: "Txt3",
    width: 300,
    height: 20,
    name: "Text Field 3",
    },
    {
    type: "static_text",
    name: "Description for Text Field 3",
    },
    {
    type: "ok",
    },
    ],
    }],
    },
    };
    if (event.source.forReal && event.source.stampName=="#VBC") {
    if ("ok"==oJSDlg.DoDialog()) {
    // On pourrait également simplifier
    this.getField("Chk1").checkThisBox(0,bChk1);
    this.getField("Chk2").checkThisBox(0,bChk2);
    this.getField("Chk3").checkThisBox(0,bChk3);
    this.getField("Chk4").checkThisBox(0,bChk4);
    this.getField("Text1").value=text1;
    this.getField("Text2").value=text1;
    this.getField("Text3").value=text1;
    }
    }

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Tampons – Texte retour “Undefined” #73274
    bebarth
    Maître des clés

    Oups, je n’avais pas la réponse Thom Parker lorsque j’ai répondu. Désolé !

    @+
    😎

    en réponse à : Tampons – Texte retour “Undefined” #73273
    bebarth
    Maître des clés

    bonjour,

    je n’ai que mon téléphone avec moi et je ne peux donc pas essayer, mais les noms des « ID » ne doivent contenir que 4 caractères !

    A essayer donc…

    @+
    😎

    en réponse à : Ajouter numérotation après un ajout de page modèle #73240
    bebarth
    Maître des clés

    bonjour,
    Tu peux stocker des variables dans des champs invisibles que tu mets en page 1 ou les enregistrer en script de document.

    @+
    😎

    en réponse à : Calque OCG afficher-masquer #73238
    bebarth
    Maître des clés

    bonjour,
    Sauf erreur, ça fonctionne dans ce fichier joint !

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Calque OCG afficher-masquer #73229
    bebarth
    Maître des clés

    Avant de rendre un calque visible, ils faut les rendre tous non visibles, sinon si on choisi un calque sur un plan avant ça fonctionne mais si il est sur un plan arrière ça ne fonctionne pas.
    Il faudrait donc écrire pour rester dans son style :
    if(event.willCommit) {
    this.getOCGs().some(function(a){return a.state = false};);
    this.getOCGs().some(function(a){return a.state = (a.name==event.value);});
    }

    @+
    😎

    en réponse à : Calque OCG afficher-masquer #73225
    bebarth
    Maître des clés

    bonjour,
    Voici mon script à moi ! 😉
    if (!event.willCommit) {
    var lesCalques=this.getOCGs();
    for (var ii=0; ii<lesCalques.length; ii++) lesCalques[ii].state=false;
    for (var ii=0; ii<lesCalques.length; ii++) {
    if (lesCalques[ii].name==event.changeEx) {
    lesCalques[ii].state=true;
    break;
    }
    }
    }

    @+
    😎

    PS : Indice ii au lieu de i à cause d’un problème d’affichage losque i est entre crochets…

    • Cette réponse a été modifiée le il y a 1 année et 3 mois par bebarth.
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Ajouter numérotation après un ajout de page modèle #73224
    bebarth
    Maître des clés

    bonjour,
    Tu peux utiliser l’indice du préfixe de la page dupliquée !

    @+
    😎

    en réponse à : Ouvrir une page web de type data #73210
    bebarth
    Maître des clés

    Il suffit d’une petite modification pour l’affichage du nom dans le popup:
    var aParams=[];
    for (var d=0; d<this.dataObjects.length; d++) aParams.push({cName: this.dataObjects[d].name.substr(0,this.dataObjects[d].name.lastIndexOf(".")), cReturn: d.toString()});
    var cChoice=app.popUpMenuEx.apply(app, aParams);
    if (cChoice!=null) this.exportDataObject({cName: this.dataObjects[cChoice].name, nLaunch:2});

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Ouvrir une page web de type data #73198
    bebarth
    Maître des clés

    bonjour,
    En script d’action souris entrée :
    var aParams=[];
    for (var d=0; d<this.dataObjects.length; d++) aParams.push({cName: this.dataObjects[d].name, cReturn: d.toString()});
    var cChoice=app.popUpMenuEx.apply(app, aParams);
    if (cChoice!=null) this.exportDataObject({cName: this.dataObjects[cChoice].name, nLaunch:2});

    @
    😎

    • Cette réponse a été modifiée le il y a 1 année et 3 mois par bebarth.
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Ouvrir une page web de type data #73197
    bebarth
    Maître des clés

    Oups ! Je n’avais pas vu le dernier post… Je regarde demain !

    @+
    😎

    en réponse à : Ouvrir une page web de type data #73195
    bebarth
    Maître des clés

    bonjour,
    En script d’action souris entrée :
    var aParams=[
    {cName: "OUVRE PDF2", cReturn: "1"},
    {cName: "OUVRE html2", cReturn: "2"},
    ];
    var cChoice=app.popUpMenuEx.apply(app, aParams);
    if (cChoice!=null) {
    switch (cChoice) {
    case "1":
    this.exportDataObject({cName: "PDF2.pdf", nLaunch:2});
    break;
    case "2":
    this.exportDataObject({cName: "html2.html", nLaunch:2});
    }
    }

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Action automatisée pour ajouter une page à une autre #73194
    bebarth
    Maître des clés

    bonjour,
    Avec ton script :
    ...
    this.insertPages ({
    nPage: 0,
    cPath: repertoire+"Verso.pdf",
    nStart: 0
    });
    ...

    Tu insères la première page du fichier “Verso.pdf” après la première page de ton fichier.
    Ça n’a de sens que si ton fichier n’est pas le fichier “Verso.pdf” !

    @+
    😎

    en réponse à : Afficher le résultat d’un calcul s’il est >0 #73139
    bebarth
    Maître des clés

    bonjour,
    En script de format personnalisé :
    if (event.value<=0) event.value="";

    Pas besoin d’écrire this.event car event ne s’applique qu’au document en cours !

    @+
    😎

    en réponse à : Mettre un deuxième script #73127
    bebarth
    Maître des clés

    bonsoir,
    Ne serait-ce point la même demande que ce post :

    Code pour calculer heures, minutes, secondes

    @+
    😎

    en réponse à : Transfert de valeur #73122
    bebarth
    Maître des clés

    bonjour,
    Voici un script de calcul pour le champ “Text5” :
    if (this.getField("Dropdown1").value!=0) event.value=this.getField("Text"+this.getField("Dropdown1").value).valueAsString;
    else event.value="";
    …et le fichier qui va avec !

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Code pour calculer heures, minutes, secondes #73119
    bebarth
    Maître des clés

    Heureusement qu’il IA encore nous !

    @+
    😎

    en réponse à : Code pour calculer heures, minutes, secondes #73116
    bebarth
    Maître des clés

    bonjour,
    Voici un exemple avec un champ pour indiquer la vitesse, et le script :
    var leTemps=this.getField("ResultatKM").value/this.getField("vitesse").value;
    var lesHeures=Math.floor(leTemps);
    var resteHeures=leTemps-lesHeures;
    var lesMinutes=Math.floor(resteHeures*60);
    var lesSecondes=(resteHeures*3600-lesMinutes*60).toFixed(1);
    //
    if (lesHeures<10) var lesHeures="0"+lesHeures;
    if (lesMinutes<10) var lesMinutes="0"+lesMinutes;
    if (lesSecondes<10) var lesSecondes="0"+lesSecondes;
    //
    event.value=lesHeures+":"+lesMinutes+":"+lesSecondes;

    Ce script est un peu développé pour une meilleure compréhension.

    @+
    😎

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

    bonjour,
    Il faudrait écrire :
    if (event.value!="") event.value=event.value+" %";

    @+
    😎

    en réponse à : Code pour calculer heures, minutes, secondes #73087
    bebarth
    Maître des clés

    bonjour,
    Je t’ai fait un exemple vite fait car après je pars en vacances…
    Script de calcul lorsqu’il n’y a pas beaucoup de champs (cf. premier exemple) :
    if (this.getField("distance").value && this.getField("temps").value && this.getField("allureAux").value) {
    var Temps=this.getField("temps").value.split(":");
    var enSecondes=Number(Temps[0])*3600+Number(Temps[1])*60+Number(Temps[2]);
    var regleDe3=enSecondes*this.getField("allureAux").value/this.getField("distance").value;
    var lesMinutes=Math.floor(regleDe3/60);
    var enSecondes=(regleDe3-lesMinutes*60).toFixed(2).toString().split(".");
    var lesSecondes=enSecondes[0];
    var lesCentiemes=enSecondes[1];
    event.value=lesMinutes+"\'"+util.printf("%,302.0f", lesSecondes)+"\"";
    if (lesCentiemes!="00") event.value+=lesCentiemes;
    } else event.value="";

    Vu que tu as souvent beaucoup de champs, il est préférable de mettre une fonction en script de document et de l’appeler uniquement lorsqu’un champ modifié est désactivé, ce qui évite de lancer le calcul pour tous les champs après chaque évènement (cf. second exemple).
    La fonction :
    function allure(laDistance,leTemps,lAllureAux) {
    if (laDistance && leTemps && lAllureAux) {
    var Temps=leTemps.split(":");
    var enSecondes=Number(Temps[0])*3600+Number(Temps[1])*60+Number(Temps[2]);
    var regleDe3=enSecondes*lAllureAux/laDistance;
    var lesMinutes=Math.floor(regleDe3/60);
    var enSecondes=(regleDe3-lesMinutes*60).toFixed(2).toString().split(".");
    var lesSecondes=enSecondes[0];
    var lesCentiemes=enSecondes[1];
    this.getField("allure."+ind).value=lesMinutes+"\'"+util.printf("%,302.0f", lesSecondes)+"\"";
    if (lesCentiemes!="00") this.getField("allure."+ind).value+=lesCentiemes;
    } else this.getField("allure."+ind).value="";

    }
    <code>et tu l'appelles avec :</code>
    var indice=event.target.name.split(".");

    ind=indice[1];
    allure(this.getField("distance."+ind).value,this.getField("temps."+ind).value,this.getField("allureAux."+ind).value);

    @+
    😎

    • Cette réponse a été modifiée le il y a 1 année et 5 mois par bebarth.
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Code pour calculer heures, minutes, secondes #73085
    bebarth
    Maître des clés

    bonjour,
    Si tu regardes le format de ton champ end.0, tu verras que ce n’est pas un nombre mais une valeur au format H:MM:ss (personnalisé).
    Tu ne peux donc pas l’utiliser telle quelle dans ta boucle.

    @+
    😎

    en réponse à : Code pour calculer heures, minutes, secondes #73070
    bebarth
    Maître des clés

    Je n’ai pas étudié le fichier complètement pour savoir à quoi correspondent les différents champs, mais dans ton script :
    for (var a=0 ; a<14 ; a++){
    var d = this.getField("dist."+a).value;
    var b = 500/d;
    }
    event.value= "";
    var somme=Time2Num("mm:ss", this.getField("end.0").value)/b;
    HM_Format()
    La boucle ne sert à rien vu qu’il n’y a pas d’opération, et ton b sera donc toujours celui de l’indice 13…
    Je pense que ce n’est pas ce que u souhaites !

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Code pour calculer heures, minutes, secondes #73063
    bebarth
    Maître des clés

    Il n’y a toujours pas de champs “t.”…
    Et pour la boucle de la première ligne, a<=13 (et non a<17).

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Code pour calculer heures, minutes, secondes #73058
    bebarth
    Maître des clés

    bonjour,
    Moi je n’ai pas d’erreur mais la première chose que je vois c’est qu’il n’y a pas de champs “t.” (t minuscule).

    @+
    😎

    en réponse à : Il y a-t-il une façon de faire un calcul plus court que ça? #73046
    bebarth
    Maître des clés

    Essaye comme ça :

    var laSomme=0;
    for (var i=1; i<=8; i++) laSomme+=Number(this.getField("TOTAL"+i).value);
    if (laSomme==0) event.value="";
    else event.value=laSomme;

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Il y a-t-il une façon de faire un calcul plus court que ça? #73044
    bebarth
    Maître des clés

    event.value=0;
    for (var i=1; i<=8; i++) event.value+=this.getField("TOTAL"+i).value;
    if (event.value==0) event.value="";

    @+
    😎

    en réponse à : Il y a-t-il une façon de faire un calcul plus court que ça? #73042
    bebarth
    Maître des clés

    bonjour,
    Quelle est la question ?

    @+
    😎

    en réponse à : Changer le libellé d’un bouton en cliquant dessus #73039
    bebarth
    Maître des clés

    bonjour,
    Il faut écrire :
    if (event.target.buttonGetCaption()=="SUC") event.target.buttonSetCaption("ECH");
    else if (event.target.buttonGetCaption()=="ECH") event.target.buttonSetCaption("ABD");
    else if (event.target.buttonGetCaption()=="ABD") event.target.buttonSetCaption("");
    else event.target.buttonSetCaption("SUC");

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Javascript PDF archivable #73016
    bebarth
    Maître des clés
    bonjour,

    Un tel script peut aussi être exécuté par une Action (Assistant Action).

    Exact ! Ou même depuis la console…
    Et pour ces deux façons on n’a pas besoin d’étendre les privilèges.

    @+
    😎

    en réponse à : Javascript PDF archivable #73009
    bebarth
    Maître des clés

    bonjour,
    Il n’est pas possible d’enregistrer avec un script directement à partir d’un bouton.
    Pour cela, il faut un script de d’application (un fichier .js que l’on place dans le répertoire JavaScript d’Acrobat).
    Le script est du genre :
    if (app.formsVersion>=8) {
    Save_PDFA=app.trustedFunction(function(cheminFichier) {
    app.beginPriv();
    this.flattenPages();
    this.saveAs({
    cPath: cheminFichier,
    cConvID: "com.callas.preflight.pdfa"
    });
    app.endPriv();
    })
    console.println("Le plugin d\'enregistrement \"Save_PDFA\" est actif.");
    }

    Et tu appelles le script via ton bouton avec :
    event.target.display=display.hidden;
    Save_PDFA("myDoc.pdf");

    Ici la première ligne cache le bouton avant d’aplatir les champs (on ne peut pas supprimer le champ qui lance l’action).

    Ci-joint les fichiers.

    @+
    😎

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

    …deux petites mofifications :
    for (var laLigne=1; laLigne<=34; laLigne++) {
    var lesValeurs=[];
    for (var i=1; i<=10; i++) {
    if (this.getField("a."+laLigne+"."+i).value!=="") lesValeurs.push();
    this.getField("a."+laLigne+"."+i).fillColor=["T"];
    }
    try {
    lesValeurs.sort(function(a,b){return a[1]-b[1]});
    for (var i=0; i<=10; i++) {
    if (lesValeurs[1]==lesValeurs[0][1]) {
    if (this.getField("a."+laLigne+"."+lesValeurs[0]).value!=="") this.getField("a."+laLigne+"."+lesValeurs[0]).fillColor=this.getField("A."+laLigne).value=="+"?color.green:color.red;
    } else break;
    }
    for (var i=lesValeurs.length-1; i>=0; i--) {
    if (lesValeurs[1]==lesValeurs[lesValeurs.length-1][1]) {
    if (this.getField("a."+laLigne+"."+lesValeurs[0]).value!=="") this.getField("a."+laLigne+"."+lesValeurs[0]).fillColor=this.getField("A."+laLigne).value=="-"?color.green:color.red;
    }
    }
    } catch(e) {}
    }

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Valeur maximale #72986
    bebarth
    Maître des clés
    bonjour,

    J’ai testé le fichier joint, ça ne fonctionnait pas.

    Tu as certainement testé le script de mon fichier avec ton fichier, car le miens fonctionne très bien… un peu long en script de calcul comme je l’ai expliqué précédemment. Si les valeurs sont entrées manuellement il vaut mieux utiliser un script de champ désactivé qui ne fera le calcul que sur la ligne.
    Pour fonctionner correctement il faut supprimer tous tes autres scripts relatifs à ce calcul. Les menus déroulants doivent également afficher + ou – et ne doivent donc pas être vides.

    Je ne vois pas ou se trouvent les différences pour les valeurs des listes déroulantes (+ et -).

    Il faut regarder les 2 lignes de ce type :
    this.getField("a."+laLigne+"."+lesValeurs[0][0]).fillColor=this.getField("A."+laLigne).value=="+"?color.green:color.red;

    @+
    😎

    en réponse à : Valeur maximale #72980
    bebarth
    Maître des clés

    Du coup, le script d’un seul champ (ici ) doit être :
    for (var laLigne=1; laLigne<=34; laLigne++) {
    var lesValeurs=[];
    for (var i=1; i<=10; i++) {
    if (this.getField("a."+laLigne+"."+i).value!=="") lesValeurs.push([i,this.getField("a."+laLigne+"."+i).value]);
    this.getField("a."+laLigne+"."+i).fillColor=["T"];
    }
    try {
    lesValeurs.sort(function(a,b){return a[1]-b[1]});
    if (this.getField("a."+laLigne+"."+lesValeurs[0][0]).value!=="") this.getField("a."+laLigne+"."+lesValeurs[0][0]).fillColor=this.getField("A."+laLigne).value=="+"?color.green:color.red;
    if (this.getField("a."+laLigne+"."+lesValeurs[lesValeurs.length-1][0]).value!=="") this.getField("a."+laLigne+"."+lesValeurs[lesValeurs.length-1][0]).fillColor=this.getField("A."+laLigne).value=="-"?color.green:color.red;
    } catch(e) {}
    }
    A noter que j’ai ajouté l’inégalité absolu “!==” pour renir compte des éventuels 0.

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Valeur maximale #72977
    bebarth
    Maître des clés
    bonjour,

    Cela fonctionne sauf pour la selection du + ou – dans la liste déroulante, cela ne change rien, c’est toujours la valeur mini qui apparait en vert.

    Les menus déroulants + ou – sont sensés faire quoi ?

    @+
    😎

    en réponse à : Valeur maximale #72973
    bebarth
    Maître des clés

    bonjour,
    Sur le même principe, on écrit :
    for (var laLigne=1; laLigne<=34; laLigne++) {
    var lesValeurs=[];
    for (var i=1; i<=10; i++) {
    if (this.getField("a."+laLigne+"."+i).value!="") lesValeurs.push([i,this.getField("a."+laLigne+"."+i).value]);
    this.getField("a."+laLigne+"."+i).fillColor=["T"];
    }
    try {
    lesValeurs.sort(function(a,b){return a[1]-b[1]});
    if (this.getField("a."+laLigne+"."+lesValeurs[0][0]).value!="") this.getField("a."+laLigne+"."+lesValeurs[0][0]).fillColor=color.green;
    if (this.getField("a."+laLigne+"."+lesValeurs[lesValeurs.length-1][0]).value!="") this.getField("a."+laLigne+"."+lesValeurs[lesValeurs.length-1][0]).fillColor=color.red;
    } catch(e) {}
    }

    @+
    😎

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

    bonsoir,
    Dans le principe, voici un script que l’on peut placer en script de calcul d’un seul champ :
    for (var laLigne=1; laLigne<=15; laLigne++) {
    var lesValeurs=[];
    for (var i=1; i<=10; i++) {
    lesValeurs.push([i,this.getField("a."+laLigne+"."+i).value]);
    this.getField("a."+laLigne+"."+i).fillColor=["T"];
    }
    lesValeurs.sort(function(a,b){return a[1]-b[1]});
    if (this.getField("a."+laLigne+"."+lesValeurs[0][0]).value!="") this.getField("a."+laLigne+"."+lesValeurs[0][0]).fillColor=color.green;
    if (this.getField("a."+laLigne+"."+lesValeurs[9][0]).value!="") this.getField("a."+laLigne+"."+lesValeurs[9][0]).fillColor=color.red;
    }

    Ce script est exécuté après chaque évènement, ce qui risque de ralentir si il y a beaucoup d’autres calcul.

    Si les valeur sont entrées manuellement pour chaque champ, il vaut mieux mettre une fonction en script de document :
    function couleur() {
    var ligne=event.target.name.split(".");
    var laLigne=ligne[1];
    var lesValeurs=[];
    for (var i=1; i<=10; i++) {
    lesValeurs.push([i,this.getField("a."+laLigne+"."+i).value]);
    this.getField("a."+laLigne+"."+i).fillColor=["T"];
    }
    lesValeurs.sort(function(a,b){return a[1]-b[1]});
    if (this.getField("a."+laLigne+"."+lesValeurs[0][0]).value!="") this.getField("a."+laLigne+"."+lesValeurs[0][0]).fillColor=color.green;
    if (this.getField("a."+laLigne+"."+lesValeurs[9][0]).value!="") this.getField("a."+laLigne+"."+lesValeurs[9][0]).fillColor=color.red;
    }

    …et de l’appeler avec un script de champ désactivé :
    couleur();

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Liste déroulante et remplissage de champ correspondant #72951
    bebarth
    Maître des clés

    bonjour,
    En script de validation du menu déroulant tu écris :
    var items=[];
    for (var i=0; i<event.target.numItems; i++) items.push([event.target.getItemAt(i,false),event.target.getItemAt(i,true)]);
    for (var i=0; i<items.length; i++) {
    if (items[0]==event.value) {
    this.getField("Text1").value=items[1];
    break;
    }
    }
    Et bien sûr tu supprimes le script de calcul du champ texte…

    @+
    😎

    P.S. : En script de validation d’un menu déroulant, event.value retourne le nom de l’élément et non la valeur d’exportation.

    • Cette réponse a été modifiée le il y a 1 année et 6 mois par bebarth.
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Liste déroulante et remplissage de champ correspondant #72949
    bebarth
    Maître des clés

    bonjour,
    Je ne suis pas certain de bien comprendre !
    Lorsque l’utilisateur indique un élément, tu souhaites l’ajouter à ta liste sans pour cela modifier le contenu du champ texte.
    C’est ça ???

    @+
    😎

    en réponse à : Script textbox vers une autre textbox #72946
    bebarth
    Maître des clés
    bonjour,
    Je ne comprends pas ceci :

    … si observation rempli copié a l’identique ce qui est marqué dans la textbox …

    @+
    😎

    en réponse à : Horloge dans un dossier pdf #72936
    bebarth
    Maître des clés

    bonjour,

    C’est également possible en dessinant les aiguilles en SVG, mais alors là bon courage.

    Ça me “trottait” dans la tête depuis que j’ai répondu, je me suis donc replongé sur le sujet et voici une horloge analogique !
    Le design n’est peut-être pas très moderne, je verrai si je trouve “5 minutes”. 😂

    @+
    😎

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

    bonjour,
    Si tu utilises mon script pour tous les champs “Total” il faut également supprimer tous les anciens scripts des champs “Heures supplémentaires”.
    Il faut également revoir l’ordre de calcul des champs, et enfin placer ce script pour le champ “Total HS” :
    var total=0;
    for (var i=1; i<=5; i++) total+=Time2Num("hh:mm",this.getField("Champ texte5."+i).value);
    event.value=calculHeures(total);

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Calcul d’après une case à cocher #72924
    bebarth
    Maître des clés

    bonjour,
    En script de calcul pour le champ “cartebl” :
    if (event.value!="Off") this.getField("cartejeune").value="Off";
    et pour le champ “cartejeune” :
    if (event.value!="Off") this.getField("cartebl").value="Off";

    @+
    😎

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

    bonjour,
    Voici les scripts à placer en script de document et script de calcul des champs “Total”  :

    // Fonctions en scripts de document
    function Time2Num(sFormat,sTime) {
    if(sTime=="") return "";
    var oTime=util.scand("mm/dd/yyyy "+sFormat,"01/01/1970 "+sTime);
    var fTZOffset=oTime.getTimezoneOffset()*1000*60;
    var fTime=oTime.valueOf()-fTZOffset;
    return Math.round(fTime/1000);
    }
    function calculHeures(nbHeures) {
    //if (nbHeures<0) nbHeures=(24*3600)+(fin-debut);
    nbHeures=Math.round(nbHeures/60);
    heures=Math.floor(nbHeures/60);
    lesMinutes=((nbHeures/60)-heures)*60;
    minutes=util.printf("%,302.0f",lesMinutes);
    return heures+":"+minutes;
    }
    function affichage(ind) {
    var debutJournee=this.getField("Champ texte1."+ind).value;
    var pauseJournee=this.getField("Champ texte2."+ind).value;
    var finJournee=this.getField("Champ texte3."+ind).value;
    var heuresTheoriques=this.getField("Champ texte4."+ind).value;
    if(debutJournee!="" && finJournee!="") {
    var debut=Time2Num("hh:mm",debutJournee);
    var pause=Time2Num("hh:mm",pauseJournee);
    var fin=Time2Num("hh:mm",finJournee);
    var theoriques=Time2Num("hh:mm",heuresTheoriques);
    event.value=calculHeures(fin-debut-pause);
    this.getField("Champ texte5."+ind).value=calculHeures(fin-debut-pause-theoriques);
    } else {
    event.value="";
    this.getField("Champ texte5."+ind).value="";
    }
    }

     

    // Script de calcul des champs "Total"
    var indice=event.target.name.substr(event.target.name.indexOf(".")+1);
    affichage(indice);

    Dans le fichier joint, seule la première ligne est calculée avec ce script.

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Liste déroulante et changement d’image #72909
    bebarth
    Maître des clés

    👍

    Juste pour info, voici comment j’aurais écrit le script :

    // Fonction en script de document
    function light(nSuffix) {
    switch (event.changeEx) {
    case "Oui":
    var couleur=["RGB",0,1,0];
    break;
    case "Partiellement":
    var couleur=["RGB",1,1,0];
    break;
    case "Non":
    var couleur=["RGB",1,0,0];
    break;
    default:
    var couleur=["T"];
    }
    this.getField("gommette."+nSuffix).fillColor=couleur;
    }

    // Script de touches personnalisé
    if (!event.willCommit) light(event.target.name.substr(event.target.name.indexOf(".")+1));

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Liste déroulante et changement d’image #72903
    bebarth
    Maître des clés

    Peux-tu partager un fichier ?

    @+
    😎

    en réponse à : Liste déroulante et changement d’image #72900
    bebarth
    Maître des clés

    bonjour,
    Si j’ai bien compris, tu dois appeler la fonction avec :
    light(event.target.name); N’importe quoi !!! ça va changer la couleur du menu déroulant…

    Comme le dit Merlin, si tu as plusieur menus déroulants et plusieurs gommettes avec le même indice, lu appelles  la fonction avec :
    light(event.target.name.substr(event.target.name.indexOf(".")+1));

    @+
    😎

    • Cette réponse a été modifiée le il y a 1 année et 7 mois par bebarth.
    en réponse à : Liste déroulante et changement d’image #72886
    bebarth
    Maître des clés

    bonjour,
    Dans ce cas on peut simplifier un peu le script :
    if (!event.willCommit) {
    this.getField("gommette").fillColor=["RGB",1,1,1];
    this.getField("ijaune").display=display.hidden;
    this.getField("irouge").display=display.hidden;
    this.getField("iverte").display=display.hidden;
    this.getField("ibleu").display=display.hidden;
    switch (event.changeEx) {
    case "Bleu":
    this.getField("gommette").fillColor=["RGB",0,0,1];
    this.getField("ibleu").display=display.visible;
    break;
    case "Jaune":
    this.getField("gommette").fillColor=["CMYK",0,0,1,0];
    this.getField("ijaune").display=display.visible;
    break;
    case "Vert":
    this.getField("gommette").fillColor=["RGB",0,1,0];
    this.getField("iverte").display=display.visible;
    break;
    case "Rouge":
    this.getField("gommette").fillColor=["RGB",1,0,0];
    this.getField("irouge").display=display.visible;
    }
    }

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Project Terminé Facture #72881
    bebarth
    Maître des clés

    …oui, mais si on écrit 35132023 cela affiche 35/13/2023 ce qui n’est pas une date !

    @+
    😎

    en réponse à : Liste déroulante et changement d’image #72879
    bebarth
    Maître des clés

    bonjour,
    Voici un script de touches personnalisé pour le menu déroulant :
    if (!event.willCommit) {
    switch (event.changeEx) {
    case "Bleu":
    var couleur=["RGB",0,0,1];
    break;
    case "Jaune":
    var couleur=["CMYK",0,0,1,0];
    break;
    case "Vert":
    var couleur=["RGB",0,1,0];
    break;
    default:
    var couleur=["RGB",1,0,0];
    }
    this.getField("gommette").fillColor=couleur;
    }

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Project Terminé Facture #72875
    bebarth
    Maître des clés

    bonjour,
    Je n’ai pas trouvé où se trouve ce code, mais il sert à indiquer le formatage d’un champ où chaque 9 représente un chiffre de 0 à 9.
    Vu que c’est un champ où il faut indiquer une date, il faudrait mieux utiliser AFDate_FormatEx(dd/mm/yyyy) qui ne permet d’indiquer qu’une date valide.

    @+
    😎

    en réponse à : Horloge dans un dossier pdf #72871
    bebarth
    Maître des clés
    bonjour,

    Bonjour à tous, je suis nouveau et je découvre le langage JavaScript, j’aimerais intégrer une horloge analogique…

    Je pense que tu ne commences pas par le plus facile !

    Est-il techniquement possible d’avoir une horloge analogique en javascript?? Si oui avez vous un exemple? Merci

    Ce sera donc possible si tu utilises les outils  commentaires, mais il faudra revoir le script du fichier que Merlin à partagé car il ne fonctionne pas très bien, et après avoir regardé vite-fait je ne vois pas pourquoi ! A-t-il déjà fonctionné correctement avec des version précédentes ?

    C’est également possible en dessinant les aiguilles en SVG, mais alors là bon courage.
    Il n’y a aucune documentation disponible pour Acrobat et le peu de personnes qui savent utiliser cette méthode ne sont pas disposées à partager leurs connaissances. Il faut dire que c’est assez compliqué… J’ai personnellement mis des mois à comprendre un peu comment ça fonctionne et vu que je n’ai pas pratiqué également depuis d’autres mois il faudrait que je me replonge dedans car biens sur toutes les commandes disponibles (en HTML par exemple) ne le sont pas avec Acrobat.
    https://www.w3schools.com/graphics/svg_intro.asp

    Si je peux te donner un conseil, utilise une horloge numérique !!!!

    @+
    😎

    • Cette réponse a été modifiée le il y a 1 année et 7 mois par bebarth.
    en réponse à : Liste déroulante et remplissage de champ correspondant #72862
    bebarth
    Maître des clés

    bonjour,

    en script de calcul du champ tu écris :

    event.value=this.getField(«nonChamp»).value;

    Avec des guillemets à l’anglaise…

    @+
    😎

    en réponse à : Project Terminé Facture #72853
    bebarth
    Maître des clés

    👍

    je regarderai la semaine prochaine car je n’ai qu’un téléphone cette semaine…

    @+
    😎

    en réponse à : Incrémental #72844
    bebarth
    Maître des clés

    bonjour,
    Ça fonctionne si le numéro est attribué à partir un seul fichier initial, mais si on veut établir une facture à partir de documents “fichier client” déjà existants il faudra utiliser un fichier “compteur”.

    @+
    😎

    en réponse à : Horloge dans un dossier pdf #72842
    bebarth
    Maître des clés

    bonjour,
    En même temps, le script d’une horloge n’est pas très compliqué !
    function affichage() {
    var lesHeures=new Date().getHours();
    if (lesHeures<10) var lesHeures="0"+lesHeures;
    var lesMinutes=new Date().getMinutes();
    if (lesMinutes<10) var lesMinutes="0"+lesMinutes;
    var lesSecondes=new Date().getSeconds();
    if (lesSecondes<10) var lesSecondes="0"+lesSecondes;
    this.getField("horloge").value=lesHeures+":"+lesMinutes+":"+lesSecondes;
    }
    run=app.setInterval("affichage()",1000);

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Horloge dans un dossier pdf #72822
    bebarth
    Maître des clés

    bonjour,
    Difficile de retrouver ce fichier sans savoir d’où il vient ! Merlin à peut-être une idée, 2004 c’était le début du forum et moi je n’y connaissais rien…
    Par contre, voici un fichier de Thom Parker où tu trouveras une horloge intégrée.

    @+
    😎

    PS : Voici le lien car le fichier est trop gros pour être placé sur le forum :
    https://www.pdfscripting.com/public/FreeStuff/PDFSamples/JavaScriptClock.pdf

    Ci-joint également un fichier que j’ai fait avec un chronomètre si ça peut t’aider…

    • Cette réponse a été modifiée le il y a 1 année et 8 mois par bebarth.
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Case visible en lecture seule #72821
    bebarth
    Maître des clés

    bonjour,
    Il faut écrire :
    this.getField("text1").readonly=true;

    @+
    😎

    en réponse à : Calcul d’après une case à cocher #72814
    bebarth
    Maître des clés

    bonjour,
    …avec un petit script :
    if (this.getField("coche1").value=="Off") var c1=0;
    else var c1=this.getField("coche1").value;
    if (this.getField("coche2").value=="Off") var c2=0;
    else var c2=this.getField("coche2").value;
    if (c1+c2==0) event.value="";
    else event.value=(c1+c2)+" €";

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Remplir les champs de texte seulement #72784
    bebarth
    Maître des clés

    bonjour,
    La difficulté est qu’il n’y a pas de message d’erreur retourné, juste une alerte qui indique que le format n’est pas conforme !
    Je doute sur la possibilité d’effectuer ceci via JavaScript…

    @+
    😎

    en réponse à : Valeur numérique 2 décimales #72777
    bebarth
    Maître des clés

    bonjour,
    En script de format personnalisé :
    event.value=event.target.value.toFixed(2)+" m"

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Liste des éléments dans la console #72774
    bebarth
    Maître des clés

    …comme ça !

    console.clear();
    console.show();
    var lesElements=[]
    for (var i=0; i<this.numFields; i++) {
    if (this.getField(this.getNthFieldName(i)).type=="combobox" || this.getField(this.getNthFieldName(i)).type=="listbox") lesElements.push(this.getNthFieldName(i));
    }
    if (!lesElements.length) app.alert("Il n'y a ni menu d\u00E9roulant ni zone de liste dans ce document.",3);
    else {
    lesElements.unshift("- S\u00E9lectionnez -");
    var listeElements="var laListe \= \{";
    for (var j=0; j<lesElements.length; j++) listeElements+="\""+lesElements[j]+"\": "+(-1*(j+1)).toString()+",";
    var listeElements=listeElements.substring(0, listeElements.length-1);
    listeElements+="\}";
    eval(listeElements);
    var bDialog={
    DoDialog: function(){return app.execDialog(this);},
    initialize: function(bDialog) {this.loadDefaults(bDialog)},
    validate: function(bDialog) {
    results=bDialog.store();
    oRslt=bDialog.store();
    var listeElements=bDialog.store()["LIST"];
    testOK=1;
    for (var j in listeElements) {
    if (listeElements[j]>0) {
    valItem=listeElements[j];
    if (valItem==1) testOK=0;
    }
    }
    var alertReturn=(testOK);
    if(!alertReturn) app.alert("\nVeuillez s\u00E9lectionner un menu d\u00E9roulant.");
    return alertReturn;
    },
    loadDefaults: function (bDialog) {
    bDialog.load({LIST: laListe,});
    },
    description: {
    name: "Dialog",
    align_children: "align_top",
    elements: [
    {
    type: "view",
    align_children: "align_fill",
    elements: [
    {
    type: "popup",
    item_id: "LIST",
    width: 120,
    },
    {
    alignment: "align_right",
    type: "ok_cancel",
    },
    ]
    },
    ]
    }
    };
    if("ok"==bDialog.DoDialog()) {
    var nomChamp=lesElements[valItem-1];
    var f=this.getField(nomChamp);
    var numItems=f.numItems;
    if (f.type=="combobox") var leType="Menu d\u00E9roulant";
    else var leType="Zone de liste";
    console.println("***** "+leType+" \""+nomChamp+"\" *****\r\u00C9l\u00E9ment -> Valeur d'exportation");
    for (var i=0; i<f.numItems; i++) {
    console.println("– "+f.getItemAt(i,false)+" -> "+f.getItemAt(i,true));
    }
    console.println("**********************************\r");
    }
    }

    @+
    😎

    en réponse à : Remplacer valeur numérique en lettres #72771
    bebarth
    Maître des clés

    En script de format personnalisé :
    if (event.value!="") {
    var somme=event.value.split(",");
    if (somme.length==1) event.value=somme[0]+",00 €";
    else event.value=somme[0]+","+(somme[1]+"00").substr(0,2)+" €";
    }

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Liste des éléments dans la console #72768
    bebarth
    Maître des clés

    …et si on veut être perfectionniste il faut modifier l’alerte et le message affiché dans la console !!!

    @+
    😎

    en réponse à : Liste des éléments dans la console #72767
    bebarth
    Maître des clés

    il suffit d’écrire :

    if (this.getField(this.getNthFieldName(i)).type==”combobox” || this.getField(this.getNthFieldName(i)).type==”listbox”) lesElements.push(this.getNthFieldName(i));

    @+
    😎

    en réponse à : Remplacer valeur numérique en lettres #72765
    bebarth
    Maître des clés

    bonjour,
    En script de format personnalisé :
    if (event.value!="") event.value+=" €";
    ou :
    if (event.value!="") event.value="€ "+event.value;

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Liste des éléments dans la console #72763
    bebarth
    Maître des clés

    bonjour,
    Je suis un peu à la bourre sur ce post, mais voici un script que j’avais écrit il y a quelques temps sur le même sujet.
    Le script retourne une boite de dialogue avec le nom de tous les menus déroulants (ça évite d’entrer un nom incorrect) puis liste tous les éléments et leur valeur d’exportation.
    console.clear();
    console.show();
    var lesElements=[]
    for (var i=0; i<this.numFields; i++) {
    if (this.getField(this.getNthFieldName(i)).type=="combobox") lesElements.push(this.getNthFieldName(i));
    }
    if (!lesElements.length) app.alert("Il n'y a pas de menu d\u00E9roulant dans ce document.",3);
    else {
    lesElements.unshift("- S\u00E9lectionnez -");
    var listeElements="var laListe \= \{";
    for (var j=0; j<lesElements.length; j++) listeElements+="\""+lesElements[j]+"\": "+(-1*(j+1)).toString()+",";
    var listeElements=listeElements.substring(0, listeElements.length-1);
    listeElements+="\}";
    eval(listeElements);
    var bDialog={
    DoDialog: function(){return app.execDialog(this);},
    initialize: function(bDialog) {this.loadDefaults(bDialog)},
    validate: function(bDialog) {
    results=bDialog.store();
    oRslt=bDialog.store();
    var listeElements=bDialog.store()["LIST"];
    testOK=1;
    for (var j in listeElements) {
    if (listeElements[j]>0) {
    valItem=listeElements[j];
    if (valItem==1) testOK=0;
    }
    }
    var alertReturn=(testOK);
    if(!alertReturn) app.alert("\nVeuillez s\u00E9lectionner un menu d\u00E9roulant.");
    return alertReturn;
    },
    loadDefaults: function (bDialog) {
    bDialog.load({LIST: laListe,});
    },
    description: {
    name: "Dialog",
    align_children: "align_top",
    elements: [
    {
    type: "view",
    align_children: "align_fill",
    elements: [
    {
    type: "popup",
    item_id: "LIST",
    width: 120,
    },
    {
    alignment: "align_right",
    type: "ok_cancel",
    },
    ]
    },
    ]
    }
    };
    if("ok"==bDialog.DoDialog()) {
    var nomChamp=lesElements[valItem-1];
    var f=this.getField(nomChamp);
    var numItems=f.numItems;
    console.println("***** Menu d\u00E9roulant \""+nomChamp+"\" *****\r\u00C9l\u00E9ment -> Valeur d'exportation");
    for (var i=0; i<f.numItems; i++) {
    console.println("– "+f.getItemAt(i,false)+" -> "+f.getItemAt(i,true));
    }
    console.println("**********************************\r");
    }
    }

    @+
    😎

    en réponse à : Lecture PDF impossible #72749
    bebarth
    Maître des clés

    bonjour,
    Adobe Reader demande une connexion  ?
    Quel OS ? Il existe d’autres lecteurs gratuits.

    @+
    😎

    en réponse à : Remplacer valeur numérique en lettres #72740
    bebarth
    Maître des clés

    bonjour,
    Une petite amélioration du script pour ne pas pouvoir taper une série de zéro en début de frappe !
    Voici l’expression régulière :
    /^(([0]|([1-9]\d{0,11}))(\,\d{0,2})?)?$/
    …et ajout automatique d’une virgule après un chiffre qui commence par zéro.

    @+
    😎

    • Cette réponse a été modifiée le il y a 1 année et 9 mois par bebarth.
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Remplacer valeur numérique en lettres #72737
    bebarth
    Maître des clés

    Quand j’ai quelque chose dans la tête, je ne l’ai pas au… tre part !
    Voici donc un fichier avec le script mis en fonction.

    Script de touches personnalisé :
    if (!event.willCommit) {
    if (event.value.length==0 && event.change==",") event.change="0,";
    var aTester=event.value.split("");
    aTester.splice(event.selStart,event.selEnd-event.selStart,event.change);
    var testeChaine=aTester.join("");
    RegExAmount=/^(\d{0,12}(\,\d{0,2})?)$/;
    if (RegExAmount.test(testeChaine)) {
    ecriture(testeChaine);
    } else event.rc=false;
    } else {
    RegExAmount=/^(\d{1,12}(\,\d{0,2})?)$/;
    if (event.value=="" || RegExAmount.test(event.value)) {
    ecriture(event.value);
    } else event.rc=false;
    }

    Le reste est en script de document.

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Remplacer valeur numérique en lettres #72724
    bebarth
    Maître des clés

    bonjour,
    Voici un fichier avec script de touches personnalisé qui permet de répondre aux 2 demandes.
    L’écriture en lettres se fait au fur et à mesure de la frappe des chiffres.
    J’ai recopié 2 fois le script d’origine pour raison de temps mais cela nécessiterait d’écrire une fonction en script de document !
    Si j’avais à réécrire ce script aujourd’hui il serait un peu différent mais vu qu’il fonctionne…

    var etoiles="**********";
    if (!event.willCommit) {
    var aTester=event.value.split("");
    aTester.splice(event.selStart,event.selEnd-event.selStart,event.change);
    var testeChaine=aTester.join("");
    RegExAmount=/^(\d{0,12}(\,\d{0,2})?)$/;
    ...
    }
    } else event.rc=false;
    }

    @+
    😎

    • Cette réponse a été modifiée le il y a 1 année et 9 mois par bebarth.
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Remplacer valeur numérique en lettres #72715
    bebarth
    Maître des clés

    bonjour,
    As-tu réussi ?

    @+
    😎

    en réponse à : Extraction automatique 1ère page pdf par lot #72714
    bebarth
    Maître des clés

    👍

    @+
    😎

    en réponse à : Extraction automatique 1ère page pdf par lot #72711
    bebarth
    Maître des clés

    bonjour,

    Dans mon idée « this » représente le document qui vient d’être enregistré, qui est actif et donc au premier-plan à l’instant T.

    Ce n’est effectivement pas bien clair, mais pour moi “this” représente “l’objet” d’où est lancé la partie du script. Si c’est un document, “this” est ce document, si c’est d’une boite de dialogue, “this” est cette boite de dialogue.

    Bonjour, le script a fonctionné

    Combien de fichiers as-tu traité et en combien de temps ?

    @+
    😎

    en réponse à : Extraction automatique 1ère page pdf par lot #72706
    bebarth
    Maître des clés
    bonjour,

    Je suppose que c’est automatique, mais si ce n’est pas le cas il faudra ajouter (après l’étape Enregistrement) une nouvelle étape « Exécuter un JavaScript » en utilisant ce script : this.closeDoc(true);

    “this” représente le fichier dont on veut extraire la première page donc this.closeDoc(true); ne fermera pas le fichier temporaire.

    Pour ma part voici le script à utiliser :
    var newDoc=app.newDoc();
    newDoc.insertPages ({
    nPage: 0,
    cPath: this.path,
    nStart: 0
    });
    newDoc.deletePages(0);
    newDoc.saveAs({
    cPath: this.path.replace(/.pdf$/i,"_extrait.jpg"),
    cConvID: "com.adobe.acrobat.jpeg",
    bCopy: true,
    bPromptToOverwrite: true
    });
    newDoc.closeDoc(true);

    Il vaut effectivement traiter les 5000 fichiers par lots, sinon il faudrait écrire un autre script pour savoir où on en est dans le traitement…

    @+
    😎

    en réponse à : Lancer l’impression page après page #72689
    bebarth
    Maître des clés

    …pas besoin d’indiquer nEnd si on n’imprime qu’une seule page.

    @+

    😎

    en réponse à : Extraction automatique 1ère page pdf par lot #72687
    bebarth
    Maître des clés

    bonjour,

    pour moi il faudra attendre la semaine prochaine car je suis sans ordinateur…

    j’espère que ton stage est un peu plus long

    @+
    😎

    en réponse à : Extraction automatique 1ère page pdf par lot #72680
    bebarth
    Maître des clés

    bonjour,

    regarde les actions Acrobat :

    https://helpx.adobe.com/fr/acrobat/using/applying-actions-scripts-pdfs.html
    tu devrais y arriver, sinon il faudra attendre la semaine prochaine…

    @+
    😎

    en réponse à : Lancer l’impression page après page #72675
    bebarth
    Maître des clés

    bonjour,

    avec Acrobat Pro ou Reader ?

    je n’ai pas d’ordinateur avec moi cette semaine mais regarde la méthode « print » de l’api référence…

    @+
    😎

    en réponse à : Remplacer valeur numérique en lettres #72673
    bebarth
    Maître des clés

    bonjour,

    Il faudrait écrire un script de touches personnalisé comme celui que j’ai fait pour ce post :

    https://community.adobe.com/t5/acrobat-sdk-discussions/repeated-characters-at-end-of-textbox/m-p/13638180#M91214

    je serai de retour la semaine prochaine.

    @+
    😎

    en réponse à : Quand champ date invisible script ne marche pas. #72669
    bebarth
    Maître des clés
    en réponse à : Quand champ date invisible script ne marche pas. #72666
    bebarth
    Maître des clés

    bonjour,
    Il y avait effectivement une erreur dans le script !
    Mieux, on met le script au niveau du document :
    if (this.getField("validite").value=="") this.getField("validite").value=util.printd("dd/mm/yyyy", new Date(new Date().getTime()+(365*24*3600*1000)));

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Quand champ date invisible script ne marche pas. #72657
    bebarth
    Maître des clés

    bonjour,
    Si tu caches le champ de la date du jour cela signifie que tu n’en a pas besoin !
    Tu peux donc réduire ton script à :
    Oups! Script modifié…
    if (event.value=="") event.value=util.printd("dd/mm/yyyy", new Date(new Date().getTime()+(365*24*3600*1000)));

    @+
    😎

    • Cette réponse a été modifiée le il y a 1 année et 9 mois par bebarth.
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Atteindre un champ dans un formulaire #72656
    bebarth
    Maître des clés

    bonjour,
    En script de document tu écris :
    this.getField("nomDuChamp").setFocus();

    @+
    😎

    en réponse à : Supprimer une annotation spécifique #72641
    bebarth
    Maître des clés

    👍

    en réponse à : Supprimer une annotation spécifique #72636
    bebarth
    Maître des clés

    bonjour,
    En fait il faut utiliser le code indiqué dans le fichier joint, car avec celui de cette page certains “crochets” ne s’affichent pas !


    @Merlin
    : une idée du pourquoi ?

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Supprimer une annotation spécifique #72625
    bebarth
    Maître des clés

    bonjour,
    Le plus simple est de donner un nom à l’annotation lors de sa création puis supprimer celle qui porte ce nom !

    if (event.target.buttonGetCaption()=="AJOUTER") {
    var coordonnees=event.target.rect;
    var annotation=this.addAnnot({
    page: 0,
    type: "Text",
    point: [coordonnees[2]+20,coordonnees[1]+20],
    name: "annotationNo1",
    });
    event.target.buttonSetCaption("SUPPRIMER");
    event.target.fillColor=color.red;
    event.target.textColor=color.white;
    } else {
    var lesAnnotations=this.getAnnots({nPage:0});
    for (var i=0; i<lesAnnotations.length; i++)
    if (lesAnnotations.name=="annotationNo1") lesAnnotations.destroy();
    event.target.buttonSetCaption("AJOUTER");
    event.target.fillColor=color.green;
    event.target.textColor=color.black;
    }

    @+
    😎

    • Cette réponse a été modifiée le il y a 1 année et 9 mois par Merlin. Raison: Ce script n'est pas complet, voir ci-dessous
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Usage de la console #72612
    bebarth
    Maître des clés

    bonjour,
    Il faut écrire le script comme ceci :
    for (var i=0; i<this.numFields; i++) {
    var oFld=this.getField(this.getNthFieldName(i));
    if (oFld.type == "text" && (/^Question\.\d+\.\d+/.test(oFld.name) || /^R\.\d+\.\d+/.test(oFld.name) || /^Q\.\d+\.\d+/.test(oFld.name))) {
    oFld.setAction("Calculate", "EditReps();");
    oFld.setAction("Keystroke", "Default();");
    }
    }

    @+
    😎

    en réponse à : Formulaire PDF #72605
    bebarth
    Maître des clés

    Il faut mettre les champs en lecture seule uniquement si ils ont été remplis !
    var lesChamps=["champs1","champs2","champs3","etc."];
    for (var i=0; i<lesChamps.length; i++) {
    if (this.getField(lesChamps).value!=this.getField(lesChamps).defaultValue) this.getField(lesChamps).readonly=true;
    }

    @+
    😎

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

    bonjour,
    Le plus simple est de mettre le noms des champs dans une table et de placer ce script au même endroit que le précédent : “Lorsque le document sera enregistré” :
    var lesChamps=["champs1","champs2","champs3","etc."];
    for (var i=0; i<lesChamps.length; i++) this.getField(lesChamps).readonly=true;

    @+
    😎

    PS : Voir la copie d’écran car les crochets n’apparaissent pas dans la ligne de code !

    • Cette réponse a été modifiée le il y a 1 année et 9 mois par bebarth.
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Formulaire récalcitrant ! #72599
    bebarth
    Maître des clés

    Voici une petite modification de ton formulaire sur le champ Email ou j’ai rajouté un script pour demander une adresse valide

    L’expression régulière que tu utilises vérifies vraiment que le minimum… On peut par exemple utiliser des caractères accentués alors qu’ils ne sont pas autorisés.
    Si tu cherches sur internet tu trouveras des dizaines d’expressions régulières pour cette vérification et toutes différentes !
    Moi j’utilise celle-ci…
    /^[a-zA-Z0-9.!#$%&'*+/=?^_{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/`

    @+
    😎

    en réponse à : Formulaire récalcitrant ! #72598
    bebarth
    Maître des clés
    bonjour,

    TOUT fonctionne correctement comme je le souhaitais

    Une petite précision : lorsqu’on utilise “event” dans un script, ce n’est pas la peine de le faire précéder par “this”.
    “event” ne s’utilise que dans le document actif et “this” indique que c’est pour le document actif ! C’est donc redondant…

    @+
    😎

    en réponse à : Formulaire PDF #72585
    bebarth
    Maître des clés

    bonjour,
    Oui, en script d’action lorsque le document sera enregistré on peut passer ces champs en lecture seule !

    @+
    😎

    en réponse à : Formulaire récalcitrant ! #72583
    bebarth
    Maître des clés

    bonjour,
    Il faut modifier l’ordre de calcul des champs.
    Voici un des scripts :
    if (this.getField("CARTE").value=="") var total=this.getField("1JS").value*this.getField("PU1JSE").value;
    else var total=this.getField("1JS").value*this.getField("PU1JS").value;
    if (this.getField("SUPPL").value=="") event.value=total;
    else event.value=total*0.3;
    Ici on peut indiquer n’importe quoi en numéro de carte et pour la réduction supplémentaire !
    On pourrait peut-être ajouter une expression régulière afin de vérifier si c’est bien un numéro de carte correct…

    Désolé pour ne pas t’avoir répondu directement sur ta boite mail, j’ai encore été très occupé ces derniers jours.

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
Affichage de 99 réponses de 298 à 396 (sur un total de 3,263)