abracadabraPDF › Forums › PDF – Général › Raz et remplissage automatique
- Ce sujet contient 40 réponses, 3 participants et a été mis à jour pour la dernière fois par
Merlin, le il y a 4 mois et 2 semaines.
-
CréateurSujet
-
8 janvier 2023 à 09:01 #72310
michel c.
ParticipantBonjour, j’ai bien avancé sur un formulaire qui me servira de base pour beaucoup d’autres.
L’idée est qu’il fonctionne quelque soit le nombre de questions, le nombre de réponses pour chaque question et le type de réponse (champ texte ; liste déroulante ou case à cocher)
Il fonctionne bien. Je viens d’ajouter un menu administrateur avec lequel je peux éditer les réponses exactes pour chaque question et d’autres fonctions :
J’aimerais aussi à l’aide du bouton Raz remettre à 0 sans pour autant effacer les champs « R…. » et les champs « Question….. » j’ai mis en place un bouton Default en face de chaque question mais j’aurais préfèrerais que lors de la saisie, la valeur soit d’emblée celle par défaut (je vais potasser dessus mais je crois que je vais y arriver)
L’autre problème auquel je suis confronté c’est que j’aimerais qu’en cliquant sur le bouton Corriger dans le menu admin, toutes les bonnes réponses s’affichent et toutes les mauvaises s’effacent pour chaque champ « Q…. » or ces champs sont de type différents (texte ; liste déroulante ; checkbox …) et je ne vois pas trop comment faire. (je peux éventuellement remplacer toutes les listes déroulantes par des Checkbox si c’est plus simple)
Merci
-
CréateurSujet
-
AuteurRéponses
-
8 janvier 2023 à 19:43 #72311
michel c.
ParticipantPour que la valeur par défaut soit celle saisie, j’ai pensé à mettre en script de calcul ce code :
var a = event.target.name;
this.getField(a).defaultValue = this.getField(a).value;
Qu’en pensez vous ?
9 janvier 2023 à 09:58 #72312michel c.
ParticipantJe rencontre un problème sur un bout de code :
J’ai n questions (nombre variable d’un document à un autre)
et pour chaque qustion j’ai nChamps réponses. → R.n….. (nombre de champs réponse variable d’une question à une autre)
Je voudrais mettre en place un bouton qui me permettrait de masquer tous les champs réponses pour chaque question
J’ai fait ceci en me servant des derniers éléments que je commence à comprendre grâce à vous mais ça ne fonctionne pas.
for (var b=1 ; b<=3 ; b++) {this.getField("Menu."+b).display=display.hidden;}
var nbChRep=0;
var nbQestions=0;
for (var i=0; i<this.numFields; i++) {
if (this.getNthFieldName(i).indexOf("Question.")==0) nbQestions++;
}
console.println("Nombre de questions : "+nbQestions);
for (var a=1; a<=nbQestions; a++) {for (var i=0; i<this.numFields; i++) {
if (this.getNthFieldName(i).indexOf("R."+a+".")==0) nbChRep++;
for (var b=1; b<=nbChRep; b++) {this.getField("R."+a+"."+b).display=display.hidden;}
}
}
Merci
9 janvier 2023 à 10:49 #72313Merlin
Maître des clésPour que la valeur par défaut soit celle saisie, j’ai pensé à mettre en script de calcul ce code :
var a = event.target.name;
this.getField(a).defaultValue = this.getField(a).value;Qu’en pensez vous ?
event.target.defaultValue = event.target.value;
Typiquement à placer en script de validation.
9 janvier 2023 à 10:52 #72314Merlin
Maître des clésPour la suite il faudrait voir la pièce jointe…
😉
(Upload Errors: 03-ex.4_eleve-test.pdf: File exceeds allowed file size.)
9 janvier 2023 à 11:10 #72315michel c.
ParticipantPardon, voici la pièce jointe (c’est dans le script de document HideAdm)
Je voudrais que celui-ci cache tous les champs qui commencent par « R. »
Pour le script de validation à placer, je me demandais comment utiliser la console pour propulser le même script dans tous les champs qui commencent par « R. »
Merci
-
Cette réponse a été modifiée le il y a 4 mois et 3 semaines par
michel c..
9 janvier 2023 à 12:48 #72317Merlin
Maître des clésComment envoyer/partager/poster une pièce jointe volumineuse :
😎
9 janvier 2023 à 12:58 #72318Merlin
Maître des clés« Pour le script de validation à placer, je me demandais comment utiliser la console pour propulser le même script dans tous les champs qui commencent par « R. » »
Ce serait une mauvaise idée car si jamais tu voulais un jour pouvoir modifier ou supprimer ce script ce serait un enfer.
Place le script en fonction (dans les scripts de document) et appelle la fonction depuis les champs.
Ce script détecte tous les champs texte dont le nom commence par un R en capitale et leur ajoute « MaFonction » en script de validation :
for (var i = 0; i < this.numFields; i++) {
var oFld = this.getField(this.getNthFieldName(i));
if ((oFld.type == "text") && (/\bR.+/.test(oFld.name))) {
oFld.setAction("Validate", "MaFonction();");
}
}
9 janvier 2023 à 13:32 #72319Merlin
Maître des clés« Je voudrais que celui-ci cache tous les champs qui commencent par « R. » »
for (var i = 0; i < this.numFields; i++) {
var oFld = this.getField(this.getNthFieldName(i));
if (/\bR.+/.test(oFld.name)) {
oFld.display = display.hidden;
}
}
9 janvier 2023 à 13:42 #72320Merlin
Maître des clésAttention quand même : cette requête GREP détecte le « R » en début de mot, mais pas forcément en début de nom.
Donc si un nom de champ contient des espaces et un mot commençant par « R » il sera détecté même le mot n’est pas en début de nom.
Par exemple le champ « Loulou Fifi Riri » sera détecté comme positif.
9 janvier 2023 à 14:03 #72321bebarth
Maître des clésbonjour,Attention quand même : cette requête GREP détecte le « R » en début de mot, mais pas forcément en début de nom.
C’est pourquoi il vaut mieux écrire :
...
if (/^R./.test(oFld.name)) {
...
ou
...
if (oFld.name.indexOf("R.")==0) {
...
@+
😎-
Cette réponse a été modifiée le il y a 4 mois et 3 semaines par
bebarth.
9 janvier 2023 à 16:07 #72323michel c.
ParticipantMerci, entre temps j’ai trouvé une autre solution : une check box (Menu.5) qui lorsqu’elle est cochée affiche ou non les champs à éditer.
Pour cela il faut que les champs concernés Aient ce script en action de format :
var a = event.target.name;
console.println(a);
this.getField(a).defaultValue = this.getField(a).value;
Pour que la valeur saisie devienne la valeur par défaut
et ce script en action de calcul :
console.println(event.target.name);
console.println(this.getField("Menu.5").value);
if (this.getField("Menu.5").value == 1) {this.getField(event.target.name).display = display.visible;}
if (this.getField("Menu.5").value != 1) {this.getField(event.target.name).display = display.hidden;}
Pour que ces champs puissent soient visibles ou cachés.
Je ne sais pas si cette méthode est valable (je vais les placer en script de document comme vous me l’avez suggéré.
J’ai fait cela que sur la 1ère page.
Je n’arrive pas encore à faire fonctionner les scripts proposés. Je vais réessayer
-
Cette réponse a été modifiée le il y a 4 mois et 3 semaines par
michel c..
9 janvier 2023 à 17:14 #72325michel c.
ParticipantJ’avance doucement, il y a encore 2 ou trois petites choses que je n’arrive pas à faire :
- Cacher ou masquer les checkBox (R7.1 à R7.5) avec le script EditReps
- Définir la valeur par defaut des mêmes checkboxes avec le script Default
- Remettre à 0 les liste déroulantes avec le bouton Raz (ça je crois savoir comment m’y prendre)
- Remettre en position readonly true tous les champs de réponses après avoir cliqué sur le bouton Raz (là je crois savoir aussi)
- Corriger automatiquement le document après clic sur le bouton Corriger (là pas sûr que je sache)
Merci pour votre aide en tout cas
9 janvier 2023 à 19:36 #72326Merlin
Maître des clés« Cacher ou masquer les checkBox (R7.1 à R7.5) avec le script EditReps »
this.getField("R7").display = display.hidden;
9 janvier 2023 à 19:40 #72327Merlin
Maître des clés« Définir la valeur par defaut des mêmes checkboxes avec le script Default »
for (var i = 1 ; i<6 ; i++) {this.getField("R7." +i).defaultValue = this.getField("R7." +i).value;}
9 janvier 2023 à 19:41 #72328michel c.
ParticipantOui, mai je cherche un script qui fonctionne quelque soit le numéro de champ R…
Dans ce document les checkbox sont les champs R7….. mais dans un autre document ce sera peut être les champs R2….. et R8…..
L’idée serai d’avoir des scripts qui fonctionnent sans que je les modifie pour gagner du temps ensuite lorsque je crée d’autres documents.
9 janvier 2023 à 19:48 #72329Merlin
Maître des clés« Cacher ou masquer les checkBox (R7.1 à R7.5) avec le script EditReps »
« Oui, mai je cherche un script qui fonctionne quelque soit le numéro de champ R… »Dans ce cas, si on suppose par exemple que le nombre maximal est de 100 :
for (var i = 1 ; i<101 ; i++) {
if (this.getField("R" +i) != null) {this.getField("R" +i).display = display.hidden;}
}
9 janvier 2023 à 20:06 #72330Merlin
Maître des clés« Remettre à 0 les liste déroulantes avec le bouton Raz »
for (var i = 0; i < this.numFields; i++) {
var oFld = this.getField(this.getNthFieldName(i));
if (oFld.type == "combobox") {oFld.value = oFld.defaultValue;}
}
9 janvier 2023 à 20:50 #72334michel c.
ParticipantMerlin wrote:
« Cacher ou masquer les checkBox (R7.1 à R7.5) avec le script EditReps »« Oui, mai je cherche un script qui fonctionne quelque soit le numéro de champ R… » Dans ce cas, si on suppose par exemple que le nombre maximal est de 100 : for (var i = 1 ; i<101 ; i++) {if (this.getField("R" +i) != null) {this.getField("R" +i).display = display.hidden;}}
Ça marche parfaitement ! Merci
J’ai essayé de m’en inspirer pour définir par defaut les Checkbox cochées avec ceci Dans le script Default :for (var i = 1 ; i<101 ; i++) {this.getField("R" +i).defaultValue = this.getField("R" +i).value;}
Mais j’ai une erreur :
Doc:Open:7: TypeError: this.getField(...) is null
Lorsque je coche ou décoche une checkbox R…
Merlin wrote:
« Remettre à 0 les liste déroulantes avec le bouton Raz » for (var i = 0; i < this.numFields; i++) {var oFld = this.getField(this.getNthFieldName(i));if (oFld.type == "combobox") {oFld.value = oFld.defaultValue;}}
Pour celui-ci ça marche mais la console me renvoie une erreur :
Field:Mouse Up:5: InvalidSetError: InvalidSetError: A property set is not valid or possible.
Field.[52]:5:Field:Mouse Up
Voici le dernier fichier avec les modifications de Merlin : LIEN-
Cette réponse a été modifiée le il y a 4 mois et 3 semaines par
michel c..
10 janvier 2023 à 14:22 #72346Merlin
Maître des clés« J’ai essayé de m’en inspirer pour définir par defaut les Checkbox cochées avec ceci Dans le script Default :
for (var i = 1 ; i<101 ; i++) {this.getField(« R » +i).defaultValue = this.getField(« R » +i).value;}Mais j’ai une erreur : Doc:Open:7: TypeError: this.getField(…) is nullLorsque je coche ou décoche une checkbox R… »
Oui pardon, pour le coup comme on s’adresse à un champ parent on ne peut pas utiliser « value = defaultValue », il faut utiliser « resetForm ». J’ai testé ça fonctionne :
for (var i = 1 ; i<100 ; i++) {
if (this.getField("R" +i) != null) {this.resetForm("R" +i);}
}
10 janvier 2023 à 14:30 #72347Merlin
Maître des clés« « Remettre à 0 les liste déroulantes avec le bouton Raz…
Pour celui-ci ça marche mais la console me renvoie une erreur : »
Je suppose que c’est le même problème que ci-dessus, j’ai testé ça fonctionne correctement avec « resetForm » :
for (var i = 0; i < this.numFields; i++) {
var oFld = this.getField(this.getNthFieldName(i));
if (oFld.type == "combobox") {this.resetForm(oFld.name);}
}
11 janvier 2023 à 09:42 #72350michel c.
ParticipantMerci pour le temps que tu passes pour m’aider avec ce qui ressemble de plus en plus à une usine à gaz (mais je commence à être habitué).
J’ai essayé ce que tu propose mais cela ne fonctionne pas mais peut être que je n’étais pas très clair pour expliquer ce que je veux faire.
- Mon document comporte des Titres, sous titres, textes divers à la page 1. Ceux-ci seront toujours visibles et non modifiables par l’élève.(1)
- Il y a les intitulés des questions (champs Question1 ; Question2 ….) et parfois des détails pour certaines questions (champs Question3.1 ; Question3.2 …) → Seule la question 1 sera toujours visible (mais non modifiable par l’élève)
- Les champs Q1.2 ; Q1.2 Q2.1 … sont les champs que l’élève va utiliser pour répondre. Seuls les champs Q1… sont toujours visibles pour l’élève (2)
- Lorsque l’élève répond, à une question, après avoir cliqué sur vérifier, les réponses fausses apparaissent en rouge et tous les champs réponses passent en readonly true. Il clique ensuite sur recommencer et les champs réponses se déverrouillent et s’affichent en blanc
- Si toutes les réponses sont exactes, alors la question suivante s’affiche (par exemple après la question 2 ; les champs Question.3 ; Question3.1 à QUestion3.4 et les champs réponses Q3.1 à Q3.4)
- Le menu administrateur permet l’édition des question des titres, des champs de réponses justes (R…) (1)
- Les champs de « réponses juste » (R…) mettent les valeurs saisies dans les champs comme valeur par default (action de format → script Default) (3)
- Le menu administrateur permet aussi la remise à 0 du formulaire en effaçant tous les champs réponses et en masquant toutes les questions sauf la 1ère (2)
- Il permet aussi d’afficher le corrigé de tout le document (très utile car le document élève et le corrigé ne font qu’un) (4)
Et pour corser le tout, ce document me servira de base pour en faire d’autres et doit fonctionner quelque soit le nombre de questions et le nombre de champs réponses par question et le type de champ réponse….
En vert ce que j’ai déjà réussi à faire
En Orange ce qui ne fonctionne pas tout à fait
En rouge ce que je n’ai pas fait ou ce qui ne fonctionne pas du tout.
(1) Pour y arriver il faudrait que je filtre les noms de champs avec le texte situé avant le point→ ainsi les champs nommés Titre seront toujours en lecture seule et les champs commençant par Q ou par R seront modifiables si la croix est cochée. J’ai fait plusieurs essais pour le script EditReps. Je l’ai effacé car j’avais un truc extrêmement compliqué et qui ne fonctionnait pas.
(2) Je ne vois pas trop comment faire pour qu’en cliquant sur Raz seule la question 1 soit visible
(3) ça ne fonctionne pas pour les checkbox
(4) Je ne me suis pas encore penché dessus
Merci encore pour toute votre aide.
-
Cette réponse a été modifiée le il y a 4 mois et 3 semaines par
michel c..
11 janvier 2023 à 10:42 #72353Merlin
Maître des clés» (2) Je ne vois pas trop comment faire pour qu’en cliquant sur Raz seule la question 1 soit visible »
Ça c’est le plus facile, il faut masquer tous les champs Question, par exemple en se basant sur leurs noms, et ensuite ré-afficher la question 1.
Exemple :
for (var i = 1 ; i<101 ; i++) {
if (this.getField("Q" +i) != null) {this.getField("Q" +i).display = display.hidden;}
}
this.getField("Q1").display = display.visible;
Pour le reste je répondrai plus tard.
La dernière version de ton document est inutilisable avec Acrobat, au début on voit des éléments s’afficher séquentiellement et ensuite il n’en fini plus de mouliner jusqu’à ce que je le force à quitter/Fin de tâche.
J’ai un faible pour les usines à gaz et les problématiques inhabituelles, et j’ai aussi un faible pour les gens qui se décarcassent pour créer un outil à leur main plutôt que d’attendre en pleurnichant que ça tombe du ciel.
11 janvier 2023 à 12:30 #72354michel c.
ParticipantMerci, j’ai mis ce script en modifiant 2 ou trois petites choses dans la fonction Raz.
ça fonctionne à 2 détails près : après avoir cliqué sur Raz, le champ R1.2 affiche la valeur 5 (alors que celle-ci ne figure pas dans la liste déroulante), certains champs s’affichent toujours et certaines listes ne sont pas effacées de leurs valeurs.
Je vais me pencher dessus.
11 janvier 2023 à 17:33 #72357michel c.
ParticipantJ’ai une petite idée pour résoudre pas mal de petits trucs mais il me manque un bout de code.
Je sais que le code
event.target.name.substr(4))
affiche le nom du champ cible après avoir retiré les 4 1ers caractères mais je me demandais si l’on pouvait extraire des caractères situés au milieu du nom du champ.Par exemple si je veux extraire le chiffre compris entre les 2 points d’un champ qui se nommerait
R.5.3
(ici le chiffre 5) mais il faudrait que ça fonctionne pour le cas d’un nombre à 2 chiffres commeR.12.10
(pour extraire le nombre 12)Pour solutionner les valeurs par défaut que je souhaite définir sur les checkbox dès qu’elles sont cochées ou décochées, j’ai testé ceci :
function Default() {
var a = event.target.name;
if (this.getField(a).type == "checkbox") {
if (this.getField(a).value == "yes") {this.getField(a).defaultValue = "yes";}
if (this.getField(a).value == "no") {this.getField(a).defaultValue = "no";}
}
if (this.getField(a).type != "checkbox") {this.getField(a).defaultValue = this.getField(a).value;}
for (var i = 0; i < this.numFields; i++) {
var oFld = this.getField(this.getNthFieldName(i));
if (oFld.type == "combobox") {this.resetForm(oFld.name);}
}
}
Je n’ai pas de message d’erreur mais ça ne marche pas…
Merci
11 janvier 2023 à 20:50 #72365bebarth
Maître des clésbonjour,Par exemple si je veux extraire le chiffre compris entre les 2 points d’un champ qui se nommerait R.5.3 (ici le chiffre 5) mais il faudrait que ça fonctionne pour le cas d’un nombre à 2 chiffres comme R.12.10 (pour extraire le nombre 12)
Pour celà, il faut prendre la valeur indiquée entre le premier et le dernier point. Essaye ceci :
var nomChamp="R.12.10";
var premierPoint=nomChamp.indexOf(".");
var dernierPoint=nomChamp.lastIndexOf(".");
var indice=nomChamp.substring(premierPoint+1,dernierPoint);
console.println("indice : "+indice);
Ce serait un peu plus compliqué s’il y avait plus de 2 points mais c’est faisable quand même !@+
😎 -
Cette réponse a été modifiée le il y a 4 mois et 3 semaines par
-
AuteurRéponses
- Vous devez être connecté pour répondre à ce sujet.