Toutes mes réponses sur les forums
-
AuteurRéponses
-
michel c.Participant
Je n’osait pas le demander…C’est magique. Tu as même fait en sorte de ne pas re-créer les champs R.a.b s’ils sont déjà présents…
Je n’ai plus qu’à intégrer ça au menu admin. Mais ça je sais faire.
Un grand merci, ça va me faire gagner un temps précieux.
michel c.ParticipantMerci !
ça marche parfaitement
michel c.ParticipantJ’ai régulièrement des messages qui sont supprimés par le site. Peut-être que les liens vers mon site internet ne sont pas acceptés… Je passe par mon site pour poster des fichiers trop lourds. S’il faut passer par un hébergeur, par lequel dois-je passer?
Merci
michel c.ParticipantSinon pour résumer, lorsque je crée mes listes déroulantes Q.a.b (celles que les élèves vont utiliser pour saisir leurs réponses) je dois créer ensuite des listes R.a.b contenant les réponses exactes. Je copie colle les champs Q.a.b et je les renommais ensuite une à une en R.a.b
Lorsque je passe par le fichier renommer_champs_v01.pdf,
les listes sont renommées convenablement mais lorsque je copie-colle les champs R.a.b dans mon exercice interactif, le script de vérification qui compare les valeurs des champs Q.a.b avec R.a.b détecte toutes les réponses comme fausses alors que leurs valeurs sont les mêmes…
Attachments:
You must be logged in to view attached files.michel c.ParticipantC’est curieux, j’ai essayé 2 fois de poster une réponse mais elle n’apparaît pas…A la 3ème tentative, j’ai ce message :
Erreur : réponse identique détectée ; il semble que vous l’ayez déjà dit.
Mais je ne vois pas ma réponse sur le forum.
Sinon, la voici en pièce jointe dans un pdf…
Attachments:
You must be logged in to view attached files.michel c.ParticipantJ’ai un autre souci….
Je compte me servir de ce fichier pour pouvoir créer plus rapidement des cours ou exercices “interactifs”
Grosso modo, j’ai des champs que les élèves doivent remplir. Ces champs sont les champs Q.a.b
Lorsque l’élève clique sur vérifier, la valeur de ces champs sont comparées à des champs R.a.b Si les valeurs sont identiques, alors la réponse est validée.
Jusqu’à présent, lorsque je crée mon document, je crée les champs Q.a.b puis je les copie et je renomme leurs copies une à une Q.a.b sera renommé en R.a.b
L’avantage de ce fichier est d’importer les champs Q.a.b et de les renommer en R.a.b en un seul clic.
Cela fonctionne très bien lorsque les champs sont de type texte, mais lorsqu’il s’agit de menus déroulants, quand je place les fichiers crées par le script, les réponses ne sont plus valides même lorsque les mêmes items ont été choisis pour les champs Q.a.b et R.a.b
J’espère que ce n’est pas trop confus.
Attachments:
You must be logged in to view attached files.michel c.ParticipantMerci, effectivement ton script (test-6_BB.pdf) fonctionne bien mieux, je vais partir de cette base. Avec l’ancien, si les champs étaient de type liste déroulante, ils devenaient des champs textes après exécution du script.
Merci beaucoup.
J’essayerai demain de faire la petite modif que je souhaite
michel c.ParticipantJ’ai parfaitement compris. Mon code fonctionne parfaitement pour l’ajout des nouveaux champs. Par contre, je ne sais pas ou placer le code pour retirer les anciens…
J’ai testé en dehors des boucles try/catch mais ça ne fonctionne pas.
J’en ai profité pour optimiser un peu le script.
Il y a un truc que je souhaiterais faire également :
Si l’option P1 est sélectionnée et que la partie 1 du champ P1 = Q, je souhaiterais que les nouveaux champs crées soient placés au dessus des anciens (hauteur augmentée de la hauteur du champ) mais je ne sais pas si c’est faisable…
Merci
Attachments:
You must be logged in to view attached files.michel c.ParticipantNon en fait ça ne marche toujours pas même lorsque je sélectionne P1
michel c.ParticipantMerci pour la réponse.
Pour palier à ce problème, j’ai déclaré 2 variables pour les valeurs des champs Name.3.1 et Name.3.2
Le problème est résolu pour la modification de la partie 1 mais ça ne change rien lorsque je séléctionne P2…
function Renommer_c() {
//récuperer les noms de tous les champs
for (var i=0; i<this.numFields; i++) {
var nomChamp=this.getNthFieldName(i);
//déclarer les variables
var aN = this.getField("Name.3.1").value;
var nN = this.getField("Name.3.2").value
var CaR = this.getField("nom_champ").value;
var Menu = this.getField("Menu").value;
//décomposer les noms de champs en 3 parties séparées par les points : P1 ; P2 et P3
var b = nomChamp.split(".");
var P1 = (b[0]);
var P2 = (b[1]);
var P3 = (b[2]);
//Si l'on désire modifier la partie 1 et que la partie 1 correspond à l'entrée saisie dans le champ Name.3.1
if (Menu == 1 && aN == P1) {
//déclarer la variable P1new (nouveau nom pour la partie 1)
var P1new = nN;
try{
//récupérer les paramètres des champs à renommer
var ts=this.getField(P1+"."+P2+"."+P3).textSize;
var tf=this.getField(P1+"."+P2+"."+P3).textFont;
var rct=this.getField(P1+"."+P2+"."+P3).rect;
var pg=this.getField(P1+"."+P2+"."+P3).page;
//créer des nouveaux champs P1new.P2.P3
var f=this.addField(P1new+"."+P2+"."+P3,"text",pg,rct);
//app.alert("Champ ajouté : "+P1new+"."+P2+"."+P3);
f.textSize=ts;
f.textFont=tf;
//interrompre le code si erreur
}catch(e){break}
//supprimer les anciens champs P1.P2.P3
this.removeField(P1+"."+P2+"."+P3)
//app.alert("Champ retiré : "+P1+"."+P2+"."+P3);
}
//Si l'on désire modifier la partie 2 et que la partie 2 correspond à l'entrée saisie dans le champ Name.3.1 et que la partie 1 correspond à la variable CaR
if (Menu == 2 && aN == P2 && CaR == P1) {
//déclarer la variable P2new (nouveau nom pour la partie 2)
var P2new = nN;
try{
//récupérer les paramètres des champs à renommer
var ts=this.getField(P1+"."+P2+"."+P3).textSize;
var tf=this.getField(P1+"."+P2+"."+P3).textFont;
var rct=this.getField(P1+"."+P2+"."+P3).rect;
var pg=this.getField(P1+"."+P2+"."+P3).page;
//créer des nouveaux champs P1.P2new.P3
var f=this.addField(P1+"."+P2new+"."+P3,"text",pg,rct);
//app.alert("Champ ajouté : "+P1+"."+P2new+"."+P3);
f.textSize=ts;
f.textFont=tf;
}catch(e){break}
//interrompre le code si erreur
//supprimer les anciens champs P1.P2.P3
this.removeField(P1+"."+P2+"."+P3)
//app.alert("Champ retiré : "+P1+"."+P2+"."+P3);
}
}
}
Attachments:
You must be logged in to view attached files.michel c.ParticipantÉtrange le fonctionnement de ce script :
Lorsque je souhaite renommer la partie 1, il va fonctionner uniquement pour les 2nds indices (P3) ayant des valeurs paires.
Lorsque je souhaite renommer la partie 2 ; même chose, ça fonctionne que pour les 2nds indices ayant des valeurs paires….
michel c.ParticipantBonjour, je viens de commenter mon code :
function Renommer_c() {
//récuperer les noms de tous les champs
for (var i=0; i<this.numFields; i++) {
var nomChamp=this.getNthFieldName(i);
//déclarer la variable CaR (Champs à renommer)
var CaR = this.getField("nom_champ").value;
//décomposer les noms de champs en 3 parties séparées par les points : P1 ; P2 et P3
var b = nomChamp.split(".");
var P1 = (b[0]);
var P2 = (b[1]);
var P3 = (b[2]);
//Si l'on désire modifier la partie 1 et que la partie 1 correspond à l'entrée saisie dans le champ Name.3.1
if (this.getField("Menu").value == 1 && this.getField("Name.3.1").value == P1) {
//déclarer la variable P1new (nouveau nom pour la partie 1)
var P1new = this.getField("Name.3.2").value;
try{
//récupérer les paramètres des champs à renommer
var ts=this.getField(P1+"."+P2+"."+P3).textSize;
var tf=this.getField(P1+"."+P2+"."+P3).textFont;
var rct=this.getField(P1+"."+P2+"."+P3).rect;
var pg=this.getField(P1+"."+P2+"."+P3).page;
//créer des nouveaux champs P1new.P2.P3
var f=this.addField(P1new+"."+P2+"."+P3,"text",pg,rct);
f.textSize=ts;
f.textFont=tf;
//interrompre le code si erreur
}catch(e){break}
//supprimer les anciens champs P1.P2.P3
this.removeField(P1+"."+P2+"."+P3)
app.alert("Fait");
}
//Si l'on désire modifier la partie 2 et que la partie 2 correspond à l'entrée saisie dans le champ Name.3.1 et que la partie 1 correspond à la variable CaR
if (this.getField("Menu").value == 2 && this.getField("Name.3.1").value == P2 && CaR == P1) {
//déclarer la variable P2new (nouveau nom pour la partie 2)
var P2new = this.getField("Name.3.2").value;
try{
//récupérer les paramètres des champs à renommer
var ts=this.getField(P1+"."+P2+"."+P3).textSize;
var tf=this.getField(P1+"."+P2+"."+P3).textFont;
var rct=this.getField(P1+"."+P2+"."+P3).rect;
var pg=this.getField(P1+"."+P2+"."+P3).page;
//créer des nouveaux champs P1.P2new.P3
var f=this.addField(P1+"."+P2new+"."+P3,"text",pg,rct);
f.textSize=ts;
f.textFont=tf;
}catch(e){break}
//interrompre le code si erreur
//supprimer les anciens champs P1.P2.P3
this.removeField(P1+"."+P2+"."+P3)
}
}
}
Attachments:
You must be logged in to view attached files.michel c.ParticipantIl y a un truc que je ne comprend pas. Mon script fonctionne mais il y a toujours un champ qui n’est pas renommé…
Attachments:
You must be logged in to view attached files.michel c.ParticipantJ’y suis arrivé pour la modification de la partie 1 du nom de champ (P1.P2.P3)
Par contre mon script ne fonctionne pas quand je souhaite “modifier” la partie 2 P2. J’ai une erreur à la ligne 28…
Merci
Attachments:
You must be logged in to view attached files.michel c.ParticipantJe vais regarder si j’ai cette fonctionnalité dans pdf XChange. Mais si elle est cachée, alors elle est bien cachée…
Merci en tout cas. Je vais continuer à bosser sur ce script je ne suis pas très loin d’y arriver je pense.
michel c.ParticipantJe viens d’essayer le fichier proposé par BB mais ça ne fonctionne pas, j’ai une erreur à la ligne 12…
Attachments:
You must be logged in to view attached files.michel c.ParticipantJe viens de tester pour modifier la première partie ou la 2ème au choix. Mais ça ne fonctionne toujours pas…
Attachments:
You must be logged in to view attached files.michel c.ParticipantBon j’avance à tâtons, ça marche très partiellement…
Attachments:
You must be logged in to view attached files.michel c.ParticipantJe viens de retrouver le logiciel, il s’agit de Pdf Studio. Je viens de tester le renommage séquentiel mais ça ne me fait pas gagner de temps.
Je voulais renommer 30 champs : “Q.7.1” à “Q.7.30” qui se seraient appelés : “R.7.1″ à R.7.30”.
Et je voulais que ce soit fait respectivement pour chaque champ (que le Q.7.1 devienne R.7.1 et ainsi de suite)
Cependant le renommage a été fait dans le désordre.
Je suis donc à la recherche d’un outil ou d’une astuce pour y arriver.
En gros si je décompose le nom de champ en 3 parties (nom ; indice1 ; indice2), j’aimerais qu’en spécifiant ou en sélectionnant le nom du champ je puisse modifier l’indice 1 et que les indices 2 soient inchangés.
Si je comprend bien, l’astuce serait de récupérer les propriétés de chaque champ, de créer des nouveaux champs avec les mêmes propriétés mais des noms différents puis d’effacer les champs d’origine.
Je perdrais je pense au passage les actions liés à ces champs. Mais ça ce n’est pas grave, les champs que je souhaite “renommer” ne seront pas des champs ayant des scripts.
Merci
- Cette réponse a été modifiée le il y a 3 semaines par michel c..
michel c.ParticipantJe viens de tester un truc à partir d’un script trouvé sur le net mais rien ne se passe. Je cherche encore…
Attachments:
You must be logged in to view attached files.michel c.ParticipantC’est sur libre office writer et non calc pardon.
Il suffit d’insérer une zone de liste et dans les propriété, on peut aligner à gauche, au centre et à droite.
Pour finir il suffit d’exporter en pdf.
- Cette réponse a été modifiée le il y a 3 semaines et 2 jours par michel c..
Attachments:
You must be logged in to view attached files.michel c.ParticipantMerci pour cette solution
michel c.ParticipantMerci beaucoup. J’ai réussi pour cette condition.
Par contre je n’ai pas réussi pour la suivante :
if (nomChamp.indexOf("Aide.")==0) {
if (this.getField(nomChamp).type=="text" || nomChamp.indexOf("_af_image")>0) this.getField(nomChamp).readonly=true;
else this.getField(nomChamp).readonly=false;
}
Ici, je voudrais que pour les champs Aide, les champs de type bouton qui ne sont pas des images soient en readonly = false et que les champs de type texte ainsi que les images en readonly = true
Merci
michel c.ParticipantMerci
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 2 mois et 1 semaine 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 2 mois et 1 semaine 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 2 mois et 2 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 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..
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 2 mois et 3 semaines 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 2 mois et 4 semaines 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 3 mois et 2 semaines par michel c..
- 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.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 4 mois et 1 semaine par michel c..
- 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.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 4 mois et 1 semaine par michel c..
- Cette réponse a été modifiée le il y a 4 mois et 1 semaine par michel c..
- 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.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 4 mois et 1 semaine 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 4 mois et 1 semaine par michel c..
- 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.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 4 mois et 1 semaine 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 5 mois et 3 semaines 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 5 mois et 3 semaines par michel c..
- Cette réponse a été modifiée le il y a 5 mois et 3 semaines par michel c..
- Cette réponse a été modifiée le il y a 5 mois et 3 semaines par michel c..
- Cette réponse a été modifiée le il y a 5 mois et 3 semaines par michel c..
- Cette réponse a été modifiée le il y a 5 mois et 3 semaines par michel c..
- Cette réponse a été modifiée le il y a 5 mois et 3 semaines par michel c..
Attachments:
You must be logged in to view attached files.michel c.ParticipantBonjour, 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 5 mois et 3 semaines par michel c..
Attachments:
You must be logged in to view attached files.michel 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 6 mois et 1 semaine 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 6 mois et 1 semaine 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 6 mois et 1 semaine 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 6 mois et 1 semaine 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 6 mois et 2 semaines par michel c..
- Cette réponse a été modifiée le il y a 6 mois et 2 semaines par michel c..
- Cette réponse a été modifiée le il y a 6 mois et 2 semaines par michel c..
- Cette réponse a été modifiée le il y a 6 mois et 2 semaines 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 6 mois et 2 semaines 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. -
AuteurRéponses