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,102)
  • Auteur
    Réponses
  • en réponse à : Fonction TVA multiple #74094
    bebarth
    Maître des clés

    bonjour,
    Il y a un exemple ici :

    Enregistrer sous… avec concaténation de champs

    @+
    😎

    en réponse à : Liste déroulante influence la suite du document #74091
    bebarth
    Maître des clés

    bonjour,
    Ci-joint le fichier qui devrait répondre à ton attente, et ci-dessous les scripts utilisés :

    // Script de document
    var listesFilles= {
    "Product 1": [["- Please Choose -",0],"Process A1", "Process B1", "Process C1", "Process D1"],
    "Product 2": [["- Please Choose -",0],"Process A2", "Process B2", "Process C2", "Process D2"],
    "Product 3": [["- Please Choose -",0],"Process A3", "Process B3", "Process C3", "Process D3"],
    "Product 4": [["- Please Choose -",0],"Process A4", "Process B4", "Process C4", "Process D4"],
    };
    var nbPages=4; // Nombre de pages sans les modèles
    var apresPage=2; // No de page après laquelle insérer les modèles
    function suppression() {
    if (this.numPages>nbPages) {
    this.deletePages({
    nStart: apresPage,
    nEnd: this.numPages-apresPage-1
    });
    }
    }

    // Script de touches personnalisé Product Type
    if (!event.willCommit) {
    suppression();
    if (event.changeEx!=0) this.getField("ProcessType").setItems(listesFilles[event.changeEx]);
    else this.getField("ProcessType").clearItems();
    }

    // Script de touches personnalisé Process Type
    if (!event.willCommit) {
    suppression();
    if (event.changeEx!=0) {
    var pagesModeles=this.templates;
    for (var j=pagesModeles.length-1; j>=0; j--) {
    if (pagesModeles[j].name.indexOf(event.changeEx)==0) pagesModeles[j].spawn(apresPage, true, false);
    }
    }
    }

    Est-ce que cela te convient ? N’hésite pas à demander pour des explications.

    @+
    😎

    PS : Changement de variable de i en j car il y a un problème d’affichage lorsque le i est entre crochets…

    • Cette réponse a été modifiée le il y a 2 jours et 22 heures par bebarth.
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Liste déroulante influence la suite du document #74085
    bebarth
    Maître des clés

    bonsoir,

    c’est faisable et la complexité dépend des connaissances en JavaScript!

    Je regarde demain.

    bonne soirée.

    @+
    😎

    en réponse à : Liste déroulante influence la suite du document #74080
    bebarth
    Maître des clés

    bonjour,
    Je viens de commencer à regarder ton fichier.
    Est-ce bien des liste mère/filles ? Est-ce que tous les éléments du menu “Process Type” diffèrent en fonction de chaque élément du menu “Product Type” ? Par exemple, pour “Product 1” on va avoir un menu “Process Type” avec les éléments “Process A1”, “Process B1″,”Process C1”, etc. et pour “Product 2” on va avoir un menu “Process Type” avec les éléments “Process A2”, “Process B2″,”Process C2”, etc. et ainsi de suite ?
    Pour chaque sélection, ajoute-t-on une seule ou plusieurs pages ? En fin de document ou dans le milieu ?

    @+
    😎

    en réponse à : Fonction TVA multiple #74070
    bebarth
    Maître des clés

    bonjour,
    Ce serait possible de créer un script, mais manuellement se sera plus rapide.
    Il existe une fonction Acrobat pour créer plusieurs copies. Comme tu en as besoin de 72 sur 3 pages, il faut d’abord les mettre tous sur une seule, puis les répartir.

    Plus de détails ce soir si tu n’y es pas arrivé…

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Liste déroulante influence la suite du document #74061
    bebarth
    Maître des clés

    bonjour,
    De ce que je comprend, il faut combiner une liste mère-fille avec des pages modèles qui ne seront affichées qu’en fonction du choix.
    Je ne sais pas si je pourrai regarder ton fichier cette semaine… mais je fais ça au plus vite ! Désolé si c’est urgent.

    @+
    😎

    en réponse à : Enregistrer sous… avec concaténation de champs #74054
    bebarth
    Maître des clés

    bonsoir,

    J’ai du formater la date en américain YYYY-MM-JJ pour supprimer les “/” et pour le classement dans l’explorateur.

    Pour le classement, ce format est beaucoup plus adéquat que le format français…

    @+
    😎

    en réponse à : Faire apparaître une image dans le PDF #74044
    bebarth
    Maître des clés

    bonjour,
    Tu ajoutes un script à ton bouton “insertimage” :
    this.getField("image").buttonImportIcon();

    Par contre, ton champ “image” doit être un bouton ou un champ image mais pas un champ texte…

    @+

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Enregistrer sous… avec concaténation de champs #74036
    bebarth
    Maître des clés

    bonjour,
    …et si cela te convient, voici le script à placer dans le répertoire JavaScipt d’Acrobat. Tu peux nommer ce fichier comme il te convient. Pour mon exemple je l’ai nommé SaveAs_tfx256.js
    SaveAs_tfx256=app.trustedFunction(function(chemin) {
    app.beginPriv();
    this.saveAs({
    cPath: chemin,
    bCopy: true,
    bPromptToOverwrite: true
    });
    app.endPriv();
    })

    Et voici le script du bouton d’enregistrement. Ici on ne vérifie que les champs ne sont pas vide, mais on peut également vérifier si le champ DATE est bien une date et si les autres champs contiennent bien certains caractères. A noter que si le champ DATE contient des barres obliques “/” il faudra les remplacer ou supprimer pour ne pas perturber le chemin du fichier.
    if (this.getField("DATE").value!="" && this.getField("NOM").value!="" && this.getField("Prénom").value!="" && this.getField("Lieu").value!="") {
    try {
    SaveAs_tfx256(this.path.substr(0,this.path.lastIndexOf("/")+1)+this.getField("DATE").value+" # "+this.getField("NOM").value+" # "+this.getField("Prénom").value+" # "+this.getField("Lieu").value+".pdf");
    this.resetForm();
    } catch(e) {
    this.getField("leScript").display=display.visible;
    app.alert("Le fichier \"SaveAs_tfx256.js\" n'est pas installé sur cet ordinateur.");
    }
    } else app.alert("Les 4 champs doivent être remplis.",3);
    this.dirty=false;

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Liste déroulante influence la suite du document #74034
    bebarth
    Maître des clés

    bonjour,
    Il faudrait voir exactement ton formulaire car de ce que je comprends ce ne sont pas exactement des listes mères-filles vu qu’il n’y a qu’un seul menu déroulant…

    @+
    😎

    en réponse à : Remplissage automatique avec fichier Excel #74030
    bebarth
    Maître des clés

    Petite précision, il faut enregistrer ton fichier Excel au format .csv, avec séparateur point-virgule.

    Voici un exemple avec un menu déroulant.
    En script de document :
    this.getField("Zone d'alarme").clearItems();
    var p=this.getDataObject(this.dataObjects[0].name);
    var fichier=this.getDataObjectContents(p.name);
    var donnees=util.stringFromStream(fichier);
    var rangees=donnees.split("\r\n");
    var colonnes=new Array();
    for (var i=0 ; ivar cellule=[[“Sélectionnez”,0]]`
    for (var j=1 ; jthis.getField(“Zone d’alarme”).setItems(cellule);`
    Et en script de touches personnalisé du menu déroulant :
    if (!event.willCommit) {
    if (event.changeEx!=0) {
    var lesValeurs=event.changeEx.split(";");
    this.getField("Catégorie").value=lesValeurs[0];
    this.getField("Libellé").value=lesValeurs[1];
    } else {
    this.getField("Catégorie").value="";
    this.getField("Libellé").value="";
    }
    }

    Pour info, il faut éviter d’indiquer des noms de champs avec des caractères accentués qui peuvent perturber le calcul des scripts.

    @+
    😎

    • Cette réponse a été modifiée le il y a 2 semaines et 6 jours par bebarth.
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Remplissage automatique avec fichier Excel #74029
    bebarth
    Maître des clés

    bonjour,
    Pour pouvoir remplir automatiquement certains champs il faut forcément en remplir au moins un…
    Ton champ “Zone d’alarme” est de type “Zone de liste”. Veux-tu le remplir automatiquement avec la liste indiquée dans le champ Excel ? Si il y a 3000 référence ça ne va pas être très pratique d’utilisation. Idem si c’est un menu déroulant…

    @+
    😎

    en réponse à : Liste déroulante multilignes #74000
    bebarth
    Maître des clés

    bonjour,
    Écrire un élément d’un menu déroulant sur plusieurs lignes n’est possible qu’avec un script, par exemple :
    this.getField("nomChamp").setItems(["Élément 1\rsur 2 lignes","Élément 2","Élément 3","Élément 4\rsur 2 lignes","Élément 5"]);

    Tu colles ce script dans la console vide, puis tu sélectionnes tout ce script et touche ENTER du clavier numérique.

    @+
    😎

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

    bonsoir,
    Voici un script pour calculer la date de fin de projet pour ton document (fichier Essai_calcul_date_sur_masque_BB).
    try {
    var n=event.target.name.indexOf(".");
    var nomChamp=event.target.name.substr(0,n)+".FLECHAGE.103a_DebutTravaux";
    if (this.getField("103c_DureeMois").value!="" && this.getField(nomChamp).value!="") {
    var laDate=this.getField(nomChamp).value;
    var objetDate=util.scand("dd/mm/yyyy",laDate);
    objetDate.setMonth(objetDate.getMonth()+this.getField("103c_DureeMois").value);
    event.value=util.printd("dd/mm/yyyy",objetDate);
    } else event.value="";
    } catch(e) {}

    Si lorsque que tu génères la page tu indiques de ne pas renommer les champs de la page modèle (si tu n’as besoin de générer qu’une seule page) cela simplifie le script (fichier Essai_calcul_date_sur_masque_BB1).
    Pour générer la page sans renommer les champs :
    this.getTemplate("FLECHAGE").spawn(this.numPages, false, false);
    Le script réduit :
    if (this.getField("103c_DureeMois").value!="" && this.getField("103a_DebutTravaux").value!="") {
    var laDate=this.getField("103a_DebutTravaux").value;
    var objetDate=util.scand("dd/mm/yyyy",laDate);
    objetDate.setMonth(objetDate.getMonth()+this.getField("103c_DureeMois").value);
    event.value=util.printd("dd/mm/yyyy",objetDate);
    } else event.value="";

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Script pour modifier l’ordre des pages #73988
    bebarth
    Maître des clés

    bonjour,
    Effectivement, il faut que chaque page soit une page modèle puis qu’elle soit générée depuis Acrobat (Reader), comme dans l’exemple joint.
    Voici le script pour cet exemple.
    var noPage=event.target.name.substr(4);
    var modeles=this.templates;
    if (event.target.value!="Off") {
    for (i=0; i<modeles.length; i++) {
    if (modeles.name==noPage) modeles.spawn(this.numPages,false);
    }
    } else {
    var lesPages=this.getField("Page "+noPage).page;
    this.deletePages(lesPages[1]);
    }
    this.pageNum=0;

    @+
    😎

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

    bonjour,

    Curieusement il fonctionne pour les champs réponse mais ne fonctionne pas pour les champs question (sans que la console ne renvoie d’erreur).

    Ça fait un peu juste pour trouver le pourquoi ça ne fonctionne pas !

    Pour la numérotation des champs, je trouvais plus simple comme ça plutôt qu’avoir 2 indices en fin de nom de champ

    OK ! Pour moi i était l’indice du champ et pour modifier tous les champs on ne devait pas mettre le point (par exemple this.getField(“question”).fillColor pour modifier tous les champs de même nom sans indiquer les indices) mais je viens de vérifier et avec le point ça fonctionne également…

    @+
    😎

    en réponse à : Propriété d’un champ #73972
    bebarth
    Maître des clés

    bonjour,
    Voici une version pour “simplifier” l’écriture du script :
    function CoulQ() {
    switch (this.getField("Menu.3").value) {
    case "Jaune":
    var Coul=color.yellow;
    break;
    case "Vert":
    var Coul=color.green;
    break;
    case "Bleu":
    var Coul=color.blue;
    break;
    case "Rouge":
    var Coul=color.red;
    break;
    default:
    var Coul=color.transparent;
    }
    for (var i=2; i<6; i++) this.getField(i+"question.").fillColor=Coul;
    }

    Juste une question : dans la boucle finale, la position de la variable “i” me parait étrange ! Ne serait-ce pas plutôt :
    ... this.getField("question."+i).fillColor ...

    @+
    😎

    en réponse à : Propriété d’un champ #73968
    bebarth
    Maître des clés

    bonjour,

    Comme ce script ne fonctionne me semble-t-il que sur une page,

    Le script est effectivement écrit pour fonctionner sur une seule page. On pourrait l’adapter pour une utilisation sur plusieurs pages mais il faut définir avant ce que l’on veut exactement car ça complique un peu…

    @+
    😎

    en réponse à : Propriété d’un champ #73959
    bebarth
    Maître des clés

    bonjour,

    je ne pourrai regarder que demain…

    @+
    😎

    en réponse à : Extraction de pages par séquence #73955
    bebarth
    Maître des clés

    bonjour,
    Tu peux utiliser ce script soit depuis la console ou en utilisant une action.
    Si tu ne l’utilise qu’une ou quelques fois je te conseille la console sinon si tu penses l’utiliser fréquemment, privilégie l’action.
    Et si tu ne sais pas comment ça se passe, tu demandes !

    @+
    😎

    en réponse à : Propriété d’un champ #73952
    bebarth
    Maître des clés

    bonjour,
    2 façons de faire :

    for (var i=0; i<this.numFields; i++) {
    if (this.getNthFieldName(i).indexOf("ABC")==0) {
    ...
    }
    }
    ou
    for (var i=0; i<this.numFields; i++) {
    if (/^ABC/.test(this.getNthFieldName(i))) {
    ...
    }
    }

    @+
    😎

    en réponse à : Propriété d’un champ #73948
    bebarth
    Maître des clés

    Voici le script expliqué :

    var indMax=0;
    for (var i=0; i<this.numFields; i++) { // numFields = Nombre de champs dans le document
    if (this.getNthFieldName(i).indexOf("question.")==0) indMax++; // Si le nom du champ commence par "question." on incrémente indMax
    // this.getNthFieldName(i) = Nom du champ d'indice i
    // indexOf("question.") = Recherche la chaine de caractères "question."
    // si le résultat est -1 la chaine de caractères n'a pas été trouvée
    // sinon indique la position de cette chaine de caractères
    // donc ==0 signifie que le nom du champ commence par "question."
    }
    for (var a=0; a<indMax; a++) { // strictement inférieur car "question." basé sur 0
    ...
    }

    Tu devrais trouver beaucoup d’explication en consultant :
    https://opensource.adobe.com/dc-acrobat-sdk-docs/library/jsapiref/JS_API_AcroJS.html
    pour les propriétés ou méthodes, ou en anglais
    https://www.w3schools.com/jsref/default.asp
    ou en français
    https://developer.mozilla.org/fr/docs/Web/JavaScript/Guide/Introduction
    pour le JavaSCript

    @+
    😎

    en réponse à : Propriété d’un champ #73945
    bebarth
    Maître des clés

    bonjour,
    Voici un script qui compte le nombre de chqmps dont le nom commence par “question.”.
    var indMax=0;
    for (var i=0; i<this.numFields; i++) {
    if (this.getNthFieldName(i).indexOf("question.")==0) indMax++;
    }
    for (var a=0; a<indMax; a++) { // strictement inférieur
    ...
    }

    Avec ce script il faut que tous les indices soient consécutifs en partant de zéro sinon il faut mettre les noms des champs (ou juste les indices) dans une table et utiliser la longueur de la table en indMax;

    @+
    😎

    en réponse à : Propriété d’un champ #73940
    bebarth
    Maître des clés

    J’ai écris un utilitaire il y a quelques temps, mais il ne sera pas très utile à Michel car il se place en script d’application et je ne sais pas si et comment ça fonctionne avec son logiciel.

    Je partage le fichier .txt (à renommer en .js) si ça intéresse quelqu’un.

    @+
    😎

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

    bonjour,
    https://opensource.adobe.com/dc-acrobat-sdk-docs/library/jsapiref/JS_API_AcroJS.html#id602
    La position d’un champ est définie dans une table de 4 éléments qui indique les positions x et y dans la feuille du point supérieur gauche et du point inférieur droit [x supérieur gauche, y supérieur gauche, x inférieur droit, y inférieur droit].

    @+
    😎

    en réponse à : Propriété d’un champ #73933
    bebarth
    Maître des clés

    Voici ce que je te disais avec la méthode fieldfull.

    if (event.fieldFull) {
    app.alert("Le champ texte est plein.\rNous allons augmenter sa hauteur pour pouvoir continuer à frapper.");
    var nomChamp=event.target.name;
    this.resetForm([nomChamp]); // Reset field to lose focus
    var aRect=event.target.rect;
    aRect[3]=aRect[3]-event.target.textSize*1.16;
    event.target.rect=aRect;
    event.change=event.changeEx;
    this.getField(nomChamp).setFocus();
    }

    Par contre :

    1. Je n’arrive pas à re-frapper directement. Il faut re-cliquer dans le champ.
    2. Impossible de revenir directement à un champ plus petit si on supprime du texte.

    @+
    😎

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

    bonjour,
    Voici ce que je t’ai fait ! Les champs ne sont visibles que si la question et la réponse correspondante ne sont pas hors page.
    Ce n’est pas très compliqué. Tu me dis ce que tu ne comprends pas.

    // Script de document
    var hauteurChamp=7.5;
    var corps=9.5;
    var interligne=corps*1.16;
    var margeBas=0;
    var mm2pt=72/25.4;
    margeBas*=mm2pt;
    function reglage(champ,rect) {
    champ.delay=true;
    champ.rect=rect;
    champ.delay=false;
    }
    function reglageChamps(ind) {
    for (var i=ind; i<10; i++) {
    var f=this.getField("question."+i);
    var fRect=f.rect;
    var haut=fRect[1];
    var ff=this.getField("nbQ."+i);
    var ffRect=ff.rect;
    var g=this.getField("reponse."+i);
    var gRect=g.rect;
    var gg=this.getField("nbR."+i);
    var ggRect=gg.rect;
    if (i==ind) {
    if (event.target.name.indexOf("nbQ")==0) {
    var originale=fRect[3];
    var finale=fRect[1]-hauteurChamp*mm2pt-(Number(event.changeEx)-1)*interligne;
    } else {
    var originale=gRect[3];
    var finale=gRect[1]-hauteurChamp*mm2pt-(Number(event.changeEx)-1)*interligne;
    }
    var delta=originale-finale;
    if (event.target.name.indexOf("nbQ")==0) {
    fRect[3]=finale;
    reglage(f,fRect);
    gRect[1]-=delta;
    ggRect[1]-=delta;
    ggRect[3]-=delta;
    }
    gRect[3]-=delta;
    var bas=gRect[3];
    reglage(g,gRect);
    reglage(gg,ggRect);
    } else {
    fRect[1]-=delta;
    fRect[3]-=delta;
    reglage(f,fRect);
    ffRect[1]-=delta;
    ffRect[3]-=delta;
    reglage(ff,ffRect);
    gRect[1]-=delta;
    gRect[3]-=delta;
    var bas=gRect[3];
    reglage(g,gRect);
    ggRect[1]-=delta;
    ggRect[3]-=delta;
    reglage(gg,ggRect);
    }
    if (haut>=margeBas && bas>=margeBas) {
    f.display=display.visible;
    ff.display=display.visible;
    g.display=display.visible;
    gg.display=display.visible;
    } else {
    f.display=display.hidden;
    ff.display=display.hidden;
    g.display=display.hidden;
    gg.display=display.hidden;
    }
    }
    }

    // Script de touches personnalisé
    if (!event.willCommit) {
    reglageChamps(event.target.name.substring(event.target.name.lastIndexOf(".")+1));
    }

    @+
    😎

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

    …et si le ou les premiers champs ont beaucoup de lignes, que deviennent les derniers champs qui deviennent hors page ? Il sont supprimés ? Doit-il être possible de revenir en arrière en diminuant le nombre de lignes d’un champ ?

    @+
    😎

    en réponse à : Propriété d’un champ #73919
    bebarth
    Maître des clés

    bonjour,
    Je ne suis pas dispo aujourd’hui, mais regarde si tu peux faire quelque chose avec la méthode fieldFull.

    @+
    😎

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

    C’est le plus simple…

    @+
    😎

    en réponse à : Propriété d’un champ #73915
    bebarth
    Maître des clés

    bonjour & Merci pour tous ces compliments…
    Quand on est passionné, on fait ça avec plaisir ! Je n’ai qu’un petit regret c’est qu’il n’y a pas plus de problèmes posés sur ce forum car ils sont généralement bien plus intéressants (JavaScriptement parlant :-)) que ceux posés sur le forum Adobe.

    Oui, je me demandais si ça pouvais marcher à partir d’un bouton en désactivant le code permettant de créer une nouvelle page.

    Pour cela il faudrait connaitre le nombre de lignes et pour connaitre le nombre de lignes, la seule solution que j’ai trouvé est celle proposée avec ajout/suppression de pages.

    @+
    😎

    en réponse à : Propriété d’un champ #73899
    bebarth
    Maître des clés

    bonjour,

    // En script d'application (extension du fichier .js)
    if (app.formsVersion>=8) {
    ajoutPage=app.trustedFunction(function(cettePage,largeur,hauteur) {
    app.beginPriv();
    this.newPage(cettePage,largeur,hauteur);
    app.endPriv();
    });
    suppressionPage=app.trustedFunction(function(cettePage) {
    app.beginPriv();
    this.deletePages(cettePage);
    app.endPriv();
    });
    }

    Comme indiqué, cette partie doit être placée en script d’application dans un fichier .js, mais avec PDF XChange editor je ne sais pas si c’est possible, et si ça l’est je ne sais pas ou il faut placer le fichier.

    Sans les privilèges, tu ne pourras pas ajouter une page ou la supprimer depuis un script déclenché depuis un bouton ! Tu ne pourras le faire qu’à partir de la console ou d’une action.

    @+
    😎

    • Cette réponse a été modifiée le il y a 2 mois et 3 semaines par bebarth.
    en réponse à : Propriété d’un champ #73877
    bebarth
    Maître des clés

    Lorsque tu auras trouvé si on peut placer des scripts d’application, voici un nouveau fichier qui devrait fonctionner avec un bouton.
    J’ai supprimé le calcul des nombres de paragraphes, mots et caractères et le script est en pièce jointe au fichier au format txt.

    // En script d'application (extension du fichier .js)
    if (app.formsVersion>=8) {
    ajoutPage=app.trustedFunction(function(cettePage,largeur,hauteur) {
    app.beginPriv();
    this.newPage(cettePage,largeur,hauteur);
    app.endPriv();
    });
    suppressionPage=app.trustedFunction(function(cettePage) {
    app.beginPriv();
    this.deletePages(cettePage);
    app.endPriv();
    });
    }

    // En script de calcul du bouton
    console.show();
    console.clear();
    // Variables
    var p=this.numPages;
    var g=this.getField("champTexte");
    var gRect=g.rect;
    var hautChamp=gRect[1];
    var basChamp=gRect[3];
    var paragraphes=g.value.split("\r");
    var nbParagraphes=paragraphes.length;
    var toutLeTexte=g.value;
    var nbCaracteres=toutLeTexte.length;
    var texteEntier=g.value;
    var nbLignesTexte=0;
    var nbLignes=0;
    var deltaLignes=0;
    var aRect=this.getPageBox("Crop");
    var laPage=0;
    if (toutLeTexte.length) {
    // Boucle si texte débordant de la page
    while (toutLeTexte.length) {
    // Nouvelle page
    ajoutPage(p, aRect[2], aRect[1]);
    //this.newPage(p, aRect[2], aRect[1]);
    var basMot=hautChamp;
    // Copie du champ
    var f=this.addField("autreChamp", "text", p, g.rect);
    for (var j in g) {
    try {
    if (typeof g[j]!="function" && j!="name" && j!="type" && j!="page" && j!="rect") f[j]=g[j];
    } catch(e) {}
    }
    f.value=toutLeTexte;
    // Aplatissement
    this.flattenPages(p);
    // Nombre de mots
    var nbMots=this.getPageNumWords(p);
    for (var i=0; i<nbMots; i++) { var leMot=this.getPageNthWord(p, i, true); var q=this.getPageNthWordQuads(p, i); m=(new Matrix2D).fromRotated(this,p); mInv=m.invert(); r=mInv.transform(q); r=r.toString(); r=r.split(","); if (Number(r[5])>basChamp) {
    if (Number(r[5])<basMot) {
    var basMot=Number(r[5]);
    if (!laPage) nbLignesTexte++;
    nbLignes++;
    }
    if (!laPage) {
    if (i==0) {
    var hautTexte=Number(r[1]);
    var premiereLigne=basMot;
    var deltaV=hautChamp-hautTexte;
    }
    if (nbLignes==2 && !deltaLignes) var deltaLignes=premiereLigne-Number(r[5]);
    }
    var toutLeTexte=toutLeTexte.substr(toutLeTexte.indexOf(leMot)+leMot.length)
    var toutLeTexte=toutLeTexte.replace(/[\"\”\*\-\_\,\.\;\:!?\'\(\)\{\}\[\]\«\»]$/, "").replace(/\s+$/, "");
    } else break;
    }
    laPage++;
    suppressionPage(p);
    //this.deletePages(p);
    }
    // Redimensionnement
    var champBas=premiereLigne-(deltaLignes*(nbLignes-1))-deltaV;
    if (champBas<=0) var champBas=0; gRect[3]=champBas; g.rect=gRect; g.value=texteEntier; // Texte Alerte et Console var leTexte="Le texte du champ \""+this.getField("champTexte").name+"\" est écrit sur "+nbLignes+" ligne"; if (nbLignes>1) leTexte+="s";
    leTexte+=". ";
    if (champBas!=basChamp) leTexte+="\r\rLe champ a été redimensionné.\rIl comportait "+nbLignesTexte+" lignes visibles entièrement.";
    if (champBas<basChamp) { if (champBas>0) leTexte+="\r\rToutes les lignes sont maintenant visibles.";
    else leTexte+="\r\rLe champ n'est pas assez haut pour afficher tout le texte avec ce corps.";
    }
    console.println(leTexte);
    app.alert(leTexte,3);
    console.hide();
    //this.dirty=false;
    } else {
    app.alert("Il faut écrire un texte dans ce champ pour pouvoir le redimensionner !",3);
    }

    @+
    😎

     

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

    J’ai réussi à faire fonctionner le script via un émulateur PC sur Acrobat et PDF XChange editor.

    Sur PDF XChange editor l’espace en bas de champ est un peu plus important… Je n’ai pas trouvé où on pouvait placer des scripts d’application !
    S’il y a un support client ou un forum tu peux peut-être te renseigner, mais je n’ai pas l’impression que c’est possible ! Idem pour les actions…

    @+
    😎

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

    Par-contre même depuis la Console il n’ajoute pas de page, mais sans retourner de message d’erreur, et le message de résultat précise bien que tout le texte n’est pas affiché.

    …du coup ça ne fonctionne pas ???

    @+
    😎

    en réponse à : Propriété d’un champ #73869
    bebarth
    Maître des clés

    J’ai placé ce script en script de document au départ, dans une fonction que j’ai appelé Redim et que j’appelle via un bouton par la commande Redim(); et ça ne fonctionne pas.

    Ce n’est pas en script de document mais en script d’Application qu’il faut le placer !

    PDF : les différents niveaux d’utilisation des scripts JavaScript

    Je regarde pour ton logiciel plus tard…

    @+
    😎

    • Cette réponse a été modifiée le il y a 2 mois et 3 semaines par bebarth.
    en réponse à : Propriété d’un champ #73863
    bebarth
    Maître des clés

    bonjour,

    De mon coté, le script fonctionne depuis la console

    Ça me réconforte de savoir que ça ne fonctionne pas uniquement chez moi !

    mais je n’arrive pas à le faire tourner à partir d’un bouton

    Comme je l’ai dis précédemment il n’est possible d’exécuter ce script à partir d’un bouton uniquement si le (ou une partie du) script est placé en script d’application. Avec Acrobat il y a un répertoire JavaScript où l’on place ces scripts qui sont exécutés à l’ouverture d’Acrobat.

    A mon avis, il doit y avoir aussi un répertoire JavaSript pour ton logiciel (lequel est-ce déjà ?).

    Tu mes dis !

    @+
    😎

    en réponse à : Propriété d’un champ #73858
    bebarth
    Maître des clés

    Et avec ton texte d’origine qui déborde largement ça retourne ce message d’erreur : NotAllowedError: Security settings prevent access to this property or method. Doc.newPage:35:Field champTexte:Format Voudrais tu donner raison à ma première réponse ?

    Je ne comprends pas, moi ça fonctionne sur mes 2 Mac ?
    Je vais essayer de trouver un PC pour essayer le script !

    @+
    😎

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

    bebarth : on ne peut ni lire ni extraire la pièce jointe, c’est un fichier .js !

    J’ai changé la pièce jointe en .txt, je joints également le fichier.
    C’est étrange car avec mes Mac je peux ouvrir les fichiers .js attachés !

    Est il possible d’exécuter ce script grâce à un bouton?

    Pour que ça fonctionne depuis un bouton il faut mettre un script d’application pour Acrobat, avec ton logiciel je ne sais pas !

    @+
    😎

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

    Idem que Merlin !  …et avec celui de la pièce attachée au fichier, c’est pareil ???

    Effectivement lorsqu’on copie/colle le script du post, cela ne fonctionne plus !!!

    @+
    😎

    en réponse à : Propriété d’un champ #73846
    bebarth
    Maître des clés

    Effectivement, le script collé dans le post ne fonctionne pas, mais celui en pièce attaché au fichier est correct !
    Je donne ici le script qui marche. Je vous invite à modifier les dimensions du champ ou la taille des caractères pour voir la différence.

    console.show();
    console.clear();
    // Variables
    ...
    } else {
    app.alert("Il faut écrire un texte dans ce champ pour en connaître les détails !",3);
    }

    @+
    😎

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

    Ça ne fonctionne pas : TypeError: lesMots.replace is not a function 21:Field:Validate

    Ah !!! J’ai pourtant vérifié plusieurs fois avant de partager…
    Je vérifie cet après-midi !

    @+
    😎

    en réponse à : Propriété d’un champ #73842
    bebarth
    Maître des clés

    bonjour,
    J’avais écris un script il y a déjà quelques temps qui comptait le nombre de lignes d’un champ même si elles n’apparaissaient pas toutes :

    Compter des lignes dans un champ multignes sans caractères de retour à la ligne

    Je m’en suis donc inspiré pour l’adapter et pouvoir redimensionner le champ.

    La réponse longue est oui, il faut compter le nombre de caractères saisis en temps réel et aussi ceux qui sont supprimés. Ça requiert donc une usine à gaz en JavaScript assez longue à développer et ça impose d’utiliser une police à chasse fixe (Courier), et dont le corps ne doit pas varier.

    C’est effectivement une usine à gaz, mais de cette manière mais la police n’a pas besoin d’une chasse fixe !

    Et voici le script à exécuter depuis la console ou en action (également en pièce jointe dans le fichier) :

    console.show();
    console.clear();
    // Variables
    var p=this.numPages;
    var g=this.getField("champTexte");
    var gRect=g.rect;
    var hautChamp=gRect[1];
    var basChamp=gRect[3];
    var paragraphes=g.value.split("\r");
    var nbParagraphes=paragraphes.length;
    var toutLeTexte=g.value;
    var nbCaracteres=toutLeTexte.length;
    var texteEntier=g.value;
    var nbLignesTexte=0;
    var nbLignes=0;
    var deltaLignes=0;
    var aRect=this.getPageBox("Crop");
    var laPage=0;
    // Fonction
    function calculMots(lesMots) {
    var lesMots=lesMots.replace(/[\'\-\’]/g, " ");
    var lesMots=lesMots.replace(/[\"\”\*\_\,\.\;\:\!\?\(\)\{\}\[\]\«\»]/g, "");
    var lesMots=lesMots.replace(/\s+/g, " ");
    var lesMots=lesMots.replace(/^\s+|\s+$/g, "");
    var lesMots=lesMots.replace(/\s+/g, " ");
    var enTable=lesMots.split(" ");
    motsParagraphe.push(enTable.length);
    }
    var motsParagraphe=[];
    for (var i=0; i<nbParagraphes; i++) calculMots(paragraphes);
    if (paragraphes[0].length) {
    // Boucle si texte débordant de la page
    while (toutLeTexte.length) {
    // Nouvelle page
    this.newPage(p, aRect[2], aRect[1]);
    var basMot=hautChamp;
    // Copie du champ
    var f=this.addField("autreChamp", "text", p, g.rect);
    for (var j in g) {
    try {
    if (typeof g[j]!="function" && j!="name" && j!="type" && j!="page" && j!="rect") f[j]=g[j];
    } catch(e) {}
    }
    f.value=toutLeTexte;
    // Aplatissement
    this.flattenPages(p);
    // Nombre de mots
    var nbMots=this.getPageNumWords(p);
    for (var i=0; i<nbMots; i++) {
    var leMot=this.getPageNthWord(p, i, true);
    var q=this.getPageNthWordQuads(p, i);
    m=(new Matrix2D).fromRotated(this,p);
    mInv=m.invert();
    r=mInv.transform(q);
    r=r.toString();
    r=r.split(",");
    if (Number(r[5])>basChamp) {
    if (Number(r[5])<basMot) {
    var basMot=Number(r[5]);
    if (!laPage) nbLignesTexte++;
    nbLignes++;
    }
    if (!laPage) {
    if (i==0) {
    var hautTexte=Number(r[1]);
    var premiereLigne=basMot;
    var deltaV=hautChamp-hautTexte;
    }
    if (nbLignes==2 && !deltaLignes) var deltaLignes=premiereLigne-Number(r[5]);
    }
    var toutLeTexte=toutLeTexte.substr(toutLeTexte.indexOf(leMot)+leMot.length)
    var toutLeTexte=toutLeTexte.replace(/[\"\”\*\-\_\,\.\;\:!?\'\(\)\{\}\[\]\«\»]$/, "").replace(/^\s+$/, "");
    } else break;
    }
    laPage++;
    this.deletePages(p);
    }
    // Redimensionnement
    var champBas=premiereLigne-(deltaLignes*(nbLignes-1))-deltaV;
    if (champBas<=0) var champBas=0;
    gRect[3]=champBas;
    g.rect=gRect;
    g.value=texteEntier;
    // Texte Alerte et Console
    var leTexte="Le texte du champ \""+this.getField("champTexte").name+"\" est écrit sur "+nbLignes+" ligne";
    if (nbLignes>1) leTexte+="s";
    leTexte+=". ";
    var nbMots=0;
    for (var i=0; i<motsParagraphe.length; i++) nbMots+=motsParagraphe;
    leTexte+="Il est composé de "+nbMots+" mot";
    if (nbMots>1) leTexte+="s";
    if (nbParagraphes>1) leTexte+=" et divisé";
    if (nbMots>1) {
    leTexte+=" en "+nbParagraphes+" paragraphe";
    if (nbParagraphes>1) leTexte+="s";
    }
    leTexte+=".\nIl y a "+nbCaracteres+" caractères au total.";
    if (nbParagraphes>1) {
    for (var i=0; i<motsParagraphe.length; i++) {
    leTexte+="\n• Paragraphe "+(i+1)+" : "+motsParagraphe+" mot";
    if (motsParagraphe>1) leTexte+="s";
    leTexte+=" ("+paragraphes.length+" caractères).";
    }
    }
    if (champBas!=basChamp) leTexte+="\r\rLe champ a été redimensionné.\rIl comportait "+nbLignesTexte+" lignes visibles entièrement.";
    if (champBas<basChamp) {
    if (champBas>0) leTexte+="\r\rToutes les lignes sont maintenant visibles.";
    else leTexte+="\r\rLe champ n'est pas assez haut pour afficher tout le texte avec ce corps.";
    }
    console.println(leTexte);
    app.alert(leTexte,3);
    console.hide();
    //this.dirty=false;
    } else {
    app.alert("Il faut écrire un texte dans ce champ pour en connaître les détails !",3);
    }

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Formule trigonométrie #73832
    bebarth
    Maître des clés

    bonjour,
    Les champs a, b et c que tu importes avec la nouvelle pages existent déjà en pages 56, 57…
    A mon avis il suffirait de les renommer (sans oublier de changer les noms dans les scripts).

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Carcatère présent dans une chaine #73817
    bebarth
    Maître des clés

    bonjour,
    Si tu veux utiliser la méthode est(), en ligne 7 et 8 il faut écrire :
    ...
    if (/-/.test(numerateur)) var signeNum = 1;
    if (/-/.test(denominateur)) var signeDen = 1;
    ...

    Sinon avec indexOf :
    ...
    if (numerateur.indexOf("-")>-1) var signeNum = 1;
    if (denominateur.indexOf("-")>-1) var signeDen = 1;
    ...

    @+
    😎

    en réponse à : Formule trigonométrie #73815
    bebarth
    Maître des clés

    bonjour,
    Voici un fichier permettant de faire les calculs selon le nombre de côtés et d’angles connus.
    Le mieux aurait été de faire ça sur une seule page en indiquant les données connues, mais ça demande un peu de réflexion…

    Voic les scripts pour les 2 pages ajoutées :

    //
    event.value=Math.pow(this.getField("a1").value,2)+Math.pow(this.getField("b1").value,2)-(2*this.getField("a1").value*this.getField("b1").value*Math.cos(this.getField("C1").value*Math.PI/180));
    event.value=Math.sqrt(this.getField("c1Carre").value);
    //
    event.value=Math.pow(this.getField("a11").value,2)+Math.pow(this.getField("c11").value,2)-(2*this.getField("a11").value*this.getField("c11").value*Math.cos(this.getField("B11").value*Math.PI/180));
    event.value=Math.sqrt(this.getField("c1Carre").value);
    //
    event.value=Math.pow(this.getField("b111").value,2)+Math.pow(this.getField("c111").value,2)-(2*this.getField("b111").value*this.getField("c111").value*Math.cos(this.getField("A111").value*Math.PI/180));
    event.value=Math.sqrt(this.getField("a111Carre").value);

    //
    event.value=this.getField("a2").value*Math.sin(this.getField("B2").value*Math.PI/180)/Math.sin((this.getField("B2").value+this.getField("C2").value)*Math.PI/180);
    event.value=this.getField("a2").value*Math.sin(this.getField("C2").value*Math.PI/180)/Math.sin((this.getField("B2").value+this.getField("C2").value)*Math.PI/180);
    event.value=180-(this.getField("B2").value+this.getField("C2").value);
    //
    event.value=this.getField("b22").value*Math.sin(this.getField("A22").value*Math.PI/180)/Math.sin((this.getField("A22").value+this.getField("C22").value)*Math.PI/180);
    event.value=this.getField("b22").value*Math.sin(this.getField("C22").value*Math.PI/180)/Math.sin((this.getField("A22").value+this.getField("C22").value)*Math.PI/180);
    event.value=180-(this.getField("A2").value+this.getField("C2").value);
    //
    event.value=this.getField("c222").value*Math.sin(this.getField("A222").value*Math.PI/180)/Math.sin((this.getField("A222").value+this.getField("B222").value)*Math.PI/180);
    event.value=this.getField("c222").value*Math.sin(this.getField("B222").value*Math.PI/180)/Math.sin((this.getField("A222").value+this.getField("B222").value)*Math.PI/180);
    event.value=180-(this.getField("A222").value+this.getField("B222").value);

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Carcatère présent dans une chaine #73813
    bebarth
    Maître des clés

    bonjour,
    On peut également utiliser la méthode “indexOf” :
    // MISE EN VARIABLE
    str = this.getField("num").value;
    // SI LA VARIABLE CONTIENT "-"
    if (str.indexOf("-") > -1) {
    // code à exécuter
    }

    Pas de préférence à priori !

    @+
    😎

    en réponse à : Formule trigonométrie #73811
    bebarth
    Maître des clés

    ben on peut faire à peu près la même chose si on a 2 côtés et un angle on un seul côté et 2 angles !

    @+
    😎

    en réponse à : Formule trigonométrie #73807
    bebarth
    Maître des clés

    bonjour,
    Voici ce que je t’ai fait pour calculer les angles si on a tous les côtés.
    Tu me dis si ça t’intéresse et je te ferai le reste !

    //
    event.value=(Math.pow(this.getField("b").value,2)+Math.pow(this.getField("c").value,2)-Math.pow(this.getField("a").value,2))/(2*this.getField("b").value*this.getField("c").value);
    event.value=(Math.acos(this.getField("cosA").value)*180/Math.PI).toFixed(2);
    //
    event.value=(Math.pow(this.getField("a").value,2)+Math.pow(this.getField("c").value,2)-Math.pow(this.getField("b").value,2))/(2*this.getField("a").value*this.getField("c").value);
    event.value=(Math.acos(this.getField("cosB").value)*180/Math.PI).toFixed(2);
    //
    event.value=(Math.pow(this.getField("a").value,2)+Math.pow(this.getField("b").value,2)-Math.pow(this.getField("c").value,2))/(2*this.getField("a").value*this.getField("b").value);
    event.value=(Math.acos(this.getField("cosC").value)*180/Math.PI).toFixed(2);
    //
    event.value=(this.getField("A").value+this.getField("B").value+this.getField("C").value).toFixed(1)+"°";

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Extraction de pages par séquence #73794
    bebarth
    Maître des clés

    Si tu dois effectuer le script régulièrement il vaut mieux le mettre en action, et si tes fichiers sont très gros et que tu as l’impression que ça plante il faut ajouter au script un affichage de l’avancement.
    Tu me dis…

    @+
    😎

    en réponse à : Extraction de pages par séquence #73792
    bebarth
    Maître des clés

    bonjour,
    Voici un script que tu pourras exécuter soit à partir de la console ou d’une action.
    var papierA=app.newDoc();
    var papierB=app.newDoc();
    var papierC=app.newDoc();
    for (var i=0; i<this.numPages; i+=4) {
    papierA.insertPages ({
    nPage: papierA.numPages-1,
    cPath: this.path,
    nStart: i
    });
    papierB.insertPages ({
    nPage: papierB.numPages-1,
    cPath: this.path,
    nStart: i+1,
    nEnd: i+2
    });
    papierC.insertPages ({
    nPage: papierC.numPages-1,
    cPath: this.path,
    nStart: i+3
    });
    }
    papierA.deletePages(0);
    papierB.deletePages(0);
    papierC.deletePages(0);
    papierA.viewState={overViewMode:2};
    papierB.viewState={overViewMode:2};
    papierC.viewState={overViewMode:2};
    papierA.saveAs({
    cPath: this.path.replace(/.pdf$/i," (Impression papier A).pdf"),
    });
    papierB.saveAs({
    cPath: this.path.replace(/.pdf$/i," (Impression papier B).pdf"),
    });
    papierC.saveAs({
    cPath: this.path.replace(/.pdf$/i," (Impression papier C).pdf"),
    });

    @+
    😎

    en réponse à : Extraction de pages par séquence #73790
    bebarth
    Maître des clés

    Autre question : La différence entre les 2 premières pages à extraire (1,4 -> ∆=3) et les autres (4,8 ou 8,12 -> ∆=4) n’est pas la même.
    Est-ce bien correct ?

    @+
    😎

    en réponse à : Extraction de pages par séquence #73789
    bebarth
    Maître des clés

    bonjour,
    Ce n’est pas trop compliqué, je te fait ça dans l’après-midi.
    Par contre, les pages imprimées sur papier C (4, 8, …) le sont déjà sur le papier A ! Correct ???
    Veux-tu un script uniquement pour imprimer les pages ou pour les extraire dans un autre fichier afin de les imprimer ?

    @+
    😎

    en réponse à : Calcul IMC #73770
    bebarth
    Maître des clés

    bonjour & Bonne Année à tous !
    Avec ton fichier il n’y a pas de raison pour que le résultat s’efface…
    Voici une autre version où les 2 champs sont formatés en “Nombre” et le résultat avec virgule.

    this.getField("IMC").value = imc.toFixed(1).toString().replace(/[.]/,",");

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Condition sur premier caractère #73760
    bebarth
    Maître des clés

    bonjour,
    Tu peux écrire (non vérifié) :
    var numerateur=this.getField("num").value;
    var denominateur=this.getField("den").value;
    if (denominateur.indexOf("-")==0) {
    if (numerateur.indexOf("-")==0) {
    var numerateur=numerateur.substr(1);
    var denominateur=denominateur.substr(1);
    } else {
    var numerateur="-"+numerateur;
    var denominateur=denominateur.substr(1);
    }
    }
    this.getField("help.3").value="Décomposition du numérateur : "+numerateur+"\n"+"Décomposition du dénominateur : "+denominateur;

    @+
    😎

    en réponse à : Liste déroulante #73753
    bebarth
    Maître des clés

    bonjour,
    Rien que sur cette feuille il y a 86 champs avec des calculs. Ce qui provoque la latence avant affichage des champs !
    Il faudrait connaitre la totalité des calculs pour voir ce qui est possible de faire, mais déjà as-tu besoin de remplir/calculer toutes les lignes ? Elles ne sont certainement pas toutes remplies à chaque fois !

    @+
    😎

    en réponse à : Affichage aléatoire #73740
    bebarth
    Maître des clés

    Peux tu m’expliquer les quelques lignes qui permettent d’afficher une question aléatoirement mais avec une plus grande fréquence pour les réponses erronées.

    Lorsque l’on crée le menu déroulant depuis la table “reponses”, la valeur d’exportation de chaque élément est mise à 0. Cette valeur représente le nombre de réponses exactes pour cette question et est incrémentée lorsque la réponse est correcte.
    var moyenne=0;
    for (var i=1; i<nb; i++) moyenne+=reponses[1];
    moyenne/=(reponses.length-1);
    signifie que l’on fait la moyenne de toutes ces valeurs d’exportation, et “for (var i=1…” et non i=0 car on ne tient pas compte de la première ligne “-/-“. Idem pour “…length-1);
    var aleatoire=Math.floor(Math.random()*nb);
    Bon ben ça c’est un nombre aléatoire sur le nombre d’éléments de la table “reponses”.
    while (reponses[aleatoire][1]>moyenne || laQuestion=="-") {
    var aleatoire=Math.floor(Math.random()*nb);
    var laQuestion=lesReponses[aleatoire][0];
    var laReponse=lesReponses[aleatoire][1];
    }
    …et ça c’est une boucle. Tant que le deuxième élément ([1]) de l’élément à la position [aleatoire] de la table “reponses” est supérieure à la moyenne, ou si laQuestion==”-“, on recommence le tirage d’un nombre aléatoire.
    L’explication est un peu compliquée je suppose… J’espère que tu as compris !

    @+
    😎

    • Cette réponse a été modifiée le il y a 4 mois par bebarth.
    en réponse à : Affichage aléatoire #73739
    bebarth
    Maître des clés

    bonjour,

    Je viens de constater qu’il y a encore des doublons pour les réponses sous forme de liste.

    J’ai essayé mais je ne trouve pas de doublons !

    De plus lors de la création de la liste par ordre alphanumérique, est il possible d’avoir le 10 après le 9 et non entre le 1 et le 2 ou c’est trop complexe?

    C’est possible mais ça va compliquer le script. Ici les questions (ex. : “3×10”) sont des chaines de caractères. Pour les trier comme tu le souhaite il faudrait transformer chaque chaine en table coupée au “x” (ex. : [3,10]) puis trier sur le deuxième élément de la table et finir par retransformer la table en chaine de caractères .toString() et remplacer la virgule par un “x”.
    Ce n’est pas très compliqué, mais le script sera différent si tu veux changer les questions par des soustractions, divisions ou additions…

    @+
    😎

    en réponse à : Affichage aléatoire #73731
    bebarth
    Maître des clés

    bonjour,

    Pour la liste de réponse, est il possible d’éliminer les doublons dans la liste de réponse et de classer les éléments de la liste par ordre alphanumérique ?

    J’avais écris une fonction il y a quelques années… Je l’ai donc adaptée pour ton script !
    Dans l’exemple j’ai ajouté plusieurs doublons pour montrer ce que ça donne.

    Pour les réponses type Champ Texte, comme la vérification est en action de frappe, si la réponse saisie contient plusieurs caractères, cela va afficher le message d’erreur dès la frappe du 1er caractère.

    Vu que pour le type de champ Liste le script est en script de touches personnalisé, il n’est exécuté que lorsque l’évènement vient de ce champ liste. Si On utilise un champ Texte pour indiquer la réponse, il faut d’abord vérifier que l’évènement vient de ce champ (cf. le script de calcul “Rep”).

    Dernier souci, j’ai remarqué que lorsque je génère les questions, cela fonctionne seulement si je sauvegarde, ferme puis ouvre le document.

    Ça c’est normal vu que l’initialisation du champ se fait avec le bouton démarrer par “if (!reponses.length)” et qu’en script de document on a “var reponses=[];”
    Avec ton bouton “generateur” on peut maintenant réinitialiser la liste.

    Pour le bonton “vérifier” j’ai retire le message “Erreur…” car il est déjà affiché directement si la réponse n’est pas correcte que ce soit via une liste ou un champ texte.

    Voici les scripts :

    // Script de document
    var reponses=[];
    var nbQuestions=0;
    var nbReponses=0;
    this.getField(“Reponse”).setItems([“-“]);
    this.getField(“Question”).value=””;
    this.getField(“Score”).value=””;
    this.getField(“Score”).value=””;

    // Script de calcul “Démarrer”
    if (!reponses.length) {
    var lesReponses=this.getField(“entreesListe”).value.split(“\r”);
    function triSansDoublons(uneTable) {
    return uneTable.sort().filter(function(valeur, indice, cetteTable) {
    return !indice || valeur!=cetteTable[indice-1];
    });
    }
    var lesReponses=triSansDoublons(lesReponses);
    this.getField(“entreesListe”).value=lesReponses.toString().replace(/[,]/g,”\r”);
    var nb=lesReponses.length;
    var reponses=[];
    for (var i=0; i<nb; i++) {
    lesReponses=lesReponses.split(“\/”);
    reponses.push([lesReponses[1],0]);
    }
    }
    var moyenne=0;
    for (var i=1; i<nb; i++) moyenne+=reponses[1];
    moyenne/=(reponses.length-1);
    var aleatoire=Math.floor(Math.random()*nb);
    var laQuestion=”-“;
    while (reponses[aleatoire][1]>moyenne || laQuestion==”-“) {
    var aleatoire=Math.floor(Math.random()*nb);
    var laQuestion=lesReponses[aleatoire][0];
    var laReponse=lesReponses[aleatoire][1];
    }
    this.getField(“Reponse”).setItems(reponses);
    this.getField(“Question”).value=laQuestion;
    this.getField(“Score”).value=””;

    // Script de touches personnalisé “Reponse”
    if (!event.willCommit) {
    nbQuestions++;
    if (event.change!=laReponse) app.alert(“Erreur !!!\rLa bonne réponse est : “+laReponse,3);
    else {
    reponses[aleatoire][1]=Number(event.changeEx)+1;
    this.getField(“Reponse”).setItems(reponses);
    nbReponses++;
    }
    }

    // Script de calcul “Rep”
    if (event.source && event.source.name==event.target.name) {
    nbQuestions++;
    if (event.value!=laReponse) app.alert(“Erreur !!!\rLa bonne réponse est : “+laReponse,3);
    else {
    reponses[aleatoire][1]=reponses[aleatoire][1]+1;
    nbReponses++;
    }
    }

    // Script de calcul “vérifier”
    if (reponses.length) this.getField(“Score”).value=” • Nombre de bonnes réponses : ” +nbReponses+”\r”+” • Nombre d’erreurs : ” +(nbQuestions-nbReponses)+”\r”+” • Nombre de questions : ” +nbQuestions+”\r”+” • Taux de réussite : ” +(Math.round((100*nbReponses/nbQuestions) * 100) / 100).toString().replace(/[.]/,”,”)+” %”;

    // Script de calcul “geberateur”
    var lesReponses=this.getField(“entreesListe”).value.split(“\r”);
    function triSansDoublons(uneTable) {
    return uneTable.sort().filter(function(valeur, indice, cetteTable) {
    return !indice || valeur!=cetteTable[indice-1];
    });
    }
    var lesReponses=triSansDoublons(lesReponses);
    this.getField(“entreesListe”).value=lesReponses.toString().replace(/[,]/g,”\r”);
    var nb=lesReponses.length;
    var reponses=[];
    for (var i=0; i<nb; i++) {
    lesReponses=lesReponses.split(“\/”);
    reponses.push([lesReponses[1],0]);
    }

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Formule trigonométrie #73723
    bebarth
    Maître des clés

    bonjour,
    Concernant ton dernier fichier, j’ai l’impression de répéter toujours la même chose !

    1. Tu parles de trigonométrie circulaire (cos) et dans ta formule tu utilises la trigonométrie hyperbolique (cos).
    2. Si tu recherche le cosinus (cos) il ne faut pas utiliser l’argument (acos).
    3. Les angles doivent être indiqués en radians et non en degrés.
    4. La syntaxe JavaScript n’est pas correct pour le script de calcul personnalisé.

    Il ne faut donc pas écrire :
    Text1/Math.acosh(Text2)
    mais :
    event.value=this.getField("Text1").value/Math.cos(this.getField("Text2").value*Math.PI/180);

    Cf. fichier joint.

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Affichage aléatoire #73721
    bebarth
    Maître des clés

    bonjour,
    Je vois ! En fait j’ai rajouté le script de document à la dernière minute avant d’envoyer le fichier et sans le tester… Erreur de débutant lol
    Du coup, la table “reponses” est déclarée à l’ouverture du document et if (reponses==null) n’est plus vrai.
    J’ai donc modifié légèrement les scripts :

    // Script de document
    var reponses=[];
    var nbQuestions=0;
    var nbReponses=0;
    this.getField("Reponse").setItems(["-"]);
    this.getField("Question").value="";
    this.getField("Score").value="";

    // Script de calcul "Démarrer"
    if (!reponses.length) {
    var lesReponses=this.getField("entreesListe").value.split("\r");
    var nb=lesReponses.length;
    var reponses=[];
    for (var i=0; i<nb; i++) {
    lesReponses=lesReponses.split("\/");
    reponses.push([lesReponses[1],0]);
    }
    }
    var moyenne=0;
    for (var i=1; i<nb; i++) moyenne+=reponses[1];
    moyenne/=(reponses.length-1);
    var aleatoire=Math.floor(Math.random()*nb);
    var laQuestion="-";
    while (reponses[aleatoire][1]>moyenne || laQuestion=="-") {
    var aleatoire=Math.floor(Math.random()*nb);
    var laQuestion=lesReponses[aleatoire][0];
    var laReponse=lesReponses[aleatoire][1];
    }
    this.getField("Reponse").setItems(reponses);
    this.getField("Question").value=laQuestion;

    // Script de touches personnalisé "Reponse"
    if (!event.willCommit) {
    nbQuestions++;
    if (event.change!=laReponse) app.alert("Erreur !!!\rLa bonne réponse est : "+laReponse,3);
    else {
    reponses[aleatoire][1]=Number(event.changeEx)+1;
    this.getField("Reponse").setItems(reponses);
    nbReponses++;
    }
    }

    // Script de calcul "vérifier"
    if (reponses.length) this.getField("Score").value=nbReponses+"/"+nbQuestions;

    … et ce coup ci c’est testé !

    Il y a juste à voir comment se compte le nombre de question. Dans mon script il est incrémenté par la réponse (correcte ou mauvaise). Si l’utilisateur clique plusieurs fois sur “Démarrer” sans répondre, le nombre de question n’augmente pas.

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Formule trigonométrie #73718
    bebarth
    Maître des clés

    bonsoir,
    Désolé mais je n’ai pas encore eu le temps… En fait je pensais reprendre depuis le début car ton fichier possède beaucoup de champs répétés. Lorsqu’on a le nez dedans on les connais par coeur, mais quand on reprend des scripts et/ou formules dont on est pas l’auteur c’est un peu plus compliqué à se mettre dedans.
    Tous ça pour dire que ça va me prendre un peu de temps que je n’ai pas ces jours-ci.

    Je vais quand même regarder vite fait juste pour ta formule !

    @+
    😎

    en réponse à : Affichage aléatoire #73716
    bebarth
    Maître des clés

    bonsoir,
    Voici les différents script pour rester dans le même principe.

    // Script de document
    var reponses=[];
    var nbQuestions=0;
    var nbReponses=0;
    this.getField("Reponse").setItems(["-"]);
    this.getField("Question").value="";
    this.getField("Score").value="";

    // Script de calcul "Démarrer"
    if (reponses==null) {
    var lesReponses=this.getField("entreesListe").value.split("\r");
    var nb=lesReponses.length;
    var reponses=[];
    for (var i=0; i<nb; i++) {
    lesReponses=lesReponses.split("\/");
    reponses.push([lesReponses[1],0]);
    }
    }
    var moyenne=0;
    for (var i=1; i<nb; i++) moyenne+=reponses[1];
    moyenne/=(reponses.length-1);
    var aleatoire=Math.floor(Math.random()*nb);
    var laQuestion="-";
    while (reponses[aleatoire][1]>moyenne || laQuestion=="-") {
    var aleatoire=Math.floor(Math.random()*nb);
    var laQuestion=lesReponses[aleatoire][0];
    var laReponse=lesReponses[aleatoire][1];
    }
    this.getField("Reponse").setItems(reponses);
    this.getField("Question").value=laQuestion;

    // Script de touches personnalisé "Reponse"
    if (!event.willCommit) {
    nbQuestions++;
    if (event.change!=laReponse) app.alert("Erreur !!!\rLa bonne réponse est : "+laReponse,3);
    else {
    reponses[aleatoire][1]=Number(event.changeEx)+1;
    this.getField("Reponse").setItems(reponses);
    nbReponses++;
    }
    }

    // Script de calcul "vérifier"
    if (reponses!=null) this.getField("Score").value=nbReponses+"/"+nbQuestions;

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Attribuer des valeurs dans une liste déroulante #73708
    bebarth
    Maître des clés

    bonjour,
    Il faut écrire :
    listeDeroulante.setItems([["tata",1], ["titi",2],["toto",3]]);

    @+
    😎

    en réponse à : Affichage aléatoire #73704
    bebarth
    Maître des clés

    bonjour,
    Voici ce que je te propose.
    On met les questions et réponses dans un champ liste ce qui permet de n’avoir qu’un champ au lieu de 2. On pourrait également définir  une table dans le script avec les questions et les réponses.

    Donc, pour répondre aux 2 points indiqués en rouge :
    // Script de calcul "Button1"
    var f=this.getField("entreesListe");
    var nb=f.numItems;
    if (reponses==null) {
    var reponses=[];
    for (var i=0; i<nb; i++) reponses.push([f.getItemAt(i,true),0]);
    }
    var moyenne=0;
    for (var i=0; i<nb; i++) moyenne+=reponses[1]; moyenne/=reponses.length; var aleatoire=Math.floor(Math.random()*nb); while (reponses[aleatoire][1]>moyenne) var aleatoire=Math.floor(Math.random()*nb);
    var laQuestion=f.getItemAt(aleatoire,false);
    var laReponse=f.getItemAt(aleatoire,true);
    this.getField("Reponse").setItems(reponses);
    this.getField("Question").value=laQuestion;

    // Script de touches personnalisé "Reponse"
    if (!event.willCommit) {
    if (event.change!=laReponse) app.alert("Erreur !!!\rLa bonne réponse est : "+laReponse,3);
    else {
    reponses[aleatoire][1]=Number(event.changeEx)+1;
    this.getField("Reponse").setItems(reponses);
    }
    }

    @+
    😎

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

    … Erreur lors de la conversion radians en degrés ! Il faut écrire :

    event.value=Math.acos(this.getField("RESULLIGNBC").value)*180/Math.PI;

    @+
    😎

    en réponse à : Formule trigonométrie #73687
    bebarth
    Maître des clés

    bonjour,
    acosh est la fonction inverse cosinus hyperbolique qui d’ailleurs comme indiqué dans un autre post ne fonctionne pas !
    Dans ton cas if faut utiliser acos ! Si elle ne fonctionne pas, il doit y avoir une erreur… Y a-t-il un mesage dans la console ?

    @+
    😎

    en réponse à : Décocher automatiquement CASE #73683
    bebarth
    Maître des clés

    bonjour,
    Voici un script avec lequel il n’est pas possible de cocher la case si la somme était supérieure à 6000 une fois cette case cochée.
    var somme=this.getField("VT").value;
    var ind=event.target.name.substr(1);
    if (event.target.value!="Off") {
    if (somme+event.target.value<6000) {
    this.getField("VT").value+=event.target.value;
    this.getField("v"+ind).value=event.target.value;
    } else event.target.value="Off";
    } else {
    this.getField("VT").value-=event.target.exportValues;
    this.getField("v"+ind).value=0;
    }

    Dans le fichier exemple j’ai mis ce script en fonction pour éviter de le recopier 6 fois !

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Améliorer la qualité du texte d’un PDF #73678
    bebarth
    Maître des clés

    Il n’y a pas de messagerie sur ce forum !
    Tu peux m’envoyer un mail à bebarth arobase sfr point fr et je te répondrai !

    @+
    😎

    en réponse à : Améliorer la qualité du texte d’un PDF #73675
    bebarth
    Maître des clés

    bonjour,
    Quel OS ? As-tu essayé en open source ?
    https://sourceforge.net/directory/ocr/

    Ci-joint le résultat avec un “pas gratuit” ! Il faut dire que le scan n’est pas terrible…

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Formule trigonométrie #73674
    bebarth
    Maître des clés

    bonjour,
    Il y a beaucoup d’erreurs de syntaxe. En JavaScript il ne suffit pas d’indiquer le nom du champ (comme on le fait en notation simplifiée) pour récupérer la valeur du champ. Il faut donc écrire par exemple :
    event.value=Math.acos(this.getField("cosABC").value)*(180/Math.PI);

    Il y a également encore des inverses hyperboliques (asinh) au lieu de circulaires (asin)…

    @+
    😎

    en réponse à : Formule trigonométrie #73667
    bebarth
    Maître des clés

    bonjour,
    J’ai voulu commencer à regarder ce soir, mais malheureusement je ne comprends pas les questions !

    Bonjour, Voila je suis presque arrivé a la fin, mais je n’arrive pas a mettre en relation 3 choses (si deja c’est possible !)
    • 1 la cote de 180° est ce que c’est possible de pouvoir calculer sur un triangle rectangle voir sur un triangle quelconque
    • 2 Je n’arrive pas a aller au bout du cadre bleu avec les inverses tan, cos ou sinus !
    • 3 je pense que c’est impossible de tout mettre en relation ?, si pas en deux groupes c’est possible ?

    1. Il est normalement possible de calculer tous les angles d’un triangle vu qu’on sait que la somme est de 180°.
      Pour rappel, la somme des angles d’un polygone est égale à (n-2)*180° (où n est le nombre de côtés).
    2. Je ne comprends pas ce qu’est “le cadre bleu” (et quel fichier).
    3. Normalement si ! Si on connait la formule générique pour calculer le côté opposé d’un triangle quelconque ABC : C<sup>2</sup>=A<sup>2</sup>+B<sup>2</sup>-2AB*cos(c)

    Merci de me donner les détails pour pouvoir continuer.

    @+
    😎

    en réponse à : Formule trigonométrie #73665
    bebarth
    Maître des clés

    bonjour,
    Bien ton fichier ! Je regarde la trigo, mais je ne te promets pas quand…

    @+
    😎

    en réponse à : Liste déroulante fille ne s’enregistre pas #73658
    bebarth
    Maître des clés

    bonjour,

    Bravo ! Je me doutais de quelque chose comme ça mais je n’ai pas trouvé où.

    C’est pourquoi je préfère personnellement mettre ce genre de script en script de touches personnalisé, pour éviter ce “problème”.

    @+
    😎

    en réponse à : Liste déroulante fille ne s’enregistre pas #73644
    bebarth
    Maître des clés

    bonjour,
    Dans ton script de format (qui est exécuté à l’ouverture du document), tu dois récupérer la valeur de ton champ “dependentDropdown” avant le reste du script avant de la rappeler en fin de script.

    var valeurDependentDropdown=this.getField("dependentDropdown").value;
    ...
    ...
    this.getField("dependentDropdown").value=valeurDependentDropdown;

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Formule trigonométrie #73643
    bebarth
    Maître des clés

    bonjour,

    …ainsi j’aurai pu mette ce que j’ai créé ou d’autre personne, la j’ai créé grâce a vous un aide mémoire auto pour tout les formule de mathématique que toute personne peux utiliser dans la vie de tout les jours !, mais c’est vrai que je l’ai orienté plus conception métallerie…

    Moi, tout m’intéresse et en plus je suis un ancien chaudronnier/soudeur ! Donc si tu veux partager via un lien, je regarderai.

    @+
    😎

    en réponse à : Copier presse papier #73637
    bebarth
    Maître des clés

    because,

    Non, ça ce n’est pas possible !

    @+
    😎

    en réponse à : Formule trigonométrie #73631
    bebarth
    Maître des clés

    En trigonométrie circulaire il faut juste écrire :
    event.value=Math.sin(this.getField("Text2").value*Math.PI/180);

    C’est le même principe pour toutes les fonctions circulaires sin, cos et tan et leurs fonctions inverses.

    @+

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Formule trigonométrie #73628
    bebarth
    Maître des clés

    Bonjour,

    je suis un peu perdu ! Parles-tu de fonctions trigonométriques circulaires ou hyperboliques.

    Les fonctions JavaSript Math. ne fonctionnent pas avec Acrobat JavaScript juste pour les fonctions hyperboliques mais fonctionnent correctement avec les fonctions circulaires. Dans ce cas, les angles doivent être indiqués en radians et non en degrés.

    …et que veux-tu dire dans tes fichiers par “et avec une seule fonction” ???

    @+
    😎

    • Cette réponse a été modifiée le il y a 4 mois et 3 semaines par bebarth.
    en réponse à : Formule trigonométrie #73615
    bebarth
    Maître des clés

    bonjour,
    Sur ton document la formule écrite est 52/cos(24) et non 52/acosh(24) !

    Si c’est effectivement l’argument cosinus hyperbolique que tu souhaite utiliser, je ne sais pas pourquoi (mais je vais essayer de me renseigner) Math.acosh() ne fonctionne pas en Acrobat JavaScript…
    Par contre on peut recréer cette fonction, et il faut donc écrire :
    function acosh(x) {
    return Math.log(x+Math.sqrt(x*x-1));
    }
    event.value=this.getField(“Text1”).value/acosh(this.getField(“Text2”).value);

    @+
    😎

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

    bonsoir,
    … c’était donc plutôt “demain soir” !!! Je suis un retraité overbooké comme tous les retraité ! 😉
    Voici les différents scripts pour ton document et le fichier en pièce jointe. Je te laisse les étudier et n’hésite pas à me demander ce que tu ne comprends pas. J’ai choisi de mettre les différents prix dans une table de tables “tarifs”. Je pense que l’option pour un fichier .csv en pièce jointe aurait été plus appropriée si on avait eu beaucoup plus de données.
    Tu vérifies si tout se passe comme tu le souhaites et tu me dis.

    // init en Script de document
    var tarif=[
    [ // N&B
    [10,15,25,35], // Carte d'affaire
    [15,25,35,45], // 1/4 de page
    [25,40,55,80], // 1/3 de page
    [40,70,100,130], // 1/2 page
    [100,150,200,250] // Pleine page
    ],
    [ // Quadri
    [20,30,40,60], // Carte d'affaire
    [30,50,70,90], // 1/4 de page
    [50,80,110,160], // 1/3 de page
    [80,140,200,275], // 1/2 page
    ],
    ];
    function options(indice) {
    for (var i=0; i<=4; i++) {
    if (i!=indice) this.getField("option."+i).value="Off";
    }
    }

    // totalPrix
    var couleur=-1;
    if (this.getField("couleur.gris").value!="Off") var couleur=0;
    else if (this.getField("couleur.couleur").value!="Off") var couleur=1;
    var format=-1;
    for (var i=0; i<=4; i++) {
    if (this.getField("option."+i).value!="Off") {
    var format=i;
    break;
    }
    }
    var nb=0;
    for (var i=0; i<=3; i++) {
    if (this.getField("mois."+i).value!="Off") nb++;
    }
    this.getField("total.parutions").value=nb;
    if (couleur>-1 && format>-1 && nb) event.value=tarif[couleur][format][nb-1];
    else event.value=0;
    if (this.getField("Mois").value!="Off") event.value=Number(event.value)+this.getField("Mois").value*25;
    if (event.value==0) event.value="";

    // couleur.gris
    if (event.target.value!="Off") {
    this.getField("couleur.couleur").value="Off";
    this.getField("option.4").display=display.visible;
    }

    // couleur.couleur
    if (event.target.value!="Off") {
    this.getField("couleur.gris").value="Off";
    this.getField("option.4").value="Off";
    this.getField("option.4").display=display.hidden;
    } else this.getField("option.4").display=display.visible;

    // option
    options(event.target.name.substr(event.target.name.indexOf(".")+1));

    @+
    😎

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

    Je regarde ça ce soir ou demain…

    @+
    😎

    en réponse à : Calcul complexe #73600
    bebarth
    Maître des clés

    bonjour,
    On peut récupérer les tarifs avec effectivement soit une table ou un fichier .csv en pièce jointe. J’hésite quelle est la meilleure solution…
    Si je comprends bien le tarif, les pages intérieures obligatoirement en niveaux de gris tandis que la couleur est réservée en première et quatrième de couverture ! Correct ?

    Sur ton fichier, on peut choisir plusieurs formats pour une parution, c’est normal ? Si non, du coup il faudrait plutôt mettre des boutons radio. Idem pour “256 tons GRIS” et “COULEUR”…

    La première page est-elle automatiquement une pleine page ??? et pour la quatrième de couverture, y a-t-il différents formats ?

    @+
    😎

    J’avais pas bien lu !

    • Cette réponse a été modifiée le il y a 5 mois par bebarth.
    en réponse à : Réduction fraction #73591
    bebarth
    Maître des clés

    Avec ma méthode, la fonction ne sert plus, et la variable Reponse est une opération Numerateur/Denominateur;
    Il faut donc juste écrire :
    Reponse=Numerateur/Denominateur;
    if (Reponse ==eval (RepUser)) {
    app.alert({cMsg:"Bravo.", nIcon:2});this.getField("Neq").value++;
    MessEqOk();
    console.println("RepUser="+RepUser+" ; Reponse="+Reponse);
    } else {
    app.alert({cMsg:"La fraction est insufisament simplifiée, ou fausse.", nIcon:2});
    erreurs++;
    console.println("RepUser="+RepUser+" ; Reponse="+Reponse);
    }

    @+
    😎

    • Cette réponse a été modifiée le il y a 5 mois par bebarth.
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Boucle while #73590
    bebarth
    Maître des clés

    Merci, 2 questions cependant : pourquoi appelle-t-on 2 fois la fonction ? nbAleatoires(); while (b*f-e*c<=0 || a*f-c*d<=0) nbAleatoires(); En créant une fonction on peut se passer de déclarer les variables avec la valeur 0 ?

    Une première fois, cela déclare les variables avec un nombre aléatoire au lieu d’un zéro, et si les 2 conditions requises ne sont pas obtenues on effectue la boucle while jusqu’à qu’elles le soient.

    La fonction évite d’écrire 2 fois les lignes des nombres aléatoires.

    @+
    😎

    en réponse à : Réduction fraction #73583
    bebarth
    Maître des clés

    bonjour,
    Je ne sais pas si j’ai bien compris, mais sinon ça me parait bien compliqué !
    Pour moi il suffit d’écrire :
    if (this.getField ("RepEt.2b").value/this.getField ("RepEt.1b").value==eval(this.getField("RepEt.3").value)) app.alert("Bravo.",2);
    else app.alert("La fraction est insufisament simplifiée, ou fausse.",2);

    ou avec des variables :
    var Numerateur=this.getField ("RepEt.2b").value;
    var Denominateur=this.getField ("RepEt.1b").value;
    var RepUser=this.getField("RepEt.3").value;
    if (Numerateur/Denominateur==eval(RepUser)) app.alert("Bravo.",2);
    else app.alert("La fraction est insufisament simplifiée, ou fausse.",2);

    @+
    😎

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

    bonjour,
    Le plus simple est effectivement de déclarer toutes les variables en les mettant à 0.
    Par contre, les conditions ne sont pas correctes. Il faut écrire :
    var a=0;
    var b=0;
    var c=0;
    var d=0;
    var e=0;
    var f=0;
    while (b*f-e*c<=0 || a*f-c*d<=0) {
    var a=Math.round(Math.random()*7)+2;
    var b=Math.round(Math.random()*9)+1;
    var c=Math.round(Math.random()*8)+1;
    var d=Math.round(Math.random()*9)+1;
    var e=Math.round(Math.random()*8)+1;
    var f=Math.round(Math.random()*9)+1;
    }

    Sinon, tu peux également définir une fonction :
    function nbAleatoires() {
    var a=Math.round(Math.random()*7)+2;
    var b=Math.round(Math.random()*9)+1;
    var c=Math.round(Math.random()*8)+1;
    var d=Math.round(Math.random()*9)+1;
    var e=Math.round(Math.random()*8)+1;
    var f=Math.round(Math.random()*9)+1;
    }
    nbAleatoires();
    while (b*f-e*c<=0 || a*f-c*d<=0) nbAleatoires();

    @+
    😎

     

    en réponse à : Raccourcir une condition #73574
    bebarth
    Maître des clés

    bonjour,

    Pas exactement.

    Tu as tout à fait raison, mais ce que je voulais dire c’est que dans ce cas le résultat est identique que l’on mette le + ou pas avec le g.
    Ici on aurait pu écrire /\s/g car le global détecte toutes les espaces (consécutives ou non) alors que /\s+/g détecte tous les “au moins une” espaces consécutives. En théorie c’est plus rapide puisqu’il peu y avoir moins d’occurences !
    Lorsque on met le signe + (un ou plus) avec le g (global) le + est donc redondant pour moi, ce qui n’est plus vrai à partir de {2,} (2 ou plus). Mais je le laisse car l’expression est plus parlante à mon avis.

    @+
    😎

    en réponse à : Raccourcir une condition #73571
    bebarth
    Maître des clés

    C’est bien ça ?

    C’est ça, exactement !

    + signifie : présent une ou plusieurs fois.
    g signifie qu’on veut une recherche globale, c’est à dire une recherche qui ne s’arrête pas à la première occurrence trouvée mais qui les cherche toutes.

    Dans ce cas, ces 2 signes sont redondants, mais ce n’est pas grave de les mettre ensemble.

    @+
    😎

    en réponse à : Champs adresses remplis après sélection nom dans liste #73567
    bebarth
    Maître des clés

    bonjour,
    Désolé pour cette réponse tardive, je pensais avoir répondu !

    j’ai un problème avec le script “veto” le nom du veto disparaît lors de l’enregistrement du document

    Ça ce n’est pas compliqué, il suffit de récupérer la valeur du menu déroulant à l’ouverture du document et de redonner cette valeur après lecture des données de la pièce jointe dans le script de document.
    var leCabinet=this.getField("nomCabinet").value;
    ...
    this.getField("nomCabinet").value=leCabinet;

    Moins grave, si je veux ajouter une info après le cabinet sélectionné comme (un nom par exemple), l’adresse s’efface … As-tu une idée ?

    Ça c’est plus compliqué et je ne sais pas si c’est une bonne idée… Je vais réfléchir !

    @+
    😎

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

    bonjour,
    Une petite erreur…

    Ici, la notation équivaut à var num=c+(b*d) ou var num=c-(b*d)

    Il faut donc écrire :
    ...
    while (c-b*d==0 || c+b*d==0) {
    ...

    Même si “c+b*d==0” avec des nombres aléatoires ne doit pas être fréquent !

    @+
    😎

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

    …sinon tu peux réduire un peu le script :
    var OpAl=Math.round(Math.random()*1)+1;
    var a=0;
    var b=0;
    var c=0;
    var d=0;
    while (c==0 || b==0 || d==0) {
    var a=Math.round(Math.random()*7)+2;
    var b=Math.round(Math.random()*9)+1;
    var c=Math.round(Math.random()*8)+1;
    var d=Math.round(Math.random()*9)+1;
    }
    if (OpAl==1) var num=(c-b*d);
    else var num=(c+b*d);
    var den=(a*d);
    this.getField("numOk").value=num;
    this.getField("denOk").value=den;
    this.getField("NB.1").value=a;
    this.getField("NB.2").value=b;
    this.getField("NB.3").value=c;
    this.getField("NB.4").value=d;

    Ici, la notation équivaut à var num=c+(b*d) ou var num=c-(b*d)

    @+
    😎

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

    Dans un premier temps, il faut initialiser tes variables a, b, c et d avant d’effectuer la première boucle “while” !

    Tu me dis si ça fonctionne ensuite…

    @+
    😎

    en réponse à : Raccourcir une condition #73555
    bebarth
    Maître des clés

    Désolé, mais toi tu es dans ton script et tu connais certainement par cœur les variables et ce que tu veux faire, mais à moins de déchiffrer tous tes scripts je suis un peu perdu !!!
    Quand la variable “diff” est-elle incrémentée et devient-elle égale à 6 ?
    Que souhaites-tu faire exactement avec ce script ?

    @+
    😎

    en réponse à : Raccourcir une condition #73554
    bebarth
    Maître des clés

    bonjour,

    Bonjour, pas testé cette dernière version mais la précédente marchait bien il me semble

    Il fonctionne mais également pour des réponses incorrectes. Ce script vérifie que les 2 nombres vC2 et vC3 sont présents et qu’il y a un signe de multiplication (x ou *) entre 2 nombres. Mais si par exemple la réponse correcte est 3×5, il valide également 35 x 11 car il y a bien un 3, un 5 et un signe entre 2 nombres…

    Sinon, je reconnais que je ne comprend pas cette ligne : var RepUser2=this.getField("RepUser2").valueAsString.replace(/\s+/g,"").replace(/[x]/,"*").split("*");

    Ici la variable RepUser2 va être transformée en une table de 1 ou 2 cellules selon la réponse (un nombre ou une opération).
    replace(/\s+/g,"") On supprime tous les espaces.
    replace(/[x]/,"*") On remplace l’éventuel signe de multiplication “x” en “*”.
    split("*") On transforme la chaine de caractères en table avec “*” comme séparateur de cellules.

    Et celle-ci : if (RepUser2.length==2 && ((vC2==RepUser2[0] && vC3==RepUser2[1]) || (vC2==RepUser2[1] && vC3==RepUser2[0]))) OK++;

    if (RepUser2.length==2... Si la table à 2 valeurs c’est que le résultat est une opération (si elle en a qu’une c’est le résultat de l’opération)
    && ((vC2==RepUser2[0] && vC3==RepUser2[1]) vC2) est égale à la première cellule de ta table et vC3 à la seconde…
    || (vC2==RepUser2[1] && vC3==RepUser2[0])) ou l’inverse…
    ) OK++; la variable “OK” (initialement 0) est incrémentée.

    J’ai un autre souci avec ce fichier…

    Je regarde plus tard !

    @+
    😎

    en réponse à : Raccourcir une condition #73543
    bebarth
    Maître des clés

    bonjour,
    Voici donc une version qui devrait correspondre à ce que tu cherches à faire :
    var vC2=this.getField("NB.2").valueAsString;
    var vC3=this.getField("NB.3").valueAsString;
    var RepUser2=this.getField("RepUser2").valueAsString.replace(/\s+/g,"").replace(/[x]/,"*").split("*");
    var OK=0;
    if (RepUser2.length==2 && ((vC2==RepUser2[0] && vC3==RepUser2[1]) || (vC2==RepUser2[1] && vC3==RepUser2[0]))) OK++;
    else if (RepUser2.length==1 && RepUser2==Number(vC2)*Number(vC3)) OK++;
    if (OK) app.alert({cMsg:"Bravo !", nIcon:2});
    else app.alert({cMsg:"Erreur !", nIcon:2});

    @+
    😎

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

    Ça fonctionne si on indique le résultat mais pas si on écrit la multiplication.
    Voici un script qui vérifie tous les cas :
    var vC2=this.getField("NB.2").valueAsString;
    var ReGex2=new RegExp(vC2);
    var vC3=this.getField("NB.3").valueAsString;
    var ReGex3=new RegExp(vC3);
    var RepUser2=this.getField("RepUser2").valueAsString;;
    if ((ReGex2.test(RepUser2) && ReGex3.test(RepUser2) && /^\d+\s*([*]|[x])\s*\d+$/.test(RepUser2)) || RepUser2==Number(vC2)*Number(vC3)) app.alert({cMsg:"Bravo !", nIcon:2});
    else app.alert({cMsg:"Erreur !", nIcon:2});

    @+
    😎

    En fait cette version fonctionne lorsque le résultat est correct mais également avec de mauvaises réponses lorsqu’on indique l’opération.
    Le script vérifie que les 2 nombres vC2 et vC3 sont présents dans le résultat et qu’il y a bien un signe pour la multiplication, mais si un des nombres est composé des 2 valeurs vC2 et vC3 et que le second nombre est incorrect il indique la réponse comme bonne… alors que ce n’est pas le cas !

    • Cette réponse a été modifiée le il y a 5 mois et 1 semaine par bebarth.
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Raccourcir une condition #73538
    bebarth
    Maître des clés

    bonjour,
    Je vois 2 erreurs :
    var RepUser2 = this.getField("RepUser<span style="color: #ff9900;">2</span>").valueAsString;

    ...
    if (RepUser2 == (vC2 + ("×" || "*" || " × " || " * ") + vC3) || <span style="color: #ff9900;">RepUser2 ==</span> (vC3 + ("×" || "*" || " × " || " * ") + vC2) || <span style="color: #ff9900;">RepUser2 ==</span> (Number(vC2) * Number(vC3))<span style="color: #ff0000;"><del> && vC1</del></span>)...

    Ici j’ai retiré “&& vC1” car je ne sais pas ce que tu veux vérifier…
    Tu testes et tu me dis !

    @+
    😎

    en réponse à : Champs adresses remplis après sélection nom dans liste #73523
    bebarth
    Maître des clés

    Merci pour ta réponse ! C’est ok mais j’ai un problème avec mon dernier script for (var i = 0; i < colonnes.length; i++) { if (event.value == colonnes[2]) { this.getField(“43 Deplacement”).value = colonnes[6]; break; } } j’ai un message d’erreur car le format du champ 43 est nombre monétaire

    Essaye :
    ...
    this.getField("43 Deplacement").value = Number(colonnes[6]);
    ...

    En supposant que “colonnes[6]” (la septième colonne numérotée basée sur 0) est bien un nombre !

    @+
    😎

    • Cette réponse a été modifiée le il y a 5 mois et 1 semaine par bebarth.
Affichage de 99 réponses de 1 à 99 (sur un total de 3,102)