Toutes mes réponses sur les forums
-
AuteurRéponses
-
michel c.
ParticipantBonjour, je n’ai absolument pas les compétences en javascript pour y arriver. Je me demandais si quelque chose de ce genre existait.
Je cherche également des solutions intermédiaires comme passer par un autre logiciel dans lequel je pourrais faire mes dessins puis les copier / coller.
Mais ou chaque élément peut être déplacé et modifié.
J’y arrive avec inkscape mais sans pouvoir changer la couleur ni l’épaisseur des traits après avoir copié/collé
Ps : très impressionnant la montre
-
Cette réponse a été modifiée le il y a 8 mois et 2 semaines par
michel c..
michel c.
ParticipantMerci, je me suis servi de ton code pour me faire un document qui me sera utile.
Attachments:
You must be logged in to view attached files.michel c.
ParticipantBonjour, je veux uniquement modifier les caractères accentués.
Je ne savais pas du tout que l’on pouvait faire ça via la console….
Merci
michel c.
ParticipantUne question en passant : pour coder cette phrase ainsi :
"Voulez vous vraiment supprimer le contenu de tous les champs de
donn\u00E9es et revenir \u00E0 l'\u00E9tat initial du document
?\n\nCette action ne pourra pas \u00EAtre annul\u00E9e.\nSi besoin
utilisez : menu Fichier : R\u00E9tablir"
tu as un outil ou un lien qui te permet de faire ça rapidement ou tu connais par coeur l’unicode pour les caractères é ê ; à … et tu glisse ces codes au milieu des mots?
Jusqu’à présent je mettais toute la phrase en unicode mais c’est plus compréhensible comme ça en relisant la phrase.
michel c.
ParticipantMerci !
michel c.
ParticipantPour mon 2ème souci, j’ai trouvé une façon détournée de résoudre ce problème.
Obliger l’utilisateur à cliquer sur démarrer pour faire apparaître la première partie :
Tant que l’utilisateur ne clique pas sur le bouton, Aucune question ne s’affiche…
S’il clique sur le bouton, une réinitialisation s’opère avec de nouvelles variables.
Par contre j’ai un autre souci, en cliquant sur ce bouton la boite de dialogue s’affiche pour demander confirmation.
J’aimerais que si l’utilisateur répond Non, l’exécution du script s’arrête
if (cResponse != "Oui") {app.alert("Opération annulée.");
<strong>commande pour stopper l'exécution du script</strong>
}
Merci
-
Cette réponse a été modifiée le il y a 8 mois et 2 semaines par
michel c..
Attachments:
You must be logged in to view attached files.michel c.
ParticipantMerci, je ne savais pas pour else if
michel c.
ParticipantMerci pour les réponses.
@BB : J’ai modifié mon script Default ainsifunction Default() {
for (var i=0; i<this.numFields; i++) {
var nomChamp=this.getNthFieldName(i);
//console.println(i+" - nomChamp : "+nomChamp+" - "+(this.getField(nomChamp).page+1)+" - "+this.getField(nomChamp).type);
if (nomChamp.indexOf("R.")==0) {
if (this.getField(nomChamp).type=="text") this.getField(nomChamp).defaultValue=this.getField(nomChamp).value;
if ((this.getField(nomChamp).type=="checkbox" || this.getField(nomChamp).type=="radiobutton")) this.getField(nomChamp).defaultValue=this.getField(nomChamp).value;
}
if (nomChamp.indexOf("Q.")==0) {
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";
if (this.getField(nomChamp).type=="combobox") {this.getField(nomChamp).value=this.getField(nomChamp).getItemAt(0,false);}
}
if (nomChamp.indexOf("Titre.")==0) {this.getField(nomChamp).defaultValue=this.getField(nomChamp).value;}
if (nomChamp.indexOf("TQ.")==0) {this.getField(nomChamp).defaultValue=this.getField(nomChamp).value;}
if (nomChamp.indexOf("Question.")==0) {this.getField(nomChamp).defaultValue=this.getField(nomChamp).value;}
if (nomChamp.indexOf("Aide." && this.getField(nomChamp).type=="text")==0) {this.getField(nomChamp).defaultValue=this.getField(nomChamp).value;}
if (nomChamp.indexOf("TL.")==0 && this.getField(nomChamp).type=="text") {this.getField(nomChamp).defaultValue="";}
if (nomChamp.indexOf("Menu.")==0) {
this.getField("Menu.3").fillColor=color.green;
this.getField("Menu.4").fillColor=color.green;
if (this.getField(nomChamp).type=="text") this.getField(nomChamp).defaultValue=this.getField(nomChamp).value;
if ((this.getField(nomChamp).type=="checkbox" || this.getField(nomChamp).type=="radiobutton")) this.getField(nomChamp).value="Off";
}
}}
Dans la 1ère condition (ligne 7 à 10) et pour la dernière (ligne 25 à 30) je ne sais pas comment écrire : si le champ est de type combobox alors la valeur par defaut sera la valeur sélectionnée dans la combobox.
Pour le reste, je crois avoir compris ce qui pose problème, je pense que ça fonctionne. Le fichier est en pj
@ Merlin :
J’ai renomé la fonction random → hasard
J’ai crée un formulaire avec uniquement ces 2 scripts pour que ce ne soit pas pollué par d’autres scripts de mon pdf qui en contient énormément et j’ai toujours le même problème :
cela fonctionne quand j’appele la fonction via le script du bouton démarrer
mais ça ne fonctionne plus quand j’apelle la fonction par la commande aleatoir(); (bouton Aleatoir)
Fichier (aleatoir) en piece jointe
Attachments:
You must be logged in to view attached files.michel c.
ParticipantJ’ai corrigé mon script Default mais ça ne fonctionne toujours pas.
J’ai crée un un bouton qui appele simplement la fonction aleatoir et ça ne fonctionne pas non plus.
Lorsque le code :
for (var i=1; i<=30; i++) {
try {
random (i);
} catch(e) {
this.getField("Var."+i+".3").value="";
}
}
est affecté au bouton, ça fonctionne (Bouton Demarrer) mais lorsque ce même code est en action de document, et que j’appele cette fonction ça ne marche plus (bouton aleatoir)
Merci
Attachments:
You must be logged in to view attached files.michel c.
ParticipantBonjour, je viens de tester en ajoutant le script aleatoir en script de document et en appelant ce script à la 3ème ligne de mon script Raz.
Lorsque je clique sur le bouton Raz (en bas à gauche) je n’ai aucune erreur à la console mais les variables angle et AB ne sont pas affectées par de nouvelles valeurs.
Alors que lorsque je clique sur le bouton demarrer, auquel j’ai affecté la fonction random, de nouvelles valeurs pour les variables sont générées.
Merci
Attachments:
You must be logged in to view attached files.michel c.
ParticipantC’est magique !
Merci
michel c.
ParticipantBonjour, cela ne fonctionne toujours pas. Le point d’interrogation entre crochet ne fonctionne plus non plus, cela provoque une erreur à la console.
Je n’ai aucun souci pour passer par de l’unicode mais je pense que mes collègues à qui je vais fournir ce fichier risquent de trouver ça compliqué… Sauf s’ils n’ont pas comme moi des réponses attendues entre parenthèses ou entre crochets ou encore un point d’interrogation.
-
Cette réponse a été modifiée le il y a 8 mois et 3 semaines par
michel c..
Attachments:
You must be logged in to view attached files.michel c.
ParticipantJe suis en train petit à petit de voir quels caractères posent problème dans les champs R.a.b pour savoir si c’est gênant :
Les parenthèses : erreur à la console et arrêt du script
Le crochet [ : erreur à la console et arrêt du script
Le crochet ] : n’a pas l’air de poser problèmeSi la réponse dans le champ R.a.b est écrite entre parenthèses ; entre {} ; entre [] , la réponse saisie dans le champ Q.a.b ne sera pas acceptée même si elle est correcte
même si c’est la même que celle contenue dans le champ Q.a.bLes caractères accentués ne semblent pas poser problème
Dans ma matière les réponses attendues sont parfois entre parenthèses ou accolades.
Je sais que j’ai l’option de l’unicode.
Sinon j’ai une possibilité d’apporter une petite modif à mon script. Il me manque une info pour cela :
Comment coder :
- si le caractère | est présent dans la valeur du champ R.a.b
- si le caractère | est absent dans la valeur du champ R.a.b
Je pensais à cela :
var regex = /(|)/g
if (regex .test(this.getField("R."+n+"."+a).value)) {......}
else {.....}
Mais sans grande conviction
Mon idée c’est que si le caractère | est absent cela veut dire qu’il n’y a qu’une seule réponse attendue et dans ce cas je compare les valeurs des champs Q.a.b et R.a.b de façon simple et dans ce cas je peux m’autoriser certains caractères
Si le caractère | est présent alors j’exécute ce code :
for (var k=0; k<rep.length; k++) {
var RegExTest=new RegExp(« ^ »+rep[k]+ »$ »);
if (RegExTest.test(this.getField(« Q. »+n+ ». »+a).value)) {…}}Pour comparer mes champs Q.a.b et R.a.b et dans ce cas, j’utiliserai l’unicode si je souhaite inclure ces caractères…
Merci
Attachments:
You must be logged in to view attached files.michel c.
ParticipantParfois je suis obligé de passer par l’unicode…
Dans un autre formulaire je dois saisir
\u0064\u0072\u006f\u0069\u0074\u0065\u0020\u0046\u0028\u0078\u0029
au lieu de droite P'(x) dans un champ R.a.bça complique un peu les choses mais je suppose qu’il n’y a pas d’autre solution…
michel c.
ParticipantBonjour, et merci pour les réponses
Ce n’est pas cette question qui pose problème.
C’est la vérification à la page 3 par le bouton vérifier.3.0
@ Merlin : Effectivement si je saisis « \u003F » dans le champ R.3.24 cela ne pose plus de problème.
Cependant, je compte partager une base de ce formulaire pour que chaque prof puisse créer facilement des pdf « interactifs ». Leur demander de saisir de l’unicode me parait un peu délicat.
N’y a-t-il pas une autre solution?
Merci
michel c.
ParticipantJe n’avais pas vu qu’il y avait une action associée au bouton. C’est pour cela que je n’arrivais pas à intégrer ton script dans mon document…
Merci
michel c.
ParticipantJe viens de tester ceci :
function random () {
function getRandomIntInclusive(min,max,dec) { return Math.round((Math.random()*(max-min)+min)*Math.pow(10,dec))/Math.pow(10,dec);}
for (var i=1 ; i<31 ; i++) {
if (this.getField("Dec."+i).value == "") this.getField("Dec."+i).value = 0;
if (this.getField("Var."+i+".0").value == "") this.getField("Var."+i+".0").value = "Var."+i;
if (this.getField("Var."+i+".1").value == "") this.getField("Var."+i+".1").value = 0;
if (this.getField("Var."+i+".2").value == "") this.getField("Var."+i+".2").value = this.getField("Var."+i+".1").value+50;
if (this.getField("Var."+i+".2").value <= this.getField("Var."+i+".1").value) app.alert("La valeur maxi de la variable "+this.getField("Var."+i+".0").value+" doit être supérieure à la valeur mini");
else this.getField("Var."+i+".3").value=getRandomIntInclusive(this.getField("Var."+i+".1").value,this.getField("Var."+i+".2").value,this.getField("Dec."+i).value);}
}
ça fonctionne mais c’est un pis aller. C’est un peu bête de créer toutes ces variables si je n’en ai pas besoin. Je n’arrive pas encore à faire en sorte que ce script ne s’exécute que pour les variables demandées…
-
Cette réponse a été modifiée le il y a 9 mois par
michel c..
-
Cette réponse a été modifiée le il y a 9 mois par
michel c..
Attachments:
You must be logged in to view attached files.michel c.
ParticipantBonjour, je bloque sur l’adaptation de ce script et d’un autre.
Je souhaite qu’a l’exécution du script random() chaque champ Var.i.3 soit affecté d’une valeur aléatoire comprise entre les valeurs min et max et avec le nombre de décimales indiqué par le champ Dec.i
Je voudrais que le script ne s’exécute pas si le champ Var.i.0 ou le champ Var.i.1 ou le champ Var.i.2 est vide
Le script Variables quand à lui va créer les variables ayant comme nom les textes saisis dans les champs Var.i.0 et comme valeurs les valeurs aléatoires générées précédemment.
Il me semble que c’est le script random qui bloque et me cause des erreurs.
Je cherche mais j’avoue que j’ai un peu de mal à trouver.
Merci
-
Cette réponse a été modifiée le il y a 9 mois par
michel c..
Attachments:
You must be logged in to view attached files.michel c.
ParticipantMerci beaucoup !
michel c.
ParticipantMerci beaucoup, j’avance…
J’aimerais maintenant que pour chaque variable (E et F) , au lieu d’avoir « la chaine de caractère comme valeur » j’ai le contenu des champs Var.1.3 pour la variable E et Var.2.3 pour la variable F
Merci
Merci
-
Cette réponse a été modifiée le il y a 9 mois par
michel c..
Attachments:
You must be logged in to view attached files.michel c.
ParticipantMerci mais je ne suis pas sur d’avoir compris. Ce que je dois mettre à la place de « la chaîne de caractères »
Et pour la suite, je ne vois pas trop ce que je pourrais faire pour exploiter ces variables.
Dans mon document, je souhaite que dans le champs calcul, la somme des variables E et F soit calculée.
Le nom de ces variables serait la valeur des champs Var.1.0 et Var.2.0 et les valeurs de ces variables seraient respectivement les
valeurs des champs Var.1.3 et Var.2.3
Autre question : si je déclare ces variables par var, celles ci ne sont déclarées que dans le script de document ou dans tout le document?
Merci
Attachments:
You must be logged in to view attached files.michel c.
ParticipantMerci beaucoup.
michel c.
ParticipantOui je l’ai déjà fait plusieurs fois mais là ça ne marche pas….
voir document joint
Attachments:
You must be logged in to view attached files.michel c.
ParticipantJe n’arrive pas à faire tourner ce script en script de document…
Attachments:
You must be logged in to view attached files.michel c.
ParticipantMerci beaucoup, ça fonctionne à merveille.
Je voulais savoir s’il était possible de placer ce script en script de document? J’aimerais que l’action puisse être déclenchée par autre chose qu’un bouton
Merci
michel c.
ParticipantJ’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);}
michel c.
ParticipantMerci 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 9 mois et 3 semaines par
michel c..
-
Cette réponse a été modifiée le il y a 9 mois et 3 semaines par
michel c..
Attachments:
You must be logged in to view attached files.michel c.
ParticipantMerci 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.michel c.
ParticipantJ’en apprend tous les jours. je n’avais jamais vu le point d’exclamation placé avant….
Merci
michel c.
Participantmerci. ça fonctionne
michel c.
ParticipantTu 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.
michel c.
ParticipantJe 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 10 mois et 2 semaines par
michel c..
-
Cette réponse a été modifiée le il y a 10 mois et 2 semaines par
michel c..
Attachments:
You must be logged in to view attached files.michel c.
ParticipantJe 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.michel c.
ParticipantJ’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.michel c.
ParticipantUn 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 10 mois et 2 semaines par
michel c..
-
Cette réponse a été modifiée le il y a 10 mois et 2 semaines par
michel c..
-
Cette réponse a été modifiée le il y a 10 mois et 2 semaines par
michel c..
Attachments:
You must be logged in to view attached files.michel c.
ParticipantMerci, 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 10 mois et 2 semaines par
michel c..
Attachments:
You must be logged in to view attached files.michel c.
ParticipantDans 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 10 mois et 2 semaines par
michel c..
-
Cette réponse a été modifiée le il y a 10 mois et 2 semaines par
michel c..
Attachments:
You must be logged in to view attached files.michel c.
ParticipantMerci 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 10 mois et 2 semaines par
michel c..
michel c.
ParticipantMerci 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…
michel c.
ParticipantMerci 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.michel c.
ParticipantLe 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.michel c.
ParticipantC’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 12 mois par
michel c..
michel c.
ParticipantFait 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 12 mois par
michel c..
-
Cette réponse a été modifiée le il y a 12 mois par
michel c..
-
Cette réponse a été modifiée le il y a 12 mois par
michel c..
-
Cette réponse a été modifiée le il y a 12 mois par
michel c..
-
Cette réponse a été modifiée le il y a 12 mois par
michel c..
-
Cette réponse a été modifiée le il y a 12 mois par
michel c..
Attachments:
You must be logged in to view attached files.michel c.
Participantmichel c.
ParticipantBonjour et merci.
Il y avait une erreur à la ligne 31 :
Doc:Open:37: ReferenceError: valeurListe is not defined
j’ai misvar valeurListe=listeChamps
à la place devaleurListe=listeChamps
idem à la ligne 80 :
var debutChamp=nomListe;
au lieu dedebutChamp=nomListe
mais cette fois l’erreur est toujours là…Attachments:
You must be logged in to view attached files.michel c.
ParticipantNon. Ce n’est pas la peine.
michel c.
ParticipantBonjour, effectivement je n’ai pas cette fonctionnalité….
michel c.
ParticipantBonjour, 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?
michel c.
ParticipantMerci !
michel c.
ParticipantMerci beaucoup !!!
michel c.
ParticipantJ’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.1Je vais me pencher là dessus.
Merci beaucoup en tout cas pour ce script !
michel c.
ParticipantBonjour, 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 1 année par
michel c..
Attachments:
You must be logged in to view attached files.michel c.
ParticipantPour 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
}
michel c.
ParticipantJ’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…
michel c.
ParticipantBonjour, 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.michel c.
ParticipantBonjour, 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 1 année par
michel c..
michel c.
ParticipantTout est nickel.
Merci
michel c.
ParticipantMerci, 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 1 année par
michel c..
Attachments:
You must be logged in to view attached files.michel c.
ParticipantLa 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.
michel c.
ParticipantBonjour 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 1 année par
michel c..
Attachments:
You must be logged in to view attached files.michel c.
ParticipantSalut, vois si ça te convient.
Bonne soirée
Attachments:
You must be logged in to view attached files.michel c.
ParticipantSinon ta proposition précédente me va très bien.
michel c.
ParticipantMerci 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.michel c.
ParticipantMerci, c’est parfait
michel c.
ParticipantMerci 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.
michel c.
ParticipantMerci, 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
michel c.
ParticipantBonjour, 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.
michel c.
ParticipantMerci, 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.
michel c.
ParticipantJe 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 der.value.split
-
Cette réponse a été modifiée le il y a 1 année par
michel c..
-
Cette réponse a été modifiée le il y a 1 année par
michel c..
-
Cette réponse a été modifiée le il y a 1 année par
michel c..
-
Cette réponse a été modifiée le il y a 1 année par
michel c..
Attachments:
You must be logged in to view attached files.michel c.
ParticipantPar 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 1 année par
michel c..
Attachments:
You must be logged in to view attached files.michel c.
ParticipantJ’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.michel c.
ParticipantBonjour 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.michel c.
ParticipantBonjour, 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.michel c.
ParticipantJ’ai réussi à cocher/décocher toutes les checkboxes de la série…
Attachments:
You must be logged in to view attached files.michel c.
ParticipantMerci 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 1 année par
michel c..
-
Cette réponse a été modifiée le il y a 1 année par
michel c..
Attachments:
You must be logged in to view attached files.michel c.
ParticipantBonjour, 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.michel c.
ParticipantL’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 1 année par
michel c..
michel c.
ParticipantSi c’est plus simple, intervertir les positions et caractéristiques des champs Q.a.b et R.a.b
michel c.
ParticipantCa 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 LienBonjour, 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.michel c.
ParticipantOui, tout fonctionne super bien .
michel c.
ParticipantBonjour, ça marche parfaitement ! Merci
michel c.
ParticipantJ’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.michel c.
ParticipantBonjour, 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 1 année par
michel c..
Attachments:
You must be logged in to view attached files.michel c.
ParticipantParfait comme toujours !
Merci beaucoup
michel c.
ParticipantOui, 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));
}
michel c.
ParticipantBonjour, 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.michel c.
ParticipantCa 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
-
Cette réponse a été modifiée le il y a 1 année et 1 mois par
michel c..
michel c.
ParticipantJ’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…
michel c.
ParticipantMerci ! ça marche. C’est top
-
Cette réponse a été modifiée le il y a 1 année et 1 mois par
michel c..
-
Cette réponse a été modifiée le il y a 1 année et 1 mois par
michel c..
-
Cette réponse a été modifiée le il y a 1 année et 1 mois par
michel c..
Attachments:
You must be logged in to view attached files.michel c.
ParticipantBonjour, 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
michel c.
ParticipantBon, en tout cas j’ai un formulaire qui fonctionne en grande partie grâce à vous. Merci beaucoup
michel c.
ParticipantEt 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 1 année et 1 mois par
michel c..
-
Cette réponse a été modifiée le il y a 1 année et 1 mois par
michel c..
-
Cette réponse a été modifiée le il y a 1 année et 1 mois par
michel c..
-
Cette réponse a été modifiée le il y a 1 année et 1 mois par
michel c..
Attachments:
You must be logged in to view attached files.michel c.
ParticipantBonsoir. 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.michel c.
ParticipantJ’avais oublié un champ… Aide.1.1 c’est résolu !
michel c.
ParticipantJ’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 1 année et 1 mois par
michel c..
Attachments:
You must be logged in to view attached files.michel c.
ParticipantJ’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 1 année et 1 mois par
michel c..
-
Cette réponse a été modifiée le il y a 1 année et 1 mois par
michel c..
Attachments:
You must be logged in to view attached files.michel c.
ParticipantJ’ai trouvé !
michel c.
ParticipantMerci 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 1 année et 1 mois par
michel c..
Attachments:
You must be logged in to view attached files. -
Cette réponse a été modifiée le il y a 8 mois et 2 semaines par
-
AuteurRéponses