Donnez vie à vos documents numériques !
 

michel c.

Toutes mes réponses sur les forums

Affichage de 99 réponses de 1 à 99 (sur un total de 372)
  • Auteur
    Réponses
  • en réponse à : Léger bug sur mon formulaire #74835
    michel c.
    Participant

    J’ai trouvé avant de dormir…

    J’ai modifié la dernière ligne de cette partie du script Raz :

    if (this.getField(nomChamp).type=="text") {this.getField(nomChamp).value="";}
    if ((this.getField(nomChamp).type=="checkbox" || this.getField(nomChamp).type=="radiobutton") && this.getField(nomChamp).value=="undefined") this.getField(nomChamp).value="Off";
    else {this.getField(nomChamp).value=this.getField(nomChamp).getItemAt(0,false);}

    comme ceci

    if (this.getField(nomChamp).type=="text") {this.getField(nomChamp).value="";}
    if ((this.getField(nomChamp).type=="checkbox" || this.getField(nomChamp).type=="radiobutton") && this.getField(nomChamp).value=="undefined") this.getField(nomChamp).value="Off";
    if (this.getField(nomChamp).type=="dropdown") {this.getField(nomChamp).value=this.getField(nomChamp).getItemAt(0,false);}

    en réponse à : Léger bug sur mon formulaire #74831
    michel c.
    Participant

    Merci pour la réponse, je viens d’identifier le problème car le bug survenait à nouveau lors de l’execution du script Raz.

    Plus particulièrement les lignes 30 à 32 :

    if (this.getField(nomChamp).type=="text") {this.getField(nomChamp).value="";}
    else {this.getField(nomChamp).value=this.getField(nomChamp).getItemAt(0,false);}
    }

    Que j’ai modifiées comme ceci grâce à ton code :

    if (this.getField(nomChamp).type=="text") {this.getField(nomChamp).value="";}
    if ((this.getField(nomChamp).type=="checkbox" || this.getField(nomChamp).type=="radiobutton")) this.getField(nomChamp).value="Off";
    else {this.getField(nomChamp).value=this.getField(nomChamp).getItemAt(0,false);}
    }

    Comme il s’agit d’un champ Q.a.b : en appuyant sur raz je souhaite que les cases soient décochées.

    Par contre maintenant c’est les champs textes qui prennent la valeur undefined lors de l’exécution du script Raz….

    Bon, je vais me coucher, la nuit porte conseil…

    • Cette réponse a été modifiée le il y a 1 semaine par michel c..
    • Cette réponse a été modifiée le il y a 1 semaine par michel c..
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Léger bug sur mon formulaire #74827
    michel c.
    Participant

    Merci infiniment.

    Par contre ça a entraîné un autre souci :pour la 3ème partie, celle ci devrait être validée si la 2ème case est cochée et toutes les autres décochées.

    Or ça ne fonctionne pas du 1er coup….

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Execution d’un script si un champ est absent #74813
    michel c.
    Participant

    J’en apprend tous les jours. je n’avais jamais vu le point d’exclamation placé avant….

    Merci

    en réponse à : Execution d’un script si un champ est absent #74811
    michel c.
    Participant

    merci. ça fonctionne

    en réponse à : Script qui fonctionne de façon isolée #74776
    michel c.
    Participant

    Tu as parfaitement raison, pour les quantités identiques, ce n’est plus un problème depuis que Merlin m’a suggéré d’exporter les données, je n’ai pour le coup aucune saisie à faire.

    Par contre il y a plus grave, je me suis un peu embrouillé je pense avec toutes ces données et je crois avoir relevé quelques erreurs. Je suis en train de réfléchir à une autre façon de nommer les champs.

    en réponse à : Script qui fonctionne de façon isolée #74768
    michel c.
    Participant

    Je pense avoir réussi. Il y avait sûrement plus simple avec une autre numérotation des champs mais je ne voulais pas me refaire tous les calculs…

    Le script est long mais ça a l’air de marcher.

    Enfin ça fonctionne si il y a 10 caissons….Il va falloir que je trouve un truc s’il y a moins de 10 caissons…

    • Cette réponse a été modifiée le il y a 4 semaines par michel c..
    • Cette réponse a été modifiée le il y a 4 semaines par michel c..
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Script qui fonctionne de façon isolée #74766
    michel c.
    Participant

    Je pensais à un script de ce type :

    function debit() {

    var ess = this.getField("ChoixEss").value;
    var essenceFond = this.getField("essence.17").value;
    var essenceCote = this.getField("essence.19").value;
    var essenceAvant = this.getField("essence.20").value;
    var essenceArrier = this.getField("essence.21").value;
    var essenceFacades = this.getField("essence.24").value;
    var numPiece = 0;

    if (ChoixEss = essenceFond) {

    if (this.getField("Tiroir.1.1").value != "") {
    var D1=this.getField("Tiroir.1.1").value.split("×");
    var P1 = (D1[0]);
    var P2 = (D1[1]);
    var P3 = (D1[2]);
    var P4 = (D1[3]);
    this.getField("Reference.1").value = "a";
    this.getField("Designation.1").value = "Fond Caisson1";
    this.getField("Nombre.1").value = P4;
    this.getField("Longueur.1").value = P1;
    this.getField("Largeur.1").value = P2;
    this.getField("Epaisseur.1").value = P3;
    this.getField("Essence.1").value = ChoixEss;
    }

    if (this.getField("Tiroir.1.2").value != "") {
    var D1=this.getField("Tiroir.1.2").value.split("×");
    var P1 = (D1[0]);
    var P2 = (D1[1]);
    var P3 = (D1[2]);
    var P4 = (D1[3]);
    this.getField("Reference.2").value = "b";
    this.getField("Designation.2").value = "Fond Caisson2";
    this.getField("Nombre.2").value = P4;
    this.getField("Longueur.2").value = P1;
    this.getField("Largeur.2").value = P2;
    this.getField("Epaisseur.2").value = P3;
    this.getField("Essence.2").value = ChoixEss;
    }

    }

    }

    Il faudrait juste que j’apporte une modif pour que dans le champ Longueur.a soit inscrite la plus grande valeur entre P1 et P2 et que dans le champ Largeur.a soit inscrite la plus petite valeur entre P1 et P2

    Je l’ai testé pour les 2 premières colonnes de la 1ère ligne des tiroirs. Compléter ce script pour toutes les pièces des tiroirs risque d’être long.

    Je vais avoir un script à rallonge et je pense que je vais rencontrer des problèmes si j’ai un nombre de caisson <10…

    Qu’en pensez vous ?

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Script qui fonctionne de façon isolée #74762
    michel c.
    Participant

    J’arrive à exporter avec PdfX-Change, j’ai préparé le tableau qu’il faut, il me reste le plus difficile : après avoir choisi l’essence dans la liste déroulante, j’aimerais qu’en cliquant sur générer le débit chaque pièce de cette essence puisse s’inscrire dans le tableau.

    Dans la colonne 1 sont spécifiées des références a ; b ; c …..aa ; ab….

    Dans la colonne 2 : Piece 1 ; Piece2….

    Colonne 3 la quantité (pour les pièces dont les longueurs et largeurs sont identiques)

    Colonne 4 : La plus grande des 2 premières données des champs Tiroir.a.b

    Colonne 5 : La plus petite des 2 premières données des champs Tiroir.a.b

    Colonne 6 : L’épaisseur : l’avant dernière donnée des champs Tiroir.a.b

    Colonne 7 : L’essence sélectionnée

    Colonne 8 : Le sens du fil (je l’inscrirais manuellement)

    Je vais chercher mais je crains que cela dépasse un peu mes compétences…

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Script qui fonctionne de façon isolée #74756
    michel c.
    Participant

    Un logiciel de calepinage est un programme dans lequel tu indique les dimensions de tes panneaux de bois (des planches dont tu disposes) et dans lequel tu indiques ensuite les dimensions et quantité des pièces que tu désires.

    Tu spécifie si le sens du fil (des fibres de bois) est vertical, horizontal ou sans importance, l’épaisseur de ta lame de scie (trait de coupe) ainsi que la marge voulue au bord du panneau (les bords ont parfois des défauts).

    Le logiciel va ensuite arranger tes différentes pièces sur tes panneaux bruts afin de minimiser les pertes et pour avoir comme chutes des morceaux de dimensions intéressantes. (voir document joint)

    Il y a effectivement un bouton pour importer les fiches de débit. Je vais me pencher dessus pour tester la forme voulue.

    Par contre je ne sais pas du tout comment m’y prendre pour générer un csv à partir de mon formulaire

    • Cette réponse a été modifiée le il y a 4 semaines et 1 jour par michel c..
    • Cette réponse a été modifiée le il y a 4 semaines et 1 jour par michel c..
    • Cette réponse a été modifiée le il y a 4 semaines et 1 jour par michel c..
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Script qui fonctionne de façon isolée #74749
    michel c.
    Participant

    Merci, je viens de tout modifier, ça fonctionne. J’ai du mettre un else à la suite de chaque condition pour cela.

    J’ai une autre question mais qui est un peu plus ardue… :

    j’aimerais que les résultats soient synthétisés dans un tableau (page 3) pour les dimensions des différentes pièces des tiroirs.

    Les dimensions inscrites dans les champs Tiroir.a.b sont sous la forme : dimension1×dimension2×épaisseur×quantité

    J’aimerais que dans mon tableau de synthèse, les différentes épaisseurs pour chacune des pièces des tiroirs apparaissent par ordre croissant dans les champs Synthese.0.n et que pour chaque épaisseur soient inscrits dimension1×dimension2×quantité.

    Dans l’idéal j’aimerais que les dimensions 1 et 2 permutent si la dimension2 est supérieure à la dimension1.

    L’autre difficulté est d’ajouter les différentes quantités si plusieurs dimensions sont identiques.

    Je l’ai fait manuellement pour les pièces d’épaisseur 5mm

    Pour expliquer un peu la raison de ce besoin c’est que je dois saisir les dimensions de chaque pièce dans un logiciel de calepinage pour optimiser mes découpes dans un panneau de dimension donné.

    Ce logiciel exige que la 1ère dimension saisie soit la plus grande. De plus la saisie de plusieurs pièces identiques est possible car pour chaque pièce on peut saisir la quantité voulue.

    Merci

    • Cette réponse a été modifiée le il y a 1 mois par michel c..
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Script qui fonctionne de façon isolée #74741
    michel c.
    Participant

    Dans ce même document, j’aimerais que pour le cas ou les caissons n’ont aucune dimension, aucun calcul ne soit fait.

    pour éviter d’avoir des inscriptions du style ×× ou 0××

    Merci

    • Cette réponse a été modifiée le il y a 1 mois par michel c..
    • Cette réponse a été modifiée le il y a 1 mois par michel c..
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Script qui fonctionne de façon isolée #74739
    michel c.
    Participant

    Merci beaucoup, l’erreur venait de là. Erreur de copier/coller qui m’avait échappée

    • Cette réponse a été modifiée le il y a 1 mois par michel c..
    en réponse à : Générateur liste déroulantes #74635
    michel c.
    Participant

    Merci beaucoup. Les explications j’en aurait besoin mais le problème c’est que j’en aurais besoin de beaucoup trop. Il faudrait que je me penche vraiment sur les expressions régulières avant. Parce que là, je nage total…

    en réponse à : Générateur liste déroulantes #74630
    michel c.
    Participant

    Merci beaucoup, ça fonctionne.

    Par contre les espaces sont interprétés comme un nouvel item de la liste.

     

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Générateur liste déroulantes #74619
    michel c.
    Participant

    Le script fonctionne nickel mais lorsque je l’implémente dans mon document, rien ne se passe et aucun message d’erreur à la console.

    J’ai essayé avec le champ Q.1.5 et rien.

    Décidément, quand ça ne veut pas…

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Générateur liste déroulantes #74611
    michel c.
    Participant

    C’est à n’y rien comprendre.

    Je n’avais pas vu que tu avais partagé ton fichier quelques posts avant …. Du coup j’insistais en essayant de corriger cette erreur…

    Du coup je vais me servir de ton fichier.

    Merci beaucoup

    • Cette réponse a été modifiée le il y a 2 mois et 2 semaines par michel c..
    en réponse à : Générateur liste déroulantes #74599
    michel c.
    Participant

    Fait attention au fait que déclarer une variable en commençant par “var = ” signifie que c’est une variable locale, uniquement accessible dans la boucle ou dans la fonction dans laquelle elle a été créée. Contrairement à la déclaration sans “var = ” qui en fait une variable globale.

    Oui, j’ai vérifié, dans d’autres scripts, les variables globales fonctionnent avec PDF-XChange Editor. Je ne comprend pas pourquoi dans ce script ça bloque à cette ligne. Je cherche…

    J’ai ajouté ces 3 lignes après la ligne 27 :

    console.println("oRslt : " + oRslt);
    console.println("listeChamps : " + listeChamps);
    console.println("LCha : " + LCha);
    console.println("elements : " + elements);

    juste après la déclaration de la variable : valeurListe=listeChamps;

    La console renvoie :

    oRslt : [object Object]
    listeChamps : [object Object]
    Field:Mouse Up:30: ReferenceError: LCha is not defined

    Je me demandais si la variable listeChamps ne devrait pas être la liste de tout les champs.

    Je suis loin de tout maitriser dans ce script mais bon, je vais essayer quand même de m’y retrouver…

    • Cette réponse a été modifiée le il y a 2 mois et 2 semaines par michel c..
    • Cette réponse a été modifiée le il y a 2 mois et 2 semaines par michel c..
    • Cette réponse a été modifiée le il y a 2 mois et 2 semaines par michel c..
    • Cette réponse a été modifiée le il y a 2 mois et 2 semaines par michel c..
    • Cette réponse a été modifiée le il y a 2 mois et 2 semaines par michel c..
    • Cette réponse a été modifiée le il y a 2 mois et 2 semaines par michel c..
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Générateur liste déroulantes #74595
    michel c.
    Participant

    Bonjour, avec le script proposé, j’ai toujours cette erreur :

    Field:Mouse Up:35: ReferenceError: valeurListe is not defined

    J’essayerai avec adobe acrobat DC en rentrant ce soir.

    • Cette réponse a été modifiée le il y a 2 mois et 2 semaines par michel c..
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Générateur liste déroulantes #74591
    michel c.
    Participant

    Bonjour et merci.

    Il y avait une erreur à la ligne 31 : Doc:Open:37: ReferenceError: valeurListe is not defined
    j’ai mis var valeurListe=listeChamps à la place de valeurListe=listeChamps

    idem à la ligne 80 : var debutChamp=nomListe; au lieu de debutChamp=nomListe
    mais cette fois l’erreur est toujours là…

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Générateur liste déroulantes #74585
    michel c.
    Participant

    Non. Ce n’est pas la peine.

    en réponse à : Assistant d’actions pour remplir en javascript #74570
    michel c.
    Participant

    Bonjour, effectivement je n’ai pas cette fonctionnalité….

    en réponse à : Assistant d’actions pour remplir en javascript #74557
    michel c.
    Participant

    Bonjour, je veux bien la version qui fonctionne en script d’application. Si je comprend bien ce script permet l’insertion plus rapide des scripts dans un pdf?

    en réponse à : Action si champ existe #74532
    michel c.
    Participant

    Merci !

    en réponse à : Vérification #74525
    michel c.
    Participant

    Merci beaucoup !!!

    en réponse à : Vérification #74518
    michel c.
    Participant

    J’ai essayé le script de BB qui fonctionne parfaitement.

    Je l’ai modifié en fonction de mes besoins.

    Je préfère qu’il n’y ait pas de boite de dialogue qui s’ouvre pour la saisie des noms de champs, j’ai supprimé cette fonctionnalité (je vais la garder dans un coin pour moi mais je préfère simplifier le formulaire pour mes collègues qui vont l’utiliser)

    En fonction du nom de champ, les indices a et b de départ ne sont pas les mêmes :

    • pour les champs Question ; Q et R les indices commencent à 1.1
    • pour les champs cAc : les indices commencent à 1.0
    • pour les champs Verifier ; Recommencer et Aide : les indices commencent à 1.0

    Le script modifié a l’air de bien fonctionner :

    var reponse="Titre,TQ,Question,Q,R,Aide,Verifier,Recommencer,cAc,Doc";

    var reponse=reponse.replace(/[,]{2,}/g,",").replace(/^,/,"").replace(/,$/,"");
    var aVerifier=reponse.split(",");
    var lesSeries=[];
    for (var i=0; i<this.numFields; i++) {
    var nomChamp=this.getNthFieldName(i);
    for (var j=0; j<aVerifier.length; j++) {
    var RegExTest=new RegExp("^"+aVerifier[j]+"\\.(\\d+)\\.(\\d+)$");
    var OK=nomChamp.match(RegExTest);
    if (OK) {
    var ind1=OK[1];
    var ind2=OK[2];
    if (lesSeries[j]==undefined) lesSeries[j]=[aVerifier[j],[]];
    if (lesSeries[j][1][ind1]==undefined) lesSeries[j][1][ind1]=[ind1,[]];
    if (lesSeries[j][1][ind1][1][ind2]==undefined) lesSeries[j][1][ind1][1][ind2]=[ind2];
    break;
    }
    }
    }
    var txt=""

    for (var i=0; i<lesSeries.length; i++) {
    if (lesSeries==undefined) txt+="Il n'y a pas de champ \""+aVerifier+"\" avec indices.\r";
    else {
    if (aVerifier=="Titre") {
    for (var j=0; j<lesSeries[1].length; j++) {
    if (lesSeries[1][j]==undefined) txt+="Il n'y a pas d'indice de premier niveau \""+aVerifier+"."+[j]+"\".\r";
    else {
    for (var k=0; k<lesSeries[1][j][1].length; k++) {
    if (lesSeries[1][j][1][k]==undefined) txt+="Il n'y a pas d'indice de second niveau \""+aVerifier+"."+[j]+"."+k+"\".\r";
    }
    }
    }
    }

    if (aVerifier=="Question" || aVerifier=="Q" || aVerifier=="R" || aVerifier=="TQ") {
    for (var j=1; j<lesSeries[1].length; j++) {
    if (lesSeries[1][j]==undefined) txt+="Il n'y a pas d'indice de premier niveau \""+aVerifier+"."+[j]+"\".\r";
    else {
    for (var k=1; k<lesSeries[1][j][1].length; k++) {
    if (lesSeries[1][j][1][k]==undefined) txt+="Il n'y a pas d'indice de second niveau \""+aVerifier+"."+[j]+"."+k+"\".\r";
    }
    }
    }
    }

    if (aVerifier=="cAc") {
    for (var j=1; j<lesSeries[1].length; j++) {
    if (lesSeries[1][j]==undefined) txt+="Il n'y a pas d'indice de premier niveau \""+aVerifier+"."+[j]+"\".\r";
    else {
    for (var k=0; k<lesSeries[1][j][1].length; k++) {
    if (lesSeries[1][j][1][k]==undefined) txt+="Il n'y a pas d'indice de second niveau \""+aVerifier+"."+[j]+"."+k+"\".\r";
    }
    }
    }
    }

    if (aVerifier=="Verifier" || aVerifier=="Recommencer" || aVerifier=="Aide") {
    for (var j=1; j<lesSeries[1].length; j++) {
    if (lesSeries[1][j]==undefined) txt+="Il n'y a pas d'indice de premier niveau \""+aVerifier+"."+[j]+"\".\r";
    else {
    for (var k=0; k<lesSeries[1][j][1].length; k++) {
    if (lesSeries[1][j][1][k]==undefined) txt+="Il n'y a pas d'indice de second niveau \""+aVerifier+"."+[j]+"."+k+"\".\r";
    }
    }
    }
    }

    }
    }

    console.clear();
    console.show();
    console.println(txt);

     

     

     

    Il me reste quelques modifications encore à apporter :

    S’il n’y a aucun message à afficher : ne pas afficher la console
    pour tout champ nommé Verifier.a.0 faire apparaitre un message s’il n’existe pas de champ nommé Recommencer.a.0
    pour tout champ nommé Aide.a.0 faire apparaitre un message s’il n’existe pas de champ nommé Aide.a.1

    Je vais me pencher là dessus.

    Merci beaucoup en tout cas pour ce script !

    • Cette réponse a été modifiée le il y a 2 mois et 3 semaines par michel c..
    • Cette réponse a été modifiée le il y a 2 mois et 3 semaines par michel c..
    en réponse à : Vérification #74501
    michel c.
    Participant

    Bonjour, j’ai testé, ça ne fonctionne pas. J’ai déplacé la parenthèse mal placée à la ligne 4 : if (this.getField("R.1." + i) === null) mais j’ai une erreur à la ligne 5 : app.alert("Le champ " + this.getField("R.1." + i).name + " n'existe pas.");

    Doc:Open:5: TypeError: this.getField(...) is null

     

    Sinon, je pensais à quelque chose comme ça mais il me manque quelques lignes de code pour y arriver….

    function verif() {

    for (var i=0; i<this.numFields; i++) {
    var nomChamp=this.getNthFieldName(i);
    var b = nomChamp.split(".");
    var P1 = (b[0]);
    var P2 = (b[1]);
    var P3 = (b[2]);
    }
    if (P1 == "R") {
    //code pour trouver les valeurs mini et maxi de P2→mise en variable amin et amax
    //code pour trouver les valeurs maxi de P3→mise en variable bmin et bmax
    for (var j=amin ; j<=amax ; j++) {
    if (this.getField("P1+"."+j+"."+P3) === null) {app.alert("Le champ "+"P1+"."+j+"."+P3+" n'existe pas");}
    }

    for (var k=bmin ; k<=bmax ; k++) {
    if (this.getField("P1+"."+P2+"."+k) === null) {app.alert("Le champ "+"P1+"."+P2+"."+k+" n'existe pas");}
    }
    }

    if (P1 == "Q") {
    //code pour trouver les valeurs mini et maxi de P2→mise en variable cmin et cmax
    //code pour trouver les valeurs maxi de P3→mise en variable dmin et dmax
    for (var l=cmin ; l<=cmax ; c++) {
    if (this.getField("P1+"."+l+"."+P3) === null) {app.alert("Le champ "+"P1+"."+l+"."+P3+" n'existe pas");}
    }

    for (var m=dmin ; m<=dmax ; d++) {
    if (this.getField("P1+"."+P2+"."+m) === null) {app.alert("Le champ "+"P1+"."+P2+"."+m+" n'existe pas");}
    }
    }
    }

    • Cette réponse a été modifiée le il y a 2 mois et 4 semaines par michel c..
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Vérification #74494
    michel c.
    Participant

    Pour l’algorithme, j’ai pensé à autre chose :

    A partir de la je me disait que pour un nom P1 donné, extraire l’indice P2 mini P2 maxi.

    boucle :

    for (var i=P2min ; i<=P2max ; i++) {

    Si un champ P1+”.”+i+”.”P3 n’existe pas, alors afficher un message d’alerte indiquant le nom du champ manquant

    }

     

    pour un nom P1 donné, extraire l’indice P3 mini P3 maxi.

    boucle n°2 :

    for (var i=P3min ; i<=P3max ; i++) {

    Si un champ P1+”.”+P2+”.”i n’existe pas, alors afficher un message d’alerte indiquant le nom du champ manquant

    }

    en réponse à : Vérification #74492
    michel c.
    Participant

    J’ai une petite idée de algorithme mais dans la partie codage il y a un truc qui me dépasse.

    Je pensais commencer comme cela :

    for (var i=0; i<this.numFields; i++) {
    var nomChamp=this.getNthFieldName(i);
    var b = nomChamp.split(".");
    var P1 = (b[0]);
    var P2 = (b[1]);
    var P3 = (b[2]);

    ...code que je ne sais pas faire....}

    A partir de la je me disait que pour un nom P1 donné, extraire l’indice P2 mini P2 maxi.

    déclarer une variable i = P2max-P2min+1

    Si cette la valeur de cette variable est supérieure au nombre de champs P1+”.”+P2+”.”P3 Alors afficher un message d’alerte indiquant qu’il manque un champ dans la série P1+”.”+P2+”.”P3

    déclarer une variable j = P3max-P3min+1

    Si cette la valeur de cette variable est supérieure au nombre de champs P1+”.”+P2+”.”P3 Alors afficher un message d’alerte indiquant qu’il manque un champ dans la série P1+”.”+P2+”.”P3

    Mais il y a peut être mieux à faire…

    en réponse à : Vérification #74489
    michel c.
    Participant

    Bonjour, en fait beaucoup de scripts dépendent de la bonne numérotation des champs ; quasiment tous en fait.

    Comme à mon habitude, ce formulaire est une petite usine à gaz mais qui fonctionne si les champs sont correctement nommés et numérotés.

    Pour ne citer qu’un exemple, le script verifier va comparer la valeur du champ Q.a.b à celle du champ R.a.b.

    Si l’utilisateur oublie un champ ou le numérote mal, il faudra que je modifie ce script mais quelles valeurs dois-je prendre en compte pour la comparaison?

    Merci

     

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Vérification #74485
    michel c.
    Participant

    Bonjour, comme je le disais au 1er message, j’aimerais aussi vérifier que les indices des champs qui sont sensés se suivre soient bien des nombres successifs.

    Par exemple je peux avoir des champs qui se nomment R.1.1 ; R.1.2 ; R.1.3 ; R.2.1 ; R.2.2 ; R.2.3 ; R.2.4

    J’aimerais qu’une boite de dialogue prévienne l’utilisateur s’il manque le champ R.2.3 par exemple.

    Pour ces 2 vérifications, cela dépasse mes compétences et je ne sais pas si cela est possible.

    En fait j’aimerais avoir un fichier de base que mes collègues pourront utiliser pour créer des formulaires à leur convenance, cependant lorsqu’ils vont copier et renommer certains champs, il est probable qu’ils renomment mal un champ ou qu’ils en oublient un. Ne connaissant pas le JavaScript, ils ne pourront pas interpréter correctement le message d’erreur de la console.

    Merci

    • Cette réponse a été modifiée le il y a 3 mois par michel c..
    en réponse à : Vérification #74484
    michel c.
    Participant

    Tout est nickel.

    Merci

    en réponse à : Vérification #74475
    michel c.
    Participant

    Merci, j’ai essayé mais la console et la boite de dialogue renvoient un message curieux :

    Champs dupliqués :
    • "Aller,0,1" - 1 fois en page Doc.0.01, 1 fois en page 0 et 11.
    • "Aller,0,1" - 1 fois en page Doc.0.011, 1 fois en page 0 et 111.
    • "Aller,0,1" - 1 fois en page Doc.0.0111, 1 fois en page 0 et 1111.
    • "Aller,0,1" - 1 fois en page Doc.0.01111, 1 fois en page 0 et 11111.
    • "Aller,0,1" - 1 fois en page Doc.0.011111, 1 fois en page 0 et 111111.
    • "Aller,0,1" - 1 fois en page Doc.0.0111111, 1 fois en page 0 et 1111111.
    • "Aller,0,1" - 1 fois en page Doc.0.01111111, 1 fois en page 0 et 11111111.
    • "Aller,0,1" - 1 fois en page Doc.0.011111111, 1 fois en page 0 et 111111111.
    • "Aller,0,1" - 1 fois en page Doc.0.0111111111, 1 fois en page 0 et 1111111111.
    • "Aller,0,1" - 1 fois en page Doc.0.01111111111, 1 fois en page 0 et 11111111111.
    • "Aller,0,1" - 1 fois en page Doc.0.011111111111, 1 fois en page 0 et 111111111111.
    • "Aller,0,1" - 1 fois en page Doc.0.0111111111111, 1 fois en page 0 et 1111111111111.
    • "Aller,0,1" - 1 fois en page Doc.0.01111111111111, 1 fois en page 0 et 11111111111111.

    J’essaye de me pencher un peu dessus mais certaines lignes dépassent mes compétences…

    • Cette réponse a été modifiée le il y a 3 mois par michel c..
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Extraire un indice #74464
    michel c.
    Participant

    La parenthèse était au mauvais endroit.

    J’ai modifié ainsi :

    for (var i=0; i<this.numFields; i++) {
    var nomChamp=this.getNthFieldName(i);
    var a=nomChamp.substring(0, 4);
    var b = nomChamp.split(“.”);
    console.println(“partie 0 : “+a+” ; partie 1 : “+nomChamp[1]+” ; partie 2 : “+nomChamp[2]);

    }

    Pour la partie 1 je n’ai pas de souci. Par contre pour les parties 1 et 2 la console me renvoie le 2ème et le 3ème caractère de chaque nom de champ.

     

    Edit : je viens de comprendre :

    for (var i=0; i<this.numFields; i++) {
    var nomChamp=this.getNthFieldName(i);

    var b = nomChamp.split(".");
    var P1 = (b[0]);
    var P2 = (b[1]);
    var P3 = (b[2]);

    console.println("partie 1 : "+P1+" ; partie 2 : "+P2+" ; partie 3 : "+P3);

    }

     

    Merci beaucoup en tout cas, je n’avais jusqu’à présent pas bien saisi la fonction split.

    Grâce à tes explications je pense avoir bien compris maintenant. Ça va m’apporter beaucoup je pense.

    • Cette réponse a été modifiée le il y a 3 mois par michel c..
    • Cette réponse a été modifiée le il y a 3 mois par michel c..
    en réponse à : Extraire un indice #74460
    michel c.
    Participant

    Bonjour et merci. Je viens d’essayer avec ce code :

    for (var i=0; i<this.numFields; i++) {
    var nomChamp=this.getNthFieldName(i);

    var b = nomChamp.split(".");
    console.println("partie 0 : "+nomChamp[0]+" ; partie 1 : "+nomChamp[1])+" ; partie 2 : "+nomChamp[2];

    }

     

    Console :

    partie 0 : A ; partie 1 : i
    partie 0 : A ; partie 1 : i
    partie 0 : A ; partie 1 : i
    partie 0 : A ; partie 1 : i
    partie 0 : A ; partie 1 : i
    partie 0 : A ; partie 1 : i
    partie 0 : A ; partie 1 : i
    partie 0 : A ; partie 1 : i
    partie 0 : A ; partie 1 : i
    partie 0 : A ; partie 1 : i
    partie 0 : B ; partie 1 : u

     

     

    • Cette réponse a été modifiée le il y a 3 mois par michel c..
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Champ maitre et champ esclave #74446
    michel c.
    Participant

    Salut, vois si ça te convient.

    Bonne soirée

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Vérification #74438
    michel c.
    Participant

    Sinon ta proposition précédente me va très bien.

    en réponse à : Vérification #74433
    michel c.
    Participant

    Merci pour cette dernière version.

    Le script précédent marchait parfaitement mais pour celui-ci c’est curieux il me détecte des doublons sur des champs uniques.

    Lors de l’exécution de la fonction, il me détecte le champ RepOpi en double sur les pages 1 et 2 mais il n’y en a pas sur la page 2.

    Si j’efface ce champ, il me détecte ensuite le champ meca qui est toujours en un seul exemplaire et ainsi de suite…

    Et contrairement à l’autre script, je suis obligé de l’exécuter plusieurs fois : une détection à la fois…

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Vérification #74431
    michel c.
    Participant

    Merci, c’est parfait

     

    en réponse à : Vérification #74424
    michel c.
    Participant

    Merci beaucoup. J’ai modifié légèrement le texte pour que le message soit plus clair.

    function doublons() {
    for (var i=0; i<this.numFields; i++) {
    var nomChamp=this.getNthFieldName(i);
    if (typeof this.getField(nomChamp).page=="object") app.alert("Le champ \""+nomChamp+"\" n'est pas unique; il se trouve sur la(les) page(s) : "+this.getField(nomChamp).page,3);
    }
    }

    Maintenant je vais essayer de transformer la valeur this.getField(nomChamp).page pour que la numérotation commence à 1 et non pas à 0.

    Je pensais qu’il fallait convertir cette chaine en nombre avant de lui ajouter 1 mais je crois que ce n’est pas si simple.

    en réponse à : Vérification #74422
    michel c.
    Participant

    Merci, je vais essayer de voir ce que je peux faire.

    Je suppose qu’au départ, je vais devoir lister tous les noms de champs pour les inscrire dans la table.

    Je pensais commencer par quelque chose comme ça :

    function doublons() {
    for (var i=0; i<this.numFields; i++) {
    var nomChamp=this.getNthFieldName(i);
    }

    var laTable=[.........];

    Je ne maitrise pas du tout les tables mais je vais chercher.

    Merci

    en réponse à : Vérification #74411
    michel c.
    Participant

    Bonjour, malheureusement à mon travail nous avons opté pour un autre logiciel qu’adobe acrobat (PDF XChange editor)

    Je ne pense pas que ce soit compatible. Je viens de regarder, on peut installer des modules supplémentaires mais seulement ceux proposés par l’éditeur.

    en réponse à : Position des champs #74405
    michel c.
    Participant

    Merci, j’avais fait cette modif mais je n’ai pas mis en lien le fichier avec cette modif. Je peux le faire dans la matinée si ça intéresse quelqu’un.

    en réponse à : Position des champs #74384
    michel c.
    Participant

    Je pensais avoir réussi, ça fonctionne parfaitement pour les chapitres 1 et 3 et ça ne marche pas pour le 2ème….J’ai une erreur à la console à la ligne 25 du script corriger : Doc:Open:25: TypeError: r.value.split is not a function

    Je ne vois pas pourquoi le script fonctionne sur les 2 autres chapitres et pourquoi il plante là ….

    Edit : je viens de comprendre : il fallait que je mette r.valueAsString au lieu de r.value.split

     

    • Cette réponse a été modifiée le il y a 3 mois et 1 semaine par michel c..
    • Cette réponse a été modifiée le il y a 3 mois et 1 semaine par michel c..
    • Cette réponse a été modifiée le il y a 3 mois et 1 semaine par michel c..
    • Cette réponse a été modifiée le il y a 3 mois et 1 semaine par michel c..
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Position des champs #74381
    michel c.
    Participant

    Par contre, cette case, remplit sa fonction de tout cocher ou décocher mais la croix ne reste pas lorsqu’on la coche, elle disparait aussitôt, il y a un truc que j’ai du louper….

    Pfff… la couleur du texte était en blanc, voila pourquoi je ne voyais pas la croix…

    Sinon, j’ai mis le script affecté aux cases cAc.a.b en fonction (CorrQuest). Par conte, rien ne se passe si je coche la case cAc.3.0 : toutes les cases sont bel et bien cochées mais sans que cela ne déclenche l’action d’afficher les champs R.a.b en lieu et place des champs Q.a.b

    • Cette réponse a été modifiée le il y a 3 mois et 1 semaine par michel c..
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Position des champs #74378
    michel c.
    Participant

    J’ai renommé la case qui sert à cocher toutes les cases cAc.a.b (initialement “Case.n” renommée en cAc.n.0) ; l’indice 0 n’étant pas utilisé ça me simplifie la tâche.

    Par contre, cette case, remplit sa fonction de tout cocher ou décocher mais la croix ne reste pas lorsqu’on la coche, elle disparait aussitôt, il y a un truc que j’ai du louper….

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Position des champs #74375
    michel c.
    Participant

    Bonjour et merci.

    J’ai corrigé les 2 premières erreurs que tu mentionnes. Pour la mise en fonction et faire une boucle, je cherche…

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Position des champs #74369
    michel c.
    Participant

    Bonjour, petit à petit, j’arrive à avoir ce que je veux, cependant il y a 2 trucs que je ne comprends pas :

    Pour le chapitre 3, lorsque je coche une case uniquement, tout fonctionne comme je le souhaite : Le champ R.a.b prend la place du champ Q.a.b et lorsque je décoche cette même case l’inverse se produit.

    Par contre si je sélectionne les 3 premières cases par exemple (cAc.3.1 à c.A.c.3.3), là tout va bien mais quand je décoche l’une de ces cases (par exemple c.A.c.3.2), alors les 2 champs Q.3.1 et Q.3.3 restent masqués alors que je voudrais qu’ils redeviennent visibles.

    L’autre truc que je n’arrive pas à faire, c’est la mise en place de la case : “Case.3” permettant de cocher ou décocher d’un seul coup toutes les cases c.A.c….. (via le script de document : corriger) En fait elles se cochent et se décochent comme je le souhaite mais aucune action liée à leur changement d’état ne se produit…

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Position des champs #74364
    michel c.
    Participant

    J’ai réussi à cocher/décocher toutes les checkboxes de la série…

     

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Position des champs #74360
    michel c.
    Participant

    Merci pour la proposition.Je viens de le faire pour la question 3 (sous le cartouche) et ça fonctionne.

    J’imaginais un seul bouton pour remplacer tous les champs d’un groupe de questions : par exemple un bouton qui afficherait toutes les réponses R.3.b pour la question 3

    J’ai essayé de mettre cela en place mais je dois avoir un souci dans mon code, ça ne fonctionne pas.

    Après si c’est possible de ne pas avoir à mettre en place tous les champs cAc.a.b et de n’avoir qu’une seule case pour chaque groupe de question (une case pour tous les champs R.1.n ; une autre case pour tous les champs R.2.n….)

    L’idée c’est d’avoir un seul fichier dans lequel il y a la question et le corrigé intégré. Ça m’éviterai d’envoyer via le réseau le corrigé pour les élèves qui étaient absents lors d’une séance. Je prendrais le contrôle de leur pc, je saisirais le code admin et en cochant la case, ils auraient le corrigé.

    Parfois j’ai des cours ou exercices qui font une quinzaine de pages et je dois alors fournir à l’élève qui a raté une séance le corrigé pour les 3 premières pages et le reste du document non corrigé, ce qui est assez long (surtout si je dois le faire pour plusieurs élèves qui n’ont pas été absents pendant les mêmes périodes). En cochant les paragraphes pour lesquels je veux afficher la correction me ferait gagner un temps fou.

    En tout cas, grâce à toi, je me rapproche de cet objectif.

    Il y a aussi 2 points que j’aimerais améliorer :

    • dans le cas ou plusieurs réponses sont acceptées (dans le champ R.a.b avec le séparateur | entre chaque réponse acceptable), j’aimerais que dans ce cas précis, seule la chaine de caractère se trouvant avant le 1er séparateur s’affiche. J’ai conscience que cela risque de poser un problème car en décochant la case, alors le champ R.a.b ayant été tronqué des autres réponses acceptées, celles-ci ne seront pas rétablies…
    • J’aimerais également que la taille de la police du champ R.a.b soit remplacée par celle du champ Q.a.b lorsque la case est cochée.

    Merci

    • Cette réponse a été modifiée le il y a 3 mois et 1 semaine par michel c..
    • Cette réponse a été modifiée le il y a 3 mois et 1 semaine par michel c..
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Position des champs #74357
    michel c.
    Participant

    Bonjour, effectivement je n’avais pas encore placé le symbole de disposition des vues dans le cartouche. Il y est dans le document en pièce jointe.

    J’ai testé, ça correspond à ce que je voudrais faire mais lorsque je place plusieurs cases à cocher (par exemple ici pour les questions 3.4 et 3.7) ça fonctionne bien lorsque l’une ou l’autre est cochée mais ça ne fonctionne plus lorsque les 2 sont cochées.

    Je me demandais si c’était jouable d’avoir une seule case à cocher pour tout le document ou si c’est plus simple une case à cocher par chapitre (une pour tous les champs commençant par Q.1 une autre pour tous les champs commençant par Q.2…)

     

    Merci

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Position des champs #74353
    michel c.
    Participant

    L’idée est bonne mais les champs questions sont des listes deroulantes ou des champs textes. Les champs réponses eux sont toujours des champs texte. Et puis je me disait qu’en changeant les positions, il y aurait moins de chances que cela impacte le fonctionnement des autres scripts de ce document qui est déjà une usine à gaz…

    • Cette réponse a été modifiée le il y a 3 mois et 1 semaine par michel c..
    en réponse à : Position des champs #74351
    michel c.
    Participant

    Si c’est plus simple, intervertir les positions et caractéristiques des champs Q.a.b et R.a.b

    en réponse à : Exécution de fonction par bouton #74342
    michel c.
    Participant

    Ca fonctionne . J’ai du modifier la ligne de code proposée pour cela. var RegExTest=new RegExp("^"+this.getField("R."+n+"."+a).value.replace(/[.*+?^${}()/\[\]\\]/g,"\\$&")+"$"); Le caractère | ne doit pas être échappé pour que cela marche. Merci beaucoup Lien

     

    Bonjour, j’ai parlé trop vite, cette ligne de code génère une erreur si la réponse attendue est un nombre ; voici le message d’erreur :

    Doc:Open:22: TypeError: this.getField(...).value.replace is not a function

    Dans l’exemple la réponse attendue à la question 2.2 est 123. Dans ce cas si je clique sur vérifier j’ai ce message d’erreur.

    Par contre s’il y a 2 réponses acceptables (si je saisis 123|124 dans le champ R.2.2) alors lorsque je clique sur vérifier je n’ai aucun message d’erreur…

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Centrage automatique d’un champ #74341
    michel c.
    Participant

    Oui, tout fonctionne super bien .

    en réponse à : Centrage automatique d’un champ #74339
    michel c.
    Participant

    Bonjour, ça marche parfaitement ! Merci

     

    en réponse à : Centrage automatique d’un champ #74333
    michel c.
    Participant

    J’ai réussi en modifiant la ligne 41 : else nmChamp=nomListe;

    J’ai mis ceci à la place : else nmChamp=i;

    Là le script fonctionne, mais mal :

    S’il y a plusieurs champs, lors de la 2ème, 3ème… demande de centrage, ce sera toujours le champ de la 1ère demande de centrage (1ère exécution du script) qui sera effectuée.

    De plus, la largeur du champ se trouve modifiée pendant l’opération.

     

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Centrage automatique d’un champ #74330
    michel c.
    Participant

    Bonjour, je viens de tester et j’ai eu 2 erreurs :

    Field:Mouse Up:36: ReferenceError: valeurListe is not defined

    Pour celle-ci j’ai modifié la ligne 32 : valeurListe=listeChamps;

    Que j’ai transformée comme ceci : var valeurListe=listeChamps;

    L’autre erreur : Field:Mouse Up:41: ReferenceError: nomListe is not defined

    Pour celle-ci j’ai modifié la ligne 33 : nomListe=i;    comme ceci : var nomListe=i;

    Et maintenant je n’ai plus d’erreur à la console mais la boite de dialogue m’envoie le message : le champ "undefined" n'existe pas

    Enfin ça marche si je donne au champ que je veux centrer le nom “undefined” ….

    Je cherche…

    • Cette réponse a été modifiée le il y a 3 mois et 2 semaines par michel c..
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Condition sur 1ère ligne #74325
    michel c.
    Participant

    Parfait comme toujours !

    Merci beaucoup

    en réponse à : Condition sur 1ère ligne #74321
    michel c.
    Participant

    Oui, j’avais pensé à cette solution qui est bien meilleure mais me paraissait plus difficile pour moi.

    J’utilise ce script :

    var Quest = this.getField("NoQuest").value;

    for (var i = 1; i < 41; i++) {
    this.getField("Q."+Quest+"."+i).setItems(this.getField("entreesListe").value.split(/[\r\n]+/g));
    }

    en réponse à : Condition sur 1ère ligne #74318
    michel c.
    Participant

    Bonjour, j’ai essayé, cela ne fonctionne pas mais je n’ai peut être pas été assez clair dans ma formulation.

    L’utilisateur doit compléter le champ entreesListe pour générer les listes déroulantes.

    Cependant je voudrais forcer l’utilisateur à inscrire le caractère ? et uniquement celui-ci sur la 1ère ligne.

    Le message d’alerte doit apparaître si cette condition n’est pas respectée

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Exécution de fonction par bouton #74306
    michel c.
    Participant

    Ca fonctionne . J’ai du modifier la ligne de code proposée pour cela.

    var RegExTest=new RegExp("^"+this.getField("R."+n+"."+a).value.replace(/[.*+?^${}()/\[\]\\]/g,"\\$&")+"$");

    Le caractère | ne doit pas être échappé pour que cela marche.

    Merci beaucoup

     

    Lien

    • Cette réponse a été modifiée le il y a 3 mois et 3 semaines par michel c..
    en réponse à : Exécution de fonction par bouton #74302
    michel c.
    Participant

    Ca sera mieux avec le fichier :

     

    Lien

    en réponse à : Exécution de fonction par bouton #74301
    michel c.
    Participant

    J’ai parlé un peu vite, j’ai fait un quiz pour tester un peu ça et je ne comprend pas pourquoi j’ai 6 erreurs à la page 4… Aucune erreur à la console pourtant…

    en réponse à : Exécution de fonction par bouton #74296
    michel c.
    Participant

    Merci ! ça marche. C’est top

    • Cette réponse a été modifiée le il y a 3 mois et 3 semaines par michel c..
    • Cette réponse a été modifiée le il y a 3 mois et 3 semaines par michel c..
    • Cette réponse a été modifiée le il y a 3 mois et 3 semaines par michel c..
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Exécution de fonction par bouton #74294
    michel c.
    Participant

    Bonjour, je ne sais pas si j’aurais du ouvrir un autre fil pour cette question vu que ce document fonctionne bien maintenant.

    Je pensais à améliorer un bout de code dans ce document :

    Pour vérifier qu’une réponse est bonne, la ligne de code est la suivante :

    if (this.getField("Q."+n+"."+a).value == this.getField("R."+n+"."+a).value)

    Ici la valeur saisie dans le champ Q.n.a doit être identique à celle du champ R.n.a

    Imaginons que je souhaite que plusieurs réponses soient acceptées. serait il possible que dans le champ R.n.a toutes les réponses acceptables soient séparées par exemple par ### (exemple si on demande la saisie du mot clé ; comme celui-ci a 2 orthographes : clé ou clef), j’aimerais qu’en mettant clé###clef dans le champ R.n.a, si l’utilisateur saisit clé ou clef dans le champ Q.n.a sa réponse soit considérée comme bonne (dans l’exemple, il y a 2 réponses acceptables mais dans mon idée il pourrait aussi y en avoir plus.

    Comment modifier cette ligne :

    if (this.getField("Q."+n+"."+a).value == this.getField("R."+n+"."+a).value)  pour faire cela ?

    Si c’est faisable bien sur.

    Merci

    en réponse à : Exécution de fonction par bouton #74284
    michel c.
    Participant

    Bon, en tout cas j’ai un formulaire qui fonctionne en grande partie grâce à vous. Merci beaucoup

    en réponse à : Exécution de fonction par bouton #74263
    michel c.
    Participant

    Et curieusement avec cette erreur ça fonctionne (je viens d’ailleurs de m’apercevoir que j’avais oublié certains champs pour les valeurs par défaut)

    Je sais que parfois je me complique la vie dans certains scripts. C’est du à une mauvaise maitrise du langage : souvent grâce à vous j’implémente des bouts de scripts voire des scripts complets dans mes documents. J’essaye parfois de modifier certains d’entre eux pour arriver à mes fins en me faisant une idée fausse de la signification du code.

    Voici l’interprétation que je me fais du script Default :

    //boucle entre la variable i=0 et i<nombre de champs
    for (var i=0; i<this.numFields; i++) {
    //déclaration de la variable nomchamp qui prend pour valeur le nom de chaque champs du formulaire
    var nomChamp=this.getNthFieldName(i);
    //si la première occurence d'un champ est "Q."
    if (nomChamp.indexOf("Q.")==0) {
    //alors les champs dont les noms commencent par "Q." ne seront pas en lecture seule
    this.getField("Q.").readonly=false;
    //de plus, si ces champs sont de type texte alors leur valeur par défaut ser ""
    if (this.getField(nomChamp).type=="text") {this.getField(nomChamp).defaultValue="";}
    // sinon l'item 0 mettre l'item 0 comme valeur pour les champs qui ne sont pas de type texte
    else {this.getField(nomChamp).value=this.getField(nomChamp).getItemAt(0,false);}
    }
    //si la première occurence d'un champ est "R." alors la valeurs de chacun de ces champs deviendra la valeur par défaut
    if (nomChamp.indexOf("R.")==0) {this.getField(nomChamp).defaultValue=this.getField(nomChamp).value;}

    • Cette réponse a été modifiée le il y a 4 mois par michel c..
    • Cette réponse a été modifiée le il y a 4 mois par michel c..
    • Cette réponse a été modifiée le il y a 4 mois par michel c..
    • Cette réponse a été modifiée le il y a 4 mois par michel c..
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Exécution de fonction par bouton #74261
    michel c.
    Participant

    Bonsoir. Je pense avoir compris ce que tu dit et effectivement ça me parait logique.

    Par contre j’ai modifié le script Defaut comme ceci :

    function Default() {

    for (var i=0; i<this.numFields; i++) {var nomChamp=this.getNthFieldName(i);}

    if (nomChamp=="Q.") {this.getField(nomChamp).readonly=false;
    if (this.getField(nomChamp).type=="text") {this.getField(nomChamp).defaultValue="";}
    else {this.getField(nomChamp).value=this.getField(nomChamp).getItemAt(0,false);}
    }
    if (nomChamp=="R.") {this.getField(nomChamp).defaultValue=this.getField(nomChamp).value;}

    }

    Et là ça ne fonctionne plus. Lorsque je modifie par exemple le champ R.1.1 et que je clique sur le bouton pour appliquer les valeurs par défaut, la valeur par défaut de ce champ reste inchangée.

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Exécution de fonction par bouton #74256
    michel c.
    Participant

    J’avais oublié un champ… Aide.1.1 c’est résolu !

    en réponse à : Exécution de fonction par bouton #74253
    michel c.
    Participant

    J’ai trouvé quel script est en cause : c’est le script Default : lorsque je le supprime, les listes déroulantes ne sont plus initialisées à l’ouverture.

    Reste à savoir pourquoi il s’exécute à l’ouverture.

    Certains champs avaient encore la ligne de code Default(); en action de format. J’ai veillé à supprimer cette action sur les champs concernés…. Il y a un truc qui m’échappe

    • Cette réponse a été modifiée le il y a 4 mois par michel c..
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Exécution de fonction par bouton #74248
    michel c.
    Participant

    J’utilise la fonction verifier pour qu’à chaque question, l’élève puisse savoir s’il a fait tout juste et passer à la question suivante ou s’il a fait des erreurs et dans ce cas, il doit modifier ses réponses.

    Auparavant j’avais une vérification spécifique pour la dernière question ou en plus de cela, une boite de dialogue s’ouvrait pour signaler à l’élève s’il a fait ou non trop d’erreurs par rapport aux objectifs définis par le prof. (pour éviter que l’élève teste toutes les réponses une à une bêtement).

    Grâce à votre aide, j’ai une seule fonction verifier pour toutes les questions. Je compare l’indice du bouton verifier avec le nombre de boutons verifier (qui correspond à l’indice le plus élevé car les indices commencent à 1 et sont tous consécutifs).

    var nCompt = 0;
    for (var i = 0 ; i < this.numFields ; i++) {
    var oChamp = this.getField(this.getNthFieldName(i));
    if ((oChamp.type == "button") && (/Verifier./.test(oChamp.name))) {nCompt = nCompt + 1;}
    }

    var DerVer = nCompt-1;

    ......................

    ...................

    if (n == DerVer) {
    var errMax = this.getField("Menu.7").value;
    var ErrCom = this.getField("Erreurs").value;

    if (errMax<=ErrCom) {app.alert({cMsg:"Vous avez fait " + ErrCom + " erreur(s). Il fallait faire moins de " + errMax + " erreur(s)." +"\r"+ " Recommencez le questionnaire", nIcon:2});} if (errMax>ErrCom) {app.alert({cMsg:"Bravo, vous avez réussi en faisant moins de " + errMax + " erreur(s).", nIcon:2});}

    ça fonctionne à merveille

    Je dois encore vérifier les éventuels bugs que je n’aurais pas vus…

    Il y en a un qui me donne du fil à retordre : à la fermeture du document les champs “Q.” (et qui sont des listes déroulantes) se mettent en position 1 et je ne comprend pas pourquoi.

    C’est regrettable car un élève qui n’a pas le temps de terminer en classe devra recommencer depuis le début l’exercice.

    J’avais essayé de pallier à ce problème en ajoutant cette ligne : this.getField("Q.").readonly=true;

    en script avant la fermeture et avant la sauvegarde du document mais ça ne fonctionne pas…

    • Cette réponse a été modifiée le il y a 4 mois par michel c..
    • Cette réponse a été modifiée le il y a 4 mois par michel c..
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Exécution de fonction par bouton #74240
    michel c.
    Participant

    J’ai trouvé !

    en réponse à : Exécution de fonction par bouton #74232
    michel c.
    Participant

    Merci beaucoup.

    Il y a un bug que je ne comprend pas :

    Quand je répond aux questions, pour l’avant dernière bien que mettant la bonne réponse, je dois m’y prendre en 2 fois pour que cette réponse soit validée.

    Au 1er essai, le menu déroulant se remet en position 1 lorsque je clique sur valider.

    Je n’ai pas ce problème pour les autres questions

    Voici les bonnes réponses pour tester :

    • question 1.1 → Rep 3
    • question 1.2 → B
    • question 2.1 → Rep 1
    • question 2.2 → 45

    Merci

     

    • Cette réponse a été modifiée le il y a 4 mois par michel c..
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Exécution de fonction par bouton #74228
    michel c.
    Participant

    Bonjour afin d’apporter une enième modif, j’ai un petit bout de code qui me manque :

    J’ai n boutons qui se nomment Verifier.1 ; verifier.2……verifier.n le nombre n peuf varier en fonction du type d’exercice que je mettrais en place.

    J’aimerais lancer une fonction (qui s’appele VerifFinale) pour la valeur de n maximale (le dernier bouton verifier de mon document).

    Quel code me permettrait de lancer cette fonction?

    Merci

    en réponse à : Exécution de fonction par bouton #74224
    michel c.
    Participant

    Merci beaucoup, je pense toucher au but !

    Je cherche d’éventuels bugs que je n’aurai pas vu mais ça commence à prendre forme.

     

    • Cette réponse a été modifiée le il y a 4 mois par michel c..
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Exécution de fonction par bouton #74219
    michel c.
    Participant

    Une question : j’aimerais proposer 3 choix de couleurs par liste déroulante (les valeurs d’export seront red, blue et green)

    Dans mon script, pour l’affichage des mauvaises réponses en couleur j’ai mis ces lignes :

    var colorErr = this.getField(“Menu.11”).value;

    this.getField(“Q.”+n+”.”+a).fillColor=color.colorErr;

    Mais ça n’a pas l’air de fonctionner.

    Merci

     

    en réponse à : Exécution de fonction par bouton #74218
    michel c.
    Participant

    Je viens de trouver ! Certains champs contenaient encore le code Default(); en action de validation et/ou calcul.

    en réponse à : Exécution de fonction par bouton #74216
    michel c.
    Participant

    J’ai réussi grâce à vous à corriger certains bugs (j’avais mal lu la réponse de BB du 8 mai 2024 à 19:09)

    J’ai un autre souci (j’espère que c’est le dernier) : mes menus déroulants se remettent sur le 1er item tout le temps (alors que je voudrais que ce soit le cas uniquement si je clique sur Raz ou sur Default).

    J’ai passé mes scripts en revue et je ne vois pas trop ou ça cloche. J’ai désactivé pour voir le code this.getField(nomChamp).value=this.getField(nomChamp).getItemAt(0,false); à la ligne 8 du script Default pour voir mais le problème n’est pas là…

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Exécution de fonction par bouton #74214
    michel c.
    Participant

    Bonjour, j’ai peut être une idée mais j’ai besoin d’un bout de code.

    J’ai des champs qui se nomment par exemple “Question.a.b” pour lesquels les nombres a et b sont compris entre 1 et un nombre qui varient en fonction du document.

    Le nombre a détermine le nombre de question dans le document et le nombre b le nombre de “sous-question” pour chacune d’entre elles.

    Comment faire pour extraire ces nombres dans 2 variables.

    Par exemple si

    • à la question 1 j’ai 2 champs qui se nomment”Question.1.0″ et “Question.1.1”
    • à la 2ème j’ai 3 champs qui se nomment”Question.2.0″ ;  “Question.2.1” et “Question.2.2”
    • à la 3ème j’ai 3 champs qui se nomment”Question.3.0″ ;  “Question.3.1” et “Question.3.2”

    il faudrait que je puisse faire

    • une boucle for pour la question 1 ou la variable b est comprise entre 0 et 1
    • une boucle for pour la question 2 ou la variable b est comprise entre 0 et 2
    • une boucle for pour la question 3 ou la variable b est comprise entre 0 et 2

    Le nombre de boucles dépendra de la variable a qui détermine le nombre de questions

    Merci

     

    en réponse à : Exécution de fonction par bouton #74207
    michel c.
    Participant

    Effectivement, je viens de vérifier avec adobe Acrobat DC et ça fonctionne.

    ça ne fonctionne pas avec PDF XChange editor (logiciel pour lequel nous avons la licence…)

    Je vais essayer de voir s’il existe un autre moyen d’arriver à mes fins…

    Erreur

    • Cette réponse a été modifiée le il y a 4 mois et 1 semaine par michel c..
    en réponse à : Exécution de fonction par bouton #74202
    michel c.
    Participant

    Bonjour, ça ne fonctionne pas. Aucun message d’erreur sur la console mais rien ne se passe.

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Exécution de fonction par bouton #74197
    michel c.
    Participant

    Merci, je viens de faire ces modifications. Maintenant j’ai un souci avec ma fonction Raz.

    En gros, je souhaite

    • que tous les champs “R.” soient cachés

    •  que tous les autres champs et boutons dont le 1er indice est supérieur à 1 soient cachés aussi

    • que la couleur de fond de tous les champs “Q.” soit transparent

    Voici mon script :

    function Raz() {
    for (var i=0; i<this.numFields; i++) {
    var nomChamp=this.getNthFieldName(i);
    this.getField("Erreurs").value = 0;
    this.getField("Menu.5").value = 0;

    if (nomChamp.indexOf("TQ.")==0) {this.getField("TQ.").display=display.hidden;}
    if (nomChamp.indexOf("Question.")==0) {this.getField("Question.").display=display.hidden;
    this.getField("Question").fillColor=color.transparent;}
    if (nomChamp.indexOf("Aide.")==0) {this.getField("Aide.").display=display.hidden;}
    if (nomChamp.indexOf("Verifier.")==0) {this.getField("Verifier.").display=display.hidden;}
    if (nomChamp.indexOf("Recommencer.")==0) {this.getField("Recommencer.").display=display.hidden;}
    if (nomChamp.indexOf("R.")==0) {this.getField("R.").display=display.hidden;}

    if (nomChamp.indexOf("TQ.1")==0) {this.getField("TQ.1").display=display.visible;}
    if (nomChamp.indexOf("Question.1")==0) {this.getField("Question.1").display=display.visible;}
    if (nomChamp.indexOf("Aide.1")==0) {this.getField("Aide.1").display=display.visible;}
    if (nomChamp.indexOf("Verifier.1")==0) {this.getField("Verifier.1").display=display.visible;}
    if (nomChamp.indexOf("Recommencer.1")==0) {this.getField("Recommencer.1").display=display.visible;}
    }
    }

    Je ne comprend pas trop pourquoi  ça ne fonctionne pas…

    • Cette réponse a été modifiée le il y a 4 mois et 1 semaine par michel c..
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Exécution de fonction par bouton #74191
    michel c.
    Participant

    Bonjour et merci, ça fonctionne. Pour exclure certains boutons et champs de la fonction EditReps j’ai modifié le script comme ceci :

    for (var i=0; i<this.numFields; i++) {
    var nomChamp=this.getNthFieldName(i);
    if (this.getField("Menu.5").value!="Off") {
    this.getField("R.").display=display.visible;
    if (nomChamp.indexOf("Q.")!=0) {this.getField(nomChamp).readonly=false;}
    }
    else {
    this.getField(nomChamp).readonly=true;
    if (nomChamp.substring(0, 4)=="Menu") {this.getField("Menu.").readonly=false;}
    if (nomChamp.substring(0, 1)=="Q") {this.getField("Q.").readonly=false;}
    if (nomChamp.substring(0, 1)=="R") {this.getField("R.").display=display.hidden;}
    }
    }}

    Je ne sais pas si c’est la meilleure méthode mais ça marche.

    Sinon je me rend compte que j’ai un souci en cliquant sur Raz : s’il n’y a aucune annotation sur le document, la console renvoie l’erreur :

    Doc:Open:6: TypeError: annots is null

    Ce que je ne comprend pas d’ailleurs car dans la fonction EffAnnots il y a cette ligne : if (this.getAnnots != null) qui devrait éviter ce message d’erreur.

    • Cette réponse a été modifiée le il y a 4 mois et 1 semaine par michel c..
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Exécution de fonction par bouton #74179
    michel c.
    Participant

    Bonjour, je viens d’essayer mais ça ne fonctionne pas. Je n’ai aucune erreur à la console mais les scripts font rien…

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Champ texte grisé #74020
    michel c.
    Participant

    Voila, je ne sais pas si c’est ce que tu voulais.

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Propriété d’un champ #73973
    michel c.
    Participant

    Bonjour et merci pour la proposition.

    J’ai testé et ce script en le mettant en script de document pour les champs question et les champs réponse.

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

    Pour l’indice i placé devant question, c’est lié au script que tu m’as proposé il y a quelques jours (reglageChamps) que j’ai dupliqué pour qu’il y ait un script par page.

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

    Merci

    en réponse à : Propriété d’un champ #73969
    michel c.
    Participant

    Je viens de réussir :

    function CoulQ() {

    var Coul=this.getField("Menu.3").value;

    if (Coul=="Aucune") {this.getField("question.").fillColor = color.transparent;
    for (var i=2 ; i<6 ; i++) {this.getField(i+"question.").fillColor = color.transparent;}
    }

    else if (Coul=="Jaune") {this.getField("question.").fillColor = color.yellow;
    for (var i=2 ; i<6 ; i++) {this.getField(i+"question.").fillColor = color.yellow;}
    }
    else if (Coul=="Vert") {this.getField("question.").fillColor = color.green;
    for (var i=2 ; i<6 ; i++) {this.getField(i+"question.").fillColor = color.green;}
    }

    else if (Coul=="Bleu") {this.getField("question.").fillColor = color.blue;
    for (var i=2 ; i<6 ; i++) {this.getField(i+"question.").fillColor = color.blue;}
    }

    else if (Coul=="Rouge") {this.getField("question.").fillColor = color.red;
    for (var i=2 ; i<6 ; i++) {this.getField(i+"question.").fillColor = color.red;}
    }

    }

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Propriété d’un champ #73967
    michel c.
    Participant

    Merci, j’avais pensé à faire cela mais je craignais que cela interfère avec un autre script (que BB m’a proposé dans son post du 6 février 2024 à 17:51) qui permet de spécifier la hauteur d’un champ par une liste déroulante et de décaler les positions des champs qui sont en dessous.

    Comme ce script ne fonctionne me semble-t-il que sur une page, j’ai dupliqué ce script de document pour qu’il n’y en ait qu’un par page.

    Mais je vais quand même essayer ça demain.

    en réponse à : Propriété d’un champ #73962
    michel c.
    Participant

    Merci pour la réponse, je viens de tester mais j’ai toujours la même erreur dans ce script. Cela concerne les conditions je pense :

    else if (Coul==”Bleu”) {
    for (var i=0; i<this.numFields; i++) {
    if (this.getNthFieldName(i).indexOf(“question.”)==0) {this.getField(“question.”+i).fillColor = color.blue;}
    }
    }

    L’erreur renvoyée : Doc:Open:25: TypeError: this.getField(...) is null

    Un problème je pense sur la numérotation des champs avec la variable i qui doit fournir une valeur hors n° de mes champs question.

    Merci

    • Cette réponse a été modifiée le il y a 7 mois par michel c..
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Propriété d’un champ #73957
    michel c.
    Participant

    Merci pour la réponse. Je viens essayer de mettre en application cela mais j’ai une erreur (dans le script de document CoulQ) : ce script devrait me permettre de choisir la couleur des champs question sur la 1ère page.

    function CoulQ() {

    var Coul=this.getField(“Menu.3″).value;

    if (Coul==”Aucune”) {
    for (var i=0; i<this.numFields; i++) {
    if (this.getNthFieldName(i).indexOf(“question.”)==0) {this.getField(“question.”+i).fillColor = color.transparent;}
    }
    }

    if (Coul==”Jaune”) {
    for (var i=0; i<this.numFields; i++) {
    if (this.getNthFieldName(i).indexOf(“question.”)==0) {this.getField(“question.”+i).fillColor = color.yellow;}
    }
    }

    if (Coul==”Vert”) {
    for (var i=0; i<this.numFields; i++) {
    if (this.getNthFieldName(i).indexOf(“question.”)==0) {this.getField(“question.”+i).fillColor = color.green;}
    }
    }

    if (Coul==”Bleu”) {
    for (var i=0; i<this.numFields; i++) {
    if (this.getNthFieldName(i).indexOf(“question.”)==0) {this.getField(“question.”+i).fillColor = color.blue;}
    }
    }

    if (Coul==”Rouge”) {
    for (var i=0; i<this.numFields; i++) {
    if (this.getNthFieldName(i).indexOf(“question.”)==0) {this.getField(“question.”+i).fillColor = color.red;}
    }
    }

    }

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Propriété d’un champ #73951
    michel c.
    Participant

    Merci beaucoup.

    Encore une petite question : comment modifier cette ligne :

    for (var i=0; i<this.numFields; i++) { // numFields = Nombre de champs dans le document

    Pour obtenir le nombre de champs dont le préfixe (les 3 premiers caractères) serait par exemple “ABC”

     

    Merci

    en réponse à : Propriété d’un champ #73946
    michel c.
    Participant

    Super, merci beaucoup.

    Je suis en train de me faire un document avec des petits bouts de codes comme celui-ci qui me bloquent souvent.

    Je m’aperçois que je reste cantonné à ce que je maîtrise et du coup je progresse peu.

    Dans cette ligne, je ne comprend pas bien la condition: if (this.getNthFieldName(i).indexOf("question.")==0) indMax++;

    On incrémente la valeur indMax si …. et je ne comprend pas la suite….

    • Cette réponse a été modifiée le il y a 7 mois et 1 semaine par michel c..
    en réponse à : Propriété d’un champ #73943
    michel c.
    Participant

    Je vais apporter une modification à ce document (la modif ne concerne pas le script que tu propose mais un autre que je vais faire pour apporter une fonctionnalité supplémentaire) et il y a un truc que je n’arrive pas à faire.

    Dans le document il y a les champs nommés question.0 à question.9 et la même chose pour les champs réponses.

    Mais il pourrait y avoir plus ou moins de champs.

    J’aimerais faire une boucle for mais avant j’aimerais intégrer dans une variable l’indice le plus élevé de ces champs.

    for (var a=0 ; a<=indMax ; a++) ….

    Comment faire pour avoir l’indice max?

    J’espère que ma question est assez claire?

    Merci

    • Cette réponse a été modifiée le il y a 7 mois et 1 semaine par michel c..
    en réponse à : Propriété d’un champ #73937
    michel c.
    Participant

    Je vais étudier ce script, j’ai fais beaucoup de recherches sur la fonction Rect pour apprendre comment spécifier les dimensions d’un champ sans comprendre pour le moment.

    Je vais revenir poster quelques questions une fois que j’aurais cherché déjà à comprendre par moi-même.

    En tout cas merci beaucoup pour ce script, tu n’imagines pas le temps que cela va me faire gagner pour l’édition de mes documents.

    en réponse à : Propriété d’un champ #73926
    michel c.
    Participant

    Si les champs du dessus on trop de lignes, ceux du bas sont supprimés.

    C’est pour me permettre de gagner du temps lors de la mise en page de documents qui sont standards. Supprimer des champs est rapide, par contre positionner en y des champs, les dimensionner pour optimiser l’espace entre les champs est assez long.

    J’ai déjà réussi à faire en sorte de mettre un champ en monoligne ou multiligne en fonction du nombre de lignes spécifié dans la liste déroulante en vis à vis.

    Demain j’essayerai de dimensionner les champs en fonction du nombre de ligne spécifié dans la liste déroulante.

    • Cette réponse a été modifiée le il y a 7 mois et 2 semaines par michel c..
    • Cette réponse a été modifiée le il y a 7 mois et 2 semaines par michel c..
    • Cette réponse a été modifiée le il y a 7 mois et 2 semaines par michel c..
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Propriété d’un champ #73920
    michel c.
    Participant

    Je vais chercher de mon côté, l’algorithme commence à  s’organiser dans ma tête.

    Je remet ici la pièce jointe, je viens de faire une petite modif sur le fichier.

    • Cette réponse a été modifiée le il y a 7 mois et 2 semaines par michel c..
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Propriété d’un champ #73917
    michel c.
    Participant

    Sinon, j’ai une autre solution pour arriver à mes fins c’est de mettre en vis à vis de chaque champ texte une liste déroulante dans laquelle je spécifierais le nombre de lignes que je veux dans mon champ. Si ça ne rentre pas, je met une ligne supplémentaire.

    L’idée c’est de créer un fichier de base qui me permet de créer plus rapidement un document avec question (champ jaune) et réponse en dessous (champ vert)

    Pour arriver à coder cette partie, j’ai besoin de connaître le bout de code qui permet d’indiquer si c’est mono-ligne ou multi-ligne et le bout de code pour donner la hauteur de ligne.

    Je vais chercher un peu mais je pense y arriver.

    Ensuite la partie plus complexe sera de décaler automatiquement les champs en dessous en fonction de la hauteur du champ au dessus. Mais je verrai ça dans un 2ème temps. Je pense qu’en connaissant le bout de code permettant d’indiquer la position en y d’un champ j’y arriverai aussi.

     

    en réponse à : Propriété d’un champ #73914
    michel c.
    Participant

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

    Concernant le boulot que tu as fait, je rejoins Merlin, même si je n’arrive pas à me rendre compte de la difficulté. Il y a tant de choses que je ne maitrise pas dans ce code….

Affichage de 99 réponses de 1 à 99 (sur un total de 372)