Toutes mes réponses sur les forums
-
AuteurRéponses
-
michel c.Participant
Merci beaucoup, ça marche… bien mieux
michel c.ParticipantMerci beaucoup, ça fonctionne parfaitement maintenant.
michel c.ParticipantMerci, le script fonctionne, sauf pour la 1ère ligne pour laquelle le saut de ligne n’est pas remplacé par un espace.
Voici le message d’erreur que j’obtiens sur la console :
Doc:Open:5: InvalidSetError: InvalidSetError: A property set is not valid or possible.
Field.[52]:5:Doc:Open
Sur adobe acrobat, il n’y a pas d’erreur et tout fonctionne. Mais comme notre lycée ne veut pas acheter trop de logiciels avec des abonnement annuels, nous utilisons PDF X-Change editor
Merci
Attachments:
You must be logged in to view attached files.michel c.ParticipantUn des scripts que j’ai récupéré ici permet de générer des listes déroulantes à partir d’un champ texte multiligne.
Je laisse la première ligne vide pour n’avoir aucune entrée affichée.
Un script permettant de mettre en position “1” chaque liste.
Celui-ci crée une erreur si la position demandée a comme valeur d’export une valeur nulle (“”) cette erreur disparait si il y a un espace au lieu de rien.
michel c.ParticipantMerci beaucoup, ça fonctionne
michel c.ParticipantJ’ai réussi par une “bidouille” : j’ai crée un nouveau fichier à partir d’une page blanche, j’ai copié/collé tous les champs (après avoir supprimé le champ BB et icone.6), j’ai crée les scripts de document. Lorsque j’ai incorporé les icônes, tout fonctionnait.
Par contre, je rencontre un nouveau problème :
Je voudrais que mes élèves aient la possibilité de voir leurs erreurs.
J’ai mis un bouton “vérifier” qui lorsqu’il est cliqué met en rouge les listes comportant des erreurs tout en mettant les listes en lecture seule
et un bouton recommencer qui remet en blanc toutes les listes et réactive les droits en écriture des listes.
ça à l’air de fonctionner mais j’ai une erreur sur la console :
Field:Calculate:1: TypeError: this.getField(...) is null
Je ne vois pas d’où cela pourrait venir…
Attachments:
You must be logged in to view attached files.michel c.ParticipantLorsque je saisis dans la console
this.removeIcon("BB");
; cela me renvoie cette erreur : “undefined”Concernant la proposition de Merlin, je ne sais pas trop dans quel script l’incorporer ni à quel endroit.
Est-ce dans le script qui permet d’incorporer les icones ? J’ai fait un essai mais ça ne fonctionne pas…
michel c.ParticipantMerci, ça fonctionne. Par contre, comment faire pour supprimer une icône du document?
Si je me contente de supprimer par exemple l’image BB et l’image icone.6, lorsque je clique ensuite sur initialiser j’ai une erreur :
Field:Mouse Up:1: TypeError: this.getField(...) is null
Merci
michel c.ParticipantJe viens de comprendre d’où vient l’erreur :
Mes listes déroulantes sont générées à l’aide de un script (qui m’avait été proposé par BB ou Merlin, je ne sais plus et que je n’ai pas intégré au document en pièce jointe) :
var lesLignes=this.getField("entreesListe").value.split("\r");
for (var a=0; a<lesLignes.length; a++) {lesLignes[a]=lesLignes[a].split("\/");}
for (var a = 1; a < 33; a++) {if (this.getField("motif."+a) != null) {this.getField("motif."+a).setItems(lesLignes);}}
Dans un champ de texte (entreesListe) je saisis ligne par ligne chaque élément des listes déroulantes que je veux intégrer aux listes motif.1 à motif.32
Comme je laisse la première ligne vide (sans aucun caractère), la valeur d’export par défaut n’existe pas non plus ce qui me crée cette erreur.
Si je remplace la 1ère entrée par n’importe quoi tant qu’il y a une valeur d’export en face, cela fonctionne.
Je pense qu’il faudrait modifier le script permettant de générer les listes déroulantes pour que si une ligne ne comporte aucun caractère, la valeur attribuée soit un espace ou un tiret mais je ne sais pas faire…
michel c.ParticipantEffectivement, je viens de faire un essai avec adobe acrobat DC, cela fonctionne…
Y a-t-il un autre moyen de faire la même chose ?
michel c.ParticipantJe viens de réessayer par curiosité (j’utilise maintenant la solution proposée par Merlin). ça fonctionne bien mais lorsque je ferme le logiciel et que je veux rétablir la liste par défaut que j’ai affectée avant la fermeture j’ai cette erreur :
ReferenceError: DVD is not defined
Mon script pour réaffecter la valeur stockée :
this.getField("entreesListe").value = DVD;
michel c.ParticipantArf, effectivement c’est beaucoup plus simple…. Je ne connaissais pas cette commande.
Merci.
J’ai appris pas mal de choses ces derniers jours grâce à vous.
michel c.ParticipantLe formulaire est lourd car il y a beaucoup de champs et de pages je suppose.
Chez moi et au boulot, il n’y a pas de bug et l’exécution est très rapide (aussi bien avec PDF XChange Editor qu’avec adobe acrobat reader DC), aucun ralentissement mais mon pc est assez récent. Celui du boulot et moins performant et moins récent mais ça n’est pas lent non plus.
Peux tu poster les messages d’erreurs renvoyés par la console s’il y en a ?
Si tu as une idée ou des pistes pour améliorer le formulaire, je suis preneur.
Merci
- Cette réponse a été modifiée le il y a 1 année et 9 mois par michel c..
michel c.ParticipantJe crois avoir trouvé.
L’erreur venait du script ListeDefaut qui contient un format non conforme à une fonction je pense.
J’ai ajouté cette action avant la fermeture du document :
this.addScript("ListeDefaut", "function listedefault () {}");
Et j’ai fait en sorte que la liste par defaut soit stockée dans un champ caché (DVar). Lors du clic sur le bouton pour effacer tous les champs; je récupère la valeur contenue dans ce champ pour l’intégrer au script ListeDefaut. Une fois le resetForm effectué, je rétablis la liste par défaut avec le contenu de ListeDefaut que j’intègre également dans le champ DVar.
Je ne sais pas si c’est très académique mais j’ai l’impression qu’il n’y a pas de faille.
Attachments:
You must be logged in to view attached files.michel c.ParticipantJ’ai quand même un souci lors de l’ouverture du document :
Doc:Open:1: ReferenceError: DVD is not defined
J’ai un peu modifié le script pour le faire correspondre à mes besoins mais je ne vois pas ou ça cloche.
Je vais continuer à bidouiller un peu…
Attachments:
You must be logged in to view attached files.michel c.ParticipantEffectivement, c’est mieux car j’avais un bouton qui permettait d’effacer tous les champs de mon document mais je voulais que l’utilisateur puisse rétablir ce champ avec la valeur qu’il avait lui même défini par défaut. Du coup, ma solution précédente ne fonctionnait pas car le champ masqué s’effaçait aussi.
Un grand merci
michel c.ParticipantJe viens de trouver la solution à ce que je souhaitais faire sans passer par une variable persistante.
Il suffisait d’avoir un champ caché pour sauvegarder la valeur par défaut…
J’aurais du y penser avant de poser la question….
- Cette réponse a été modifiée le il y a 1 année et 9 mois par michel c..
Attachments:
You must be logged in to view attached files.michel c.ParticipantAh et y a-t-il un moyen de la rendre persistante après avoir quitté l’application?
Ce que j’ai en tête c’est qu’un utilisateur puisse définir une liste (champ de texte multi lignes) par défaut. Que cette valeur par défaut puisse être stockée à sa demande (en cliquant sur un bouton) et qu’en cliquant sur un autre bouton, ce champ texte puisse retrouver son contenu qui a été défini comme étant par défaut même après avoir quitté et relancé l’application.
- Cette réponse a été modifiée le il y a 1 année et 9 mois par michel c..
Attachments:
You must be logged in to view attached files.michel c.ParticipantAlors là, un grand merci, je commençais à désespérer. Ça fonctionne nickel.
Je vais me plonger dans le script pour essayer d’apprendre quelques trucs, mais en le regardant en diagonale, ce n’est pas de mon niveau…
La précédente méthode ne marchait pas chez moi, même avec acrobat Reader (version gratuite)
- Cette réponse a été modifiée le il y a 1 année et 10 mois par michel c..
michel c.ParticipantJe viens de penser à une autre option : mettre une checkbox (CB.n) devant chaque champ agoto.n qui serait cochée si on souhaite imprimer la fiche de cet élève puis ce script affecté au bouton “imprimer” :
var pp = this.getPrintParams();
var printRange = [];
if (this.getField("CB.1").value = 1) {printRange.push([1,1]);}
if (this.getField("CB.2").value = 1) {printRange.push([2,2]);}
if (this.getField("CB.3").value = 1) {printRange.push([3,3]);}
.
.
.
if (this.getField("CB.32").value = 1) {printRange.push([32,32]);}
this.print(pp);
Mais ça ne fonctionne pas, lorsque je clique sur imprimer, toutes les pages sont imprimées…
- Cette réponse a été modifiée le il y a 1 année et 10 mois par michel c..
michel c.ParticipantTu ne peux pas partager ton document, ce serait plus facile.
michel c.ParticipantJe me lance :
if (nResult1<0) {oResult1.value = 0;}
if (nResult1>=0) {oResult1.value=nResult1}
- Cette réponse a été modifiée le il y a 1 année et 10 mois par michel c..
michel c.ParticipantJe l’ai exécuté depuis la console.
Je n’ai plus le message d’erreur, du coup lorsque je clique sur le bouton, la console me renvoie le message suivant :
Début du process : 20/11/2022 – 16:05:29
Pages à imprimer : 20,32
Fin du process : 20/11/2022 – 16:05:29
Durée :
Mais par contre l’impression ne se lancait pas.
J’ai réactivé la ligne
// this.print({bUI: false});
Après ça l’impression se lançait mais pour toutes les pages.
Du coup, j’ai essayé de remplacer cette ligne par :
this.print({bUI: true, nStart: "+i+", nEnd: "+i+"});
var t=this.templates;
var bDialog={
DoDialog: function(){return app.execDialog(this);},
validate: function(bDialog) {
oRslt=bDialog.store();
for (var i=0; i<t.length; i++) {
if (i<10) eval("theCB"+i+"=oRslt[\"cb0"+i+"\"];");
else eval("theCB"+i+"=oRslt[\"cb"+i+"\"];");
}
testOK1=1;
var condition="if (";
for (var i=0; i<t.length; i++) {
if (i!=0) condition+=" && ";
condition+="theCB"+i+"==false";
}
condition+=") testOK1=0;";
eval(condition);
var alertReturn=(testOK1);
if(!alertReturn) app.alert("\nSélectionnez au moins une page à imprimer.");
return alertReturn;
},
description: {
name: "Dialog",
align_children: "align_top",
elements: [
{
type: "view",
align_children: "align_left",
elements: [
{
type: "cluster",
name: "Fiches à imprimer",
align_children: "align_top",
elements: [
{
type: "view",
char_width: 10,
char_height: 3,
elements: [
{
type: "view",
align_children: "align_top",
elements: [
{
type: "view",
width: 80,
elements: [
{
type: "check_box",
item_id: "cb00",
name: "Plan de salle"
},
{
type: "check_box",
item_id: "cb01",
name: this.getField("agoto.1").value
},
{
type: "check_box",
item_id: "cb02",
name: this.getField("agoto.2").value
},
{
type: "check_box",
item_id: "cb03",
name: this.getField("agoto.3").value
},
{
type: "check_box",
item_id: "cb04",
name: this.getField("agoto.4").value
},
{
type: "check_box",
item_id: "cb05",
name: this.getField("agoto.5").value
},
{
type: "check_box",
item_id: "cb06",
name: this.getField("agoto.6").value
},
{
type: "check_box",
item_id: "cb07",
name: this.getField("agoto.7").value
},
{
type: "check_box",
item_id: "cb08",
name: this.getField("agoto.8").value
},
{
type: "check_box",
item_id: "cb09",
name: this.getField("agoto.9").value
},
{
type: "check_box",
item_id: "cb10",
name: this.getField("agoto.10").value
},
]
},
{
type: "view",
width: 80,
elements: [
{
type: "check_box",
item_id: "cb11",
name: this.getField("agoto.11").value
},
{
type: "check_box",
item_id: "cb12",
name: this.getField("agoto.12").value
},
{
type: "check_box",
item_id: "cb13",
name: this.getField("agoto.13").value
},
{
type: "check_box",
item_id: "cb14",
name: this.getField("agoto.14").value
},
{
type: "check_box",
item_id: "cb15",
name: this.getField("agoto.15").value
},
{
type: "check_box",
item_id: "cb16",
name: this.getField("agoto.16").value
},
{
type: "check_box",
item_id: "cb17",
name: this.getField("agoto.17").value
},
{
type: "check_box",
item_id: "cb18",
name: this.getField("agoto.18").value
},
{
type: "check_box",
item_id: "cb19",
name: this.getField("agoto.19").value
},
{
type: "check_box",
item_id: "cb20",
name: this.getField("agoto.20").value
},
{
type: "check_box",
item_id: "cb21",
name: this.getField("agoto.21").value
},
]
},
{
type: "view",
width: 80,
elements: [
{
type: "check_box",
item_id: "cb22",
name: this.getField("agoto.22").value
},
{
type: "check_box",
item_id: "cb23",
name: this.getField("agoto.23").value
},
{
type: "check_box",
item_id: "cb24",
name: this.getField("agoto.24").value
},
{
type: "check_box",
item_id: "cb25",
name: this.getField("agoto.25").value
},
{
type: "check_box",
item_id: "cb26",
name: this.getField("agoto.26").value
},
{
type: "check_box",
item_id: "cb27",
name: this.getField("agoto.27").value
},
{
type: "check_box",
item_id: "cb28",
name: this.getField("agoto.28").value
},
{
type: "check_box",
item_id: "cb29",
name: this.getField("agoto.29").value
},
{
type: "check_box",
item_id: "cb30",
name: this.getField("agoto.30").value
},
{
type: "check_box",
item_id: "cb31",
name: this.getField("agoto.31").value
},
{
type: "check_box",
item_id: "cb32",
name: this.getField("agoto.32").value
},
]
},
]
},
]
},
]
},
{
alignment: "align_right",
type: "ok_cancel",
},
]
},
]
}
};
if("ok"==bDialog.DoDialog()) {
//
d0=new Date();
debut=util.printd("dd/mm/yyyy – HH:MM:ss",d0);
console.show();
console.clear();
console.println("Début du process : "+debut);
//
var lesPages=[];
for (var i=0; i<t.length; i++) eval("if (theCB"+i+"==true) lesPages.push("+i+");");
console.println("Pages à imprimer : "+lesPages);
for (var i=0; i<t.length; i++) t.hidden=true;
for (var i=0; i<lesPages.length; i++) t[lesPages].hidden=false;
if (lesPages[lesPages.length-1]!=t.length-1) t[t.length-1].hidden=true;
this.print({bUI: true, nStart: "+i+", nEnd: "+i+"});
for (var i=0; i<t.length; i++) {
t.hidden=true;
t.hidden=false;
}
//
df=new Date();
fin=util.printd("dd/mm/yyyy – HH:MM:ss",df);
console.println("Fin du process : "+fin);
temps=(df.valueOf()-d0.valueOf())/1000/60;
var lesMinutes=parseInt(temps);
var lesSecondes=(temps-lesMinutes)*60;
var lesSecondes=parseInt(lesSecondes*10)/10;
var leTemps="";
if (lesMinutes>0) {
if (lesMinutes==1) var leTemps="1 minute";
else var leTemps=lesMinutes+" minutes";
}
if (lesSecondes>0) {
if (lesSecondes<2) var leTemps=leTemps+" "+lesSecondes+" seconde";
else var leTemps=leTemps+" "+lesSecondes+" secondes";
}
var leTemps=leTemps.replace(/^\s+|\s+$/gm,"");
console.println("Durée : "+leTemps);
//
}
Mais là seulement la 1ère page s’imprime.
Je vais continuer de creuser…
- Cette réponse a été modifiée le il y a 1 année et 10 mois par michel c..
michel c.ParticipantPar contre je ne vois pas ou placer ce script.
J’ai essayé plusieurs choses et j’ai à chaque fois le même message d’erreur :
Début du process : 20/11/2022 – 08:16:30
Field:Mouse Up:256: TypeError: t is undefined
michel c.ParticipantJe viens de penser à 2 façons de contourner le problème mais je ne sais pas si c’est possible.
- Serait il possible qu’après avoir cochée les pages à imprimer, le script supprime du document celles qui n’ont pas été cochées, lance l’impression de la totalité des pages puis annule l’opération de suppression des pages.
- Sinon même chose mais juste après l’impression, le document est automatiquement sauvegardé sous un autre nom pour ne pas écraser le fichier original et ne pas se retrouver avec des pages en moins.
Merci
michel c.ParticipantJe vais potasser un peu ça ou alors essayer de trouver une astuce pour que ça fonctionne en imprimant une plage de pages.
michel c.Participantbebarth wrote:
bonjour, Essaye avec :... eval("if (theCB"+i+"==true) {console.println(\"Nom Page \"+"+(i+1)+");this.print({bUI: false, nStart: "+i+", nEnd: "+i+"});}"); ... mais normalement lorsqu’on n’indique pas nEnd, seule la page nStart est imprimée ! @+
Merci !
Là ça fonctionne bien mieux avec le soft que l’on utilise au boulot.Seules les pages demandées sont imprimées. Elles ne sont toujours pas regroupées dans une seule impression ce qui empêche de faire du recto-verso et qui oblige à saisir le code du photocopieur pour chaque page.
Par contre avec adobe reader DC, ça reste bloqué sur la console qui affiche : “Les pages à imprimer sont :” et c’est tout, rien ne se passe après.
- Cette réponse a été modifiée le il y a 1 année et 10 mois par michel c..
michel c.ParticipantMerci pour la mise en page en 3 colonnes de la dialog box. Je n’aurais pas trouvé tout seul.
Par contre, il y a toujours un bug lors de l’impression mais celui-ci n’est pas présent avec adobe reader DC (ce qui est dommage car au lycée nous avons acheté la licence pour le logiciel PDFXChange Editor)
Lorsque je sélectionne par exemple la page 1 et la page 3, cela lance 2 impressions.
Sur la 1ère il y a les pages 1 ; 2 ; 3 ; 4 et 5 et sur la 2ème impression, les pages 3 ; 4 et 5
J’ai le même bug pour chaque impression demandée, sauf si je demande uniquement la page 5.
Si je demande l’impression de toutes les pages, alors j’aurais 5 impressions lancées :
- toutes les pages
- les pages 2 ; 3 ; 4 et 5
- les pages 3 ; 4 et 5
- les pages 4 et 5
- la page 5
Avec adobe reader j’ai une impression pour chaque page demandée. C’est mieux mais pas très pratique car à chaque impression je dois saisir le code du photocopieur. Je ne sais pas si il est possible d’avoir toutes les pages cochées en une seule impression.
Merci
michel c.ParticipantOui, effectivement, je cherche comment avoir les éléments de la dialog box organisés différemment (en 2 ou 3 colonnes ce serait bien).
Si tu as la réponse, je suis preneur.
Merci
michel c.ParticipantJ’ai réussi à résoudre certains trucs :
J’ai un décalage entre la page choisie et la page imprimée : c’est bon
- J’arrive à choisir le format de la page et l’imprimante
- J’ai toujours ce problème d’impression d’une plage de pages et non pas des pages spécifiées.
Par exemple si je choisis d’imprimer la page de l’élève 20 (page 21) ; celle de l’élève 25 (page 26) et celle de l’élève 30 (page 31), alors ça me lance l’impression des pages 21 à 33 puis l’impression des pages 26 à 33 et enfin l’impression des pages 31 à 33.
Il faudrait pour bien faire que j’ai uniquement ces 3 pages de lancées en une seule impression (à chaque impression nous devons saisir le code de l’imprimante)
Je pense qu’il y a une solution dans ce code que j’ai trouvé sur le net et qu’il faut que j’adapte :
var pp = this.getPrintParams();
var printRange = [];
printRange.push([0,0]); // print page 1
printRange.push([2,2]); // print page 3
printRange.push([4,4]); // print page 5
printRange.push([7,7]); // print page 8
pp.printRange = printRange;
this.print(pp);
Pas sur que j’y arrive rapidement
Merci
michel c.ParticipantPour cela il faut que je note sur un post-it le nom des élèves dont je souhaite imprimer la fiche avec le numéro de page qui correspond.
Là je coche directement les noms des élèves dont je souhaite imprimer les fiches. Et comme il y a environ 30 élèves par classe et parfois un enseignant a 10 classes, à l’approche du conseil de classe, le gain de temps est assez énorme.
michel c.ParticipantJ’ai adapté ta solution à mon document, mais j’ai quelques soucis :
- J’ai un décalage entre la page choisie et la page imprimée
- Je n’arrive à choisir le format de la page ni l’imprimante
- J’ai un problème d’impression : ça imprime une plage de pages et non pas des pages spécifiées.
Merci
- Cette réponse a été modifiée le il y a 1 année et 10 mois par michel c..
- Cette réponse a été modifiée le il y a 1 année et 10 mois par michel c..
- Cette réponse a été modifiée le il y a 1 année et 10 mois par michel c..
- Cette réponse a été modifiée le il y a 1 année et 10 mois par michel c..
- Cette réponse a été modifiée le il y a 1 année et 10 mois par michel c..
- Cette réponse a été modifiée le il y a 1 année et 10 mois par michel c..
- Cette réponse a été modifiée le il y a 1 année et 10 mois par michel c..
michel c.ParticipantA priori il faut que j’utilise plutôt une liste qu’une liste déroulante afin pouvoir faire une sélection multiple.
- Cette réponse a été modifiée le il y a 1 année et 10 mois par michel c..
michel c.ParticipantEntre temps j’ai fait ceci en superposant 2 images. On peut faire comme cela ou c’est plutôt à éviter ?
Je vais potasser un peu buttonImportIcon
Merci
Attachments:
You must be logged in to view attached files.michel c.ParticipantJ’arrive à mettre l’action sur l’image, à charger 3 images différentes pour le survol, le bouton haut et le bouton bas, mais je ne vois pas trop comment faire pour avoir une autre image lorsque le bouton est “enclenché”.
C’est à dire avoir une image différente en fonction de l’état des champs que je souhaite afficher/cacher et que ces images soient incorporées au document.
Attachments:
You must be logged in to view attached files.michel c.ParticipantChez moi ça affiche un point quand le champ a été cliqué, le symbole ne s’affiche qu’au survol du curseur. Je suppose que c’est un problème de police de caractère manquante… Mais souvent la bonne réponse vient de l’abandon de la « mauvaise » question : tu essaies de réinventer la roue en faisant se comporter des champs de texte comme des boutons. Alors pourquoi ne pas utiliser des champ de formulaire de type « boutons » ? L’énorme avantage c’est que dans un bouton on peut utiliser une image comme label, on n’est pas limité à du texte. Et ça t’éviterait d’avoir à gérer deux champs de texte l’un par-dessus l’autre.
Euh je ne sais pas faire… On peut insérer une image comme label d’un bouton à la place du texte ?
Edit : je viens de trouver (voir pj). Il faut juste que je charge une autre image (oeil barré) en modifiant le script lorsque l’utilisateur veut cacher si je comprend bien.
Il faut donc que je trouve la commande pour charger une image via un script?
Par contre, il faudra que l’image soit présente dans les fichiers des utilisateurs ?
Merci
- Cette réponse a été modifiée le il y a 1 année et 10 mois par michel c..
- Cette réponse a été modifiée le il y a 1 année et 10 mois par michel c..
- Cette réponse a été modifiée le il y a 1 année et 10 mois par michel c..
Attachments:
You must be logged in to view attached files.michel c.ParticipantJ’ai bien intégré l’unicode dans mon script, cependant, bien que le symbole s’affiche correctement sur mon pc perso, il ne s’affiche pas au boulot.
Ou plutôt, il s’affiche à l’ouverture du document, mais dès que je clique sur les boutons, il disparait et n’apparait plus ensuite.
Je précise que j’utilise PDFXChange editor et non pas Adobe acrobat DC
Mais même sur adobe acrobat reader DC (version gratuite), l’icone ne s’affiche pas.
- Cette réponse a été modifiée le il y a 1 année et 10 mois par michel c..
Attachments:
You must be logged in to view attached files.michel c.ParticipantUne petite question en passant : écrire :
if (this.getField("test."+indice).display == display.visible) this.getField("test."+indice).display = display.hidden;
équivaut à écrire :
if (this.getField("test."+indice).display == display.visible) {this.getField("test."+indice).display = display.hidden;}
Les accolades sont facultatives ?
michel c.ParticipantIl me manque encore pas mal de bases….
Merci
michel c.ParticipantMerci beaucoup, ça fonctionne nickel
michel c.ParticipantMerci beaucoup !
Je ne comprends pas trop quelles informations il y a dans rect. A ce que je crois comprendre et après avoir lu deux trois trucs sur le net, c’est les coordonnées des 4 coins du champ en question?
Autre truc que je crois avoir compris : currentValueIndices c’est la position des entrées dans le menu déroulant et on ajoute 1 car la numérotation commence à zero ?
Dernière question : est il possible de se passer du bouton servant à générer les menus déroulants ? J’ai essayé en plaçant ce script en script de calcul pour chacun des champs Ch1 et Ch2 ça à l’air de marcher. La méthode est bonne ou y a-t-il mieux à faire ?
Edit : Non en fait ça ne fonctionne pas, ça à l’air de fonctionner en mouse down par contre.
- Cette réponse a été modifiée le il y a 1 année et 10 mois par michel c..
- Cette réponse a été modifiée le il y a 1 année et 10 mois par michel c..
- Cette réponse a été modifiée le il y a 1 année et 10 mois par michel c..
- Cette réponse a été modifiée le il y a 1 année et 10 mois par michel c..
- Cette réponse a été modifiée le il y a 1 année et 10 mois par michel c..
- Cette réponse a été modifiée le il y a 1 année et 10 mois par michel c..
- Cette réponse a été modifiée le il y a 1 année et 10 mois par michel c..
- Cette réponse a été modifiée le il y a 1 année et 10 mois par michel c..
Attachments:
You must be logged in to view attached files.michel c.ParticipantMerci, cela fonctionne. Par contre si je modifie les noms des élèves (les entrées saisies dans les champs goto.nn), cela ne fonctionne plus pour ces champs.
- Cette réponse a été modifiée le il y a 1 année et 10 mois par michel c..
- Cette réponse a été modifiée le il y a 1 année et 10 mois par michel c..
Attachments:
You must be logged in to view attached files.michel c.ParticipantLes menus servent à sélectionner les élèves que je souhaite permuter.
La disposition des champs goto.1 à goto.32 est un plan de salle de classe.
Donc si je sélectionne l’élève 1 dans la liste de gauche et l’élève 9 dans la liste de droite, et qu’ensuite je clique sur le bouton central, le champ goto.1 se retrouvera à l’emplacement du champ goto.9 et inversement.
michel c.Participantmichel c.ParticipantMerci pour la proposition.
En fait, ce n’est pas les Champs Ch1 et Ch2 que je souhaite permuter mais goto.a et goto.b (les valeurs a et b dépendent des choix faits dans les champs Ch1 et Ch2).
J’aimerais donc propulser les noms des élèves inscrits dans les champs goto.1 à goto.32 dans les listes Ch1 et Ch2 et avec pour valeur d’export les noms de champs (goto.1 à goto.32). → ça je ne sais pas faire, mais je vais continuer à chercher.
Ensuite une fois les noms d’élèves à permuter sélectionnés, j’aimerais qu’en cliquant sur le bouton central, les champs goto.a et goto.b correspondant à ces élèves permutent (changent de place).
Je viens de faire un essai non concluant, mais je vais continuer à tâtonner, je vais peut être y arriver.
Merci
- Cette réponse a été modifiée le il y a 1 année et 10 mois par michel c..
michel c.ParticipantJe pense avoir trouvé.
michel c.ParticipantJ’avance un peu sur cette usine à gaz.
J’ai réussi à intégrer l’alerte quand une fiche est pleine. Seul problème : l’alerte s’affiche aussi lorsque l’on complète une autre fiche qui elle ne l’est pas.
J’ai également essayé d’intégrer une alerte lorsque l’utilisateur ne saisit aucun motif avec cette ligne : if (leMotif==””){app.alert(“Veuillez saisir un motif”,3);}
Ca fonctionne mal : l’alerte s’affiche aussi lorsque l’on clique sur annuler ou alors, malgré l’alerte l’événement est saisi sur la fiche avec un motif non rempli (il faudrait que je trouve un moyen de stopper l’exécution du script) et par contre, un truc très bizarre, l’alerte n’apparait pas du tout pour l’élève 2. Pourquoi ???
Attachments:
You must be logged in to view attached files.michel c.ParticipantLe truc que je ne comprend pas c’est que lorsqu’une fiche est pleine (par exemple celle de l’élève 1), si j’ajoute un évènement à la fiche de l’élève 3 (qui n’est pas pleine), le message qui me sera délivré est “attention, la fiche de l’élève 3 est pleine”….
Attachments:
You must be logged in to view attached files.michel c.ParticipantJ’ai supprimé ce script dans la dernière version (j’avais juste posté le code mais pas le ficher).
Mais ça a l’air de marcher.
Attachments:
You must be logged in to view attached files.michel c.ParticipantJe viens de tenter de modifier le script remplissage par celui-ci :
function remplissage(indice){
var leNom=this.getField(“goto.”+indice).value;
var leMotif=this.getField(“motif.”+indice).value;
var laDate=util.printd(“dd/mm/yyyy”,new Date());
if (leNom!=”” && leMotif!=”-“) {
var commentaire=app.response({
cTitle: “COMMENTAIRE”,
cQuestion: “Commentaire du “+laDate+” pour le motif : \””+leMotif+”\”.”,
cDefault: “Sans commentaire !”,
cLabel: “Élève : “+leNom
});
if (commentaire!=null) {
try {
var OK=0;
for (var i=0; i<32; i++) {
if (this.getField(“date”+indice+”.”+i+”.0″).value==””) {
this.getField(“date”+indice+”.”+i+”.0″).value=laDate;
this.getField(“evenement”+indice+”.”+i+”.0″).value=leMotif;
this.getField(“commentaire”+indice+”.”+i+”.0″).value=commentaire;
OK++;
break;}
if (this.getField(“date”+indice+”.”+i+”.0″).value!=””) {
app.alert({cMsg:”Attention, liste pleine. L’entrée ne peut être saisie”, nIcon:3});
// this.getField(“date”+indice+”.”+i+”.0″).value=””;
//this.getField(“evenement”+indice+”.”+i+”.0″).value=””;
//this.getField(“commentaire”+indice+”.”+i+”.0″).value=””;
OK++;
break;}}
if (!OK) {
for (var i=0; i<32; i++) {
if (this.getField(“date”+indice+”.”+i+”.1″).value==””) {
this.getField(“date”+indice+”.”+i+”.1″).value=laDate;
this.getField(“evenement”+indice+”.”+i+”.1″).value=leMotif;
this.getField(“commentaire”+indice+”.”+i+”.1″).value=commentaire;
break;
}
}
}
} catch(e) {
app.alert(“La fiche de l’élève “+leNom+” est pleine.”,3);
}
};
}
}Mais ça ne fonctionne pas…
michel c.ParticipantOups
michel c.ParticipantJe viens de tester un truc mais qui n’est pas complètement satisfaisant :
J’ai mis en calcul pour le dernier champ de date (date1.31.1) : celui de l’élève 1 (je ne l’ai pas fait pour tous les élèves) le script suivant
if (this.event.value != "") {app.alert({cMsg:"Attention, liste pleine. L'entrée ne peut être saisie", nIcon:3});
this.event.value = "";
this.getField("evenement1.31.1").value = "";
this.getField("commentaire1.31.1").value = "";
}
Du coup la date ne se remplit pas mais par contre cela n’efface pas les champs evenement1.31.1 et commentaire1.31.1 jouxtant le champ date.
Je suppose que l’on peut intégrer cela au script remplissage mais je bloque un peu.
De plus je me demandais si c’était possible de saisir le nombre d’élèves (n) de la classe sur la 1ère page et de ne rendre imprimable que les n pages correspondantes via un bouton imprimer. (Pour éviter d’imprimer des pages non utilisées).
Merci
- Cette réponse a été modifiée le il y a 1 année et 10 mois par michel c..
Attachments:
You must be logged in to view attached files.michel c.ParticipantOui, c’est plus simple et c’est ce que j’ai fait au début, mais après réflexion je me suis dit qu’il y allait forcément y avoir un cas pour lequel ça va arriver (j’aurai une trentaine d’élèves par an sur ce type de dossier)
Et si l’élève a déjà bien rempli son dossier, il est bon pour faire un copié/collé de tout les champs vers un nouveau formulaire vide et de refaire entièrement la page supprimée….
Travaillant sur des formulaires pdf pour la saisie de cours, exercices…Il est relativement fréquent qu’un élève quitte le logiciel sans sauvegarder.
Là je ne veux pas prendre de risque car ces dossiers seront le résultat d’un an de travail.
michel c.ParticipantSi la boite de dialogue affiche 7,5 c’est en fait les valeurs aléatoires affectées aux variables Nb1 et Nb2 (donc 7 et 5) séparés par une virgule.
Il suffit de saisir le résultat du calcul (7×5) + 5 → soit 40 (5 fois le nombre 1 + le nombre 2)
Pour confirmer la suppression.
En fait ce fichier sera un dossier pré-rempli que les élèves devront compléter mais pour ne pas avoir de pages blanches je voulais permettre la suppression de pages tout en vérifiant moi-même qu’ils ne suppriment pas une page par erreur.
Leur version du logiciel que j’utilise ne leur permet pas d’éditer les formulaires et de toute façon ici c’est sans intérêt pour eux d’essayer de cracker ce code.
Le vrai moyen de cracker pour eux c’est de noter les codes proposés et ceux que je saisis et d’arriver à faire la corrélation entre les deux pour retrouver la formule magique. Mais je leur demanderai de détourner le regard lorsque je saisirais le code.
michel c.ParticipantMerci, je vais corriger çà bien que je crois ne plus avoir besoin des boutons en bas de page.
Pour la mise à jour de la liste déroulante une fois les pages supprimées, pour l’instant je ne vois pas trop comment faire mais je vais chercher.
Concernant le mot de passe, en fait, je souhaite un mot de passe pour pas que les élèves suppriment une page accidentellement et qu’ils sauvegardent après.
Le contournement que j’ai trouvé c’est de générer un nombre aléatoire qui s’affiche dans la boite de dialogue.
A partir de ce nombre il faut saisir un code qui est fonction de ce dernier. Les élèves seront donc dans l’obligation de me demander avant la suppression d’une page.
Voici mon code concernant la suppression de page :
var page = (this.getField("PageNumber").value);
var numpage = this.getField("PageNumber").value-1;
var Nb1=(Math.floor(Math.random()*9))+3;
var Nb2=(Math.floor(Math.random()*90))+1;
var codeok = ((5*Nb1)+(Nb2));
this.pageNum = numpage;
this.zoomType = zoomtype.fitP;
var cResponse = app.response({
//Attention, opération irréversible !
cQuestion: " \u0041\u0074\u0074\u0065\u006e\u0074\u0069\u006f\u006e\u002c\u0020\u006f\u0070\u00e9\u0072\u0061\u0074\u0069\u006f\u006e\u0020\u0069\u0072\u0072\u00e9\u0076\u0065\u0072\u0073\u0069\u0062\u006c\u0065\u0020\u0021 ",
//Supprimer la page
cTitle: "\u0053\u0075\u0070\u0070\u0072\u0069\u006d\u0065\u0072\u0020\u006c\u0061\u0020\u0070\u0061\u0067\u0065\u0020 " + page + "?",
cDefault: "",
//Saisir le code
cLabel: " \u0053\u0061\u0069\u0073\u0069\u0072\u0020\u006c\u0065\u0020\u0063\u006f\u0064\u0065 " +" - " + Nb1 + "," + Nb2
});
if (cResponse == codeok){
this.pageNum = numpage;
this.deletePages(numpage);
numeroPage();
this.calculateNow();
//Fait
app.alert({cMsg:"\u0046\u0061\u0069\u0074 ", nIcon:3});
}
//Opération annulée
else {this.pageNum = 0;
app.alert({cMsg:"\u004f\u0070\u00e9\u0072\u0061\u0074\u0069\u006f\u006e\u0020\u0061\u006e\u006e\u0075\u006c\u00e9\u0065", nIcon:3});}
michel c.ParticipantJ’ai trouvé une solution qui est plus acceptable : je gère la suppression des pages depuis la 1ère page avec un menu déroulant qui permet de choisir la page à effacer, la page à effacer qui s’affiche en plein écran avec boite de dialogue de confirmation.
Ainsi je paramètre d’emblée qu’aucune des 12 premières page puisse être effacée, la page contenant le bouton ne peut donc pas l’être.
Par contre un truc que je n’arrive pas à faire : que le code dans la boite de dialogue de confirmation ne s’affiche pas en clair (pas trop grave car je viens de penser à une astuce qui me permettrait de contourner ce problème)
Attachments:
You must be logged in to view attached files.michel c.ParticipantJe viens de modifier le script associé au bouton de l’avant dernière page : en ajoutant cette ligne : if (numpage = this.numPages – 1) {this.getField(“supp_PS49″).display = display.hidden};
Et ça à l’air de fonctionner. Voici le script complet.
var numpage = (event.target.page+1);
var cResponse = app.response({
//Attention, opération irréversible !
cQuestion:
”
\u0041\u0074\u0074\u0065\u006e\u0074\u0069\u006f\u006e\u002c\u0020\u006f\u0070\u00e9\u0072\u0061\u0074\u0069\u006f\u006e\u0020\u0069\u0072\u0072\u00e9\u0076\u0065\u0072\u0073\u0069\u0062\u006c\u0065\u0020\u0021
“,
//Supprimer la page suivante?
cTitle:
”
\u0053\u0075\u0070\u0070\u0072\u0069\u006d\u0065\u0072\u0020\u006c\u0061\u0020\u0070\u0061\u0067\u0065\u0020\u0073\u0075\u0069\u0076\u0061\u006e\u0074\u0065\u003f
“,
cDefault: “”,
//Saisir le code
cLabel: ” \u0053\u0061\u0069\u0073\u0069\u0072\u0020\u006c\u0065\u0020\u0063\u006f\u0064\u0065 ”
});
if (cResponse == “4096”){
if (numpage = this.numPages – 1) {this.getField(“supp_PS49″).display = display.hidden};
else if {this.deletePages(numpage);
numeroPage();
app.alert({cMsg:”Fait”, nIcon:3});
}}
else {app.alert({cMsg:”Opération annulée”, nIcon:3});}Par contre, je ne sais pas trop comment faire pour que se script fonctionne pour cacher tous les boutons supp_PS… qui peuvent se retrouver sur la dernière page après suppression d’autres pages.
michel c.ParticipantJe n’y avais pas pensé. Je vais me pencher là dessus. Il faut que je m’active, je dois donner les fichiers aux élèves lundi après midi…
michel c.ParticipantBonjour, je ne vois pas ce qu’est une page template ni comment on la déclare comme tel (je ne suis pas sous acrobat DC mais sur Pdf XChange Editor)
Sinon, j’avais vu que la 1ère page portait le numéro 0 et qu’il fallait mettre des champs de noms différents pour que cela fonctionne.
Je n’ai pas mis de bouton sur la dernière page non plus car il me semble que l’on ne peut pas effacer la page sur laquelle se trouve le bouton.
michel c.ParticipantJe viens de trouver en ajoutant :
this.calculateNow();
michel c.ParticipantBonjour, je viens de réussir mais j’ai un bouton sur chaque page (sauf sur la dernière) permettant de supprimer la page suivante.
Le bouton fonctionne bien, cependant le numéro de page ne s’actualise pas. Je ne vois pas trop comment faire…
Merci
Attachments:
You must be logged in to view attached files.michel c.ParticipantJe viens de tester :
this.event.value = event.target.page
; sur chacun de mes champs mais cela ne donne rien…michel c.ParticipantJ’ai l’impression que le problème vient du
catch(e) {...
dans la fonction remplissage
Je ne maitrise pas du tout ça mais je crois comprendre cela sert à gérer une erreur, or je ne suis pas sûr que la boucle for précédente génère une erreur si tous les champs sont remplis.
J’ai essayé de remplacer cela par une condition mais pour l’instant je n’y arrive pas.
J’ai inséré
if (this.getField("evenement1.31.1").value != "") {
app.alert("La fiche de l'élève "+leNom+" est pleine.",3);à la place juste pour tester avec la fiche bilan de l’élève 1 mais ça ne fonctionne pas.
Attachments:
You must be logged in to view attached files.michel c.ParticipantSuper, merci beaucoup. Pas sur que j’y sois arrivé tout seul. Sinon, j’aurais mis beaucoup plus de temps pour un résultat qui aurait ressemblé à une usine à gaz.
Il va me falloir du temps pour bien comprendre tout ton script.
J’ai apporté quelques petites modifs et j’ai constaté que l’alerte quand la fiche est pleine ne fonctionne pas.
Je vais essayer de trouver pourquoi mais je ne suis pas sur d’y arriver tout de suite…
- Cette réponse a été modifiée le il y a 1 année et 11 mois par michel c..
Attachments:
You must be logged in to view attached files.michel c.ParticipantMais je ne pense pas avoir besoin de mettre le code en unicode dans le script car le fichier sera présent seulement sur mon poste (prof). par contre cela m’intéresserait si lors de la saisie, des astérisques s’affichent au lieu du texte en clair mais je ne vois pas comment….
Merci
michel c.ParticipantMerci pour les réponse, j’ai intégré le script à une fonction, cela marche à merveille.
Pour les caractères unicode, je ne sais pas trop comment intégrer ça à mon document.
Je précise que je ne travaille pas sous un logiciel adobe mais sous PdfXchange editor.
J’ai trouvé des “traducteurs” de texte en unicode mais je ne vois pas trop comment faire.
Merci
Attachments:
You must be logged in to view attached files.michel c.ParticipantMerci, la page de menu est toute récente et faite un peu trop vite, mais je viens de la corriger. Par contre je ne vois pas trop à quoi sont dues les erreurs de compatibilité avec acrobat et foxit.
Je vais chercher un peu.
- Cette réponse a été modifiée le il y a 2 années et 2 mois par michel c..
Attachments:
You must be logged in to view attached files.michel c.ParticipantMerci beaucoup pour ces précisions, ça va bien m’aider à comprendre.
michel c.ParticipantMon fichier a des bugs, celui de BB marche bien.
J’ai apporté une modif pour éviter la saisie en double d’un élève.
Attachments:
You must be logged in to view attached files.michel c.ParticipantMerci,
J’ai effectivement quelques questions sur la solution que tu proposes.
- La 1ère est sur la forme : pourquoi sur cette ligne :
for (var i=1; i<=nbPlaces; i++) posEleve=[this.getField("El."+i).value,this.getField("place."+i).value];
il n’y a pas d’accolades ? - Ensuite celle ci :
posEleve=[this.getField("El."+i).value,this.getField("place."+i).value];
je ne comprends pas trop le rôle de la virgule - Et globalement, je ne connais pas les tableaux. Celui ci possède 18 lignes et 2 colonnes si je comprend bien avec pour la 1ère colonne :
this.getField("El."+i).value
et pour la 2ème :this.getField("place."+i).value
? - La fonction placement possède 2 paramètres (indice et position) ?
for (var i=1; i<=nbPlaces; i++)
: pour les valeurs i comprises entre 1 et 17 :if (pos==posEleve[1] && ind!=i)
: si le paramètre pos égale à la place i et l’indice différent de i ? (pas sûr du tout)app.alert(posEleve[ind][0]+" et "+posEleve[0]+" ont le même numéro de place : "+posEleve[1],3);
: afficher le message d’alerte…pas bien comprisposEleve[1],3
Bref, il y a pas mal de trucs que je ne maîtrise pas ici. Il faudrait que je m’exerce sur des tableaux plus basiques.
Sinon, j’avais réussi à arriver à mes fins cette nuit d’une autre manière :
for (var i=1 ; i<17 ; i++){
var k = i+1
if (this.getField("place."+i).value == this.getField("place."+k).value)
{app.alert({cMsg:"Plusieurs élèves partagent la même place", nIcon:1});
this.getField("place."+i).fillColor=["RGB", 255/255, 255/255, 0/255];
this.getField("place."+k).fillColor=["RGB", 255/255, 255/255, 0/255];
}
}
for (var i=1 ; i<18 ; i++){
this.getField("eleve."+i).value = this.getField("El."+this.getField("place."+i).value).value;}
Je me demandais si il était possible dans le cas ou le même numéro est attribué que la boite de dialogue affiche en plus du message les n° de places disponibles restantes.
- Cette réponse a été modifiée le il y a 2 années et 5 mois par michel c..
- Cette réponse a été modifiée le il y a 2 années et 5 mois par michel c..
- Cette réponse a été modifiée le il y a 2 années et 5 mois par michel c..
Attachments:
You must be logged in to view attached files.michel c.ParticipantBonjour, j’ai corrigé ces erreurs, malgré tout j’ai le même problème :
Lorsque je clique sur le bouton, seul l’élève affecté à la place 13 s’inscrit dans le champ “eleve.13”
Lorsque je clique une seconde fois, l’élève affecté à la place 14 s’inscrit dans le champ “eleve.14”
Et lorsque je clique encore, plus rien…
Attachments:
You must be logged in to view attached files.13 avril 2022 à 14:52 en réponse à : Insertion obligatoirement différentes de valeurs. – RÉSOLU #70969michel c.ParticipantBonjour, la pièce jointe d’Alex n’est plus disponibe, est ce qu’il est possible de remettre son lien ou est elle définitivement perdue ?
Merci
michel c.ParticipantJe vais me pencher là dessus, je ne sais pas trop encore comment faire. Dans l’immédiat, mon script permettant d’attribuer chaque élève à une place ne fonctionne toujours pas (sauf pour 3 élèves).
Je l’ai simplifié mais je ne vois pas ou est le problème…
for (var l=1 ; l<18 ; l++){
this.getField("place."+l).fillColor=color.white;}
for (var i=1 ; i<18 ; i++){
if (this.getField("place."+i).value < 1 | this.getField("place."+i).value>17) {
app.alert({cMsg:"La valeur est hors de la plage", nIcon:1});}
}
for (var j=1 ; j<17 ; j++){
var k = j+1
if (this.getField("place."+j).value == this.getField("place."+k).value)
{app.alert({cMsg:"Attention, deux élèves ne peuvent pas partager la même place", nIcon:1});
this.getField("place."+j).fillColor=["RGB", 255, 255/255, 0];
this.getField("place."+k).fillColor=["RGB", 255, 255/255, 0];
}
}
for (var m=1 ; m<18 ; m++) {
if (this.getField("place."+m).value == this.getField("El."+m).name.substring(3,5)) {this.getField("eleve."+m).value = this.getField("El."+m).value;}}
Merci
Attachments:
You must be logged in to view attached files.michel c.ParticipantJe n’ai pas encore essayé le setAction car je galère déjà à permuter les contenus de mes champs élèves.i
Je ne sais pas si j’ai la bonne approche, ça marche pour certains champs mais pas tous….
Le script ne me renvoie pas d’erreur mais il y a un truc qui cloche…
J’ai l’impression d’avoir fait une usine à gaz ….
Attachments:
You must be logged in to view attached files.michel c.ParticipantEn fait lorsque je suis en classe, je me base sur mon plan de classe pour plusieurs choses :
- faire l’appel plus rapidement (si une place est libre, l’élève est absent)
- me permettre d’avoir un suivi de l’élève : lorsque je clique sur le nom d’un élève dans un champ “eleve.i”, cela me renvoie directement à la page qui le concerne. Là je peux inscrire si il a été en retard, absent, si il a besoin d’une aide particulière, ses difficultés….
Le souci c’est que sur une année scolaire, il y a parfois des changements de place.
Si je permute les valeurs des champs eleve.1 avec eleve.5 par exemple, lorsque je vais cliquer sur sur le champ élève.1 cela va me renvoyer à la page de suivi de l’élève.5 qui était à cette place auparavant.
Il faut aussi que je permute les contenus des champs que j’ai nommé _motif.i et amotif.i.
Je pourrais donc faire cela sauf que je n’y arrive pas non plus…
Mais je cherche…
michel c.ParticipantJ’ai pensé à permuter les champs “eleves” grâce à leur position mais je coince aussi, il faudrait qu’il y ait une “détection” du nom des champs qu’il faut permuter.
Dans l’exemple, j’ai fait un bouton qui permet de permuter les champs “eleve.1” et “eleve.2” mais ça ne va pas, il faudrait permuter le champ qui se trouve à la position x avec le champ qui se trouve à la position y….
Il y a certainement une fonction que je ne connais pas qui pourrait m’aider à faire ce que je souhaite.
- Cette réponse a été modifiée le il y a 2 années et 5 mois par michel c..
Attachments:
You must be logged in to view attached files.michel c.ParticipantJ’ai trouvé une solution plus simple que de permuter les champs :
Je saisis les noms des élèves dans la liste au centre et j’affecte le n° de place dans la liste déroulante attenante.
La position des élèves dans la liste centrale ne changeant pas, je n’ai plus ce problème de permutation.
Cela a fonctionné au début mais je ne comprends pas pourquoi ça ne marche plus…
Le problème vient peut être du fait qu’il y a la possibilité d’affecter 2 fois la même place à un élève.
Je ne sais pas trop comment remédier à cela.
Merci
Attachments:
You must be logged in to view attached files.michel c.ParticipantMerci beaucoup, cela fonctionne.
michel c.ParticipantJuste une question en passant :
Pourquoi ne pas remplacer
event.value+=" M"+String.fromCharCode(0x00B2);
par :
event.value+=" M²"
?
Merci
michel c.Participantle
+ " "
est là pour ajouter un espace entre la valeur saisie et M²
michel c.ParticipantEffectivement, ça venait de là. Merci
michel c.ParticipantMerci pour l’astuce, je l’ai encore modifié car pour le formulaire sur lequel je travaille, je ne dois pas faire un reset de tous les champs mais seulement de certains.
Mais j’ai trouvé le code qui permet de le faire :
this.resetForm(["Nombre1", "Nombre2", "Text2", "Result"]);
michel c.ParticipantSi tu n’en dis pas plus ou si tu ne met pas ton document en lien ça va être un peu dur de te répondre (en tout cas pour moi).
michel c.ParticipantAlors ça va, ça n’aura pas été fait pour rien.
michel c.ParticipantBon, j’ai commenté un truc avec des commentaires positifs et tout, cependant, je ne sais pas trop qui les verra, j’ai jamais trop bien compris comment fonctionnent ces réseaux sociaux.
Bon je n’ai pas d’abonnement à LinkedIn, juste un compte gratuit, je suppose qu’il y a certaines limitations pour la publication de commentaires.
michel c.ParticipantJe viens de me souvenir que j’avais un compte chez Linked In sur lequel je vais quasiment jamais. Je cherche comment faire pour publier les recommandations mais je n’ai pas trop l’habitude de ce genre de trucs….
michel c.ParticipantMalheureusement je n’utilise aucun réseau social…
michel c.Participant@Merlin : merci, j’ai acheté le bouquin, il a l’air vraiment bien fait et gros avantage pour moi : c’est en français.
@ BB : Merci aussi pour les commentaires sur le script, ça me fait gagner un temps fou.
Et merci aussi pour ce site, j’ai énormément progressé grâce à vous. Il y a quelques moi j’étais loin d’imaginer tout ce que l’on pouvait faire avec des formulaires pdf.
Pour un débutant en programmation, c’est très agréable d’avoir un site comme celui-ci pour se faire aider.
michel c.ParticipantJe commence à étudier ton script, j’en suis au début ;
la variable modeleRegEx est définie par :
/^\d?$/;
Le
\d
définit la saisie de chiffres de 0 à 9 si je comprend bien.^
et$
: semblent marquer le début et la fin d’une ligneLe
?
: Correspond à 0 ou 1 occurrence de l’élément précédent → je ne vois pas trop …Y a t-il de la documentation à ce sujet ? J’ai regardé un peu sur le net et dans JavaScript for Acrobat API Reference mais ça me semble un peu confus.
J’ai aussi du mal à comprendre la ligne suivante :
aTester.splice(event.selStart, event.selEnd-event.selStart, event.change);
event.selStart
semble marquer le début de la saisie etevent.selEnd-event.selStart
; ce qu’il y a entre le début et la fin mais je ne suis pas sûr.Par contre je ne saisis pas le
.splice
Merci
michel c.ParticipantBonjour, je ne comprends pas bien pourquoi je n’arrive plus à voir les réponses de ce fil. Je ne vois plus que ma première intervention du 21/01…
Edit : le fait de répondre a réglé ce problème.
Merci BB pour ta dernière proposition.
- Cette réponse a été modifiée le il y a 2 années et 7 mois par michel c..
michel c.ParticipantJe viens d’intégrer la fonction format chiffre proposée par Merlin dans le fichier proposé par BB. Du coup seuls les chiffres peuvent être saisis.
Attachments:
You must be logged in to view attached files.michel c.Participant@Merlin : Merci pour ces réponses. Je n’ai pas eu besoin d’implémenter le dernier code proposé.
J’ai pu formater mes champs en nombre et pour que cela fonctionne j’ai modifié les conditions dans la fonction affLigne :
if (ac0 === 0 | ac1 === 0 | ac2 === 0 | ac3 === 0 | ac0 > 0 | ac1 > 0 | ac2 > 0 | ac3 > 0)
Et j’ai trouvé ce code super pratique pour déclarer un grand nombre de variable :
for (var i=0; i<=19; i++) {eval("var ac"+i+" = this.getField(\"ac."+i+"\").value");}
Je ne connaissais pas la fonction eval(). J’ai fait un peu des recherches et il y a certaines choses que je ne comprend pas bien.
J’ai entre autre lu que : La fonction eval()évalue le code JavaScript représenté sous forme de chaîne. et plus loin : Si la chaîne représente une expression, eval() évalue l’expression. Si l’argument représente une ou plusieurs instructions JavaScript, eval() évalue les instructions.
Mais je ne comprend pas bien ce qu signifie évaluer une expression.
Et un peu plus loin je lis qu’il est dangereux d’utiliser cette fonction : eval() est une fonction dangereuse, qui exécute le code qui lui est passé avec les privilèges de l’appelant. Si vous exécutez eval() avec une chaîne qui pourrait être affectée par une partie malveillante, vous risquez d’exécuter un code malveillant sur la machine de l’utilisateur avec les autorisations de votre page Web/extension.
Je suppose que le danger évoqué concerne le javascript utilisé sur des pages web et non pas celui intégré aux pdf?
Source : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval#never_use_eval!
Merci
Edit : @BB : Merci pour le fichier, je vais prendre le temps d’y voir un peu plus clair….
Attachments:
You must be logged in to view attached files.michel c.Participant@BB (suite) : J’ai regardé le try catch et si je comprends bien, cela crée une exception lors de l’exécution d’une fonction pour qu’une erreur n’affecte pas sa bonne exécution. Je vais essayer de potasser un peu ça.
michel c.ParticipantBonjour et merci pour les réponses.
@BB, pour l’instant, je n’arriverai pas à faire ces modifs, il y a trop de choses que je ne maîtrise pas dans ce script et il me faut pas mal de temps pour le décrypter.J’ai essayé de modifier celui que j’avais fait avec les propositions de Merlin mais en faisant cela fonctionne mal. toutes les lignes s’affichent dès la saisie d’un champ sur la 1ère. J’ai une solution en tête mais ça va être très chargé, surtout sans faire utiliser de variables.
J’ai un souci avec le script de raz ; je dois cliquer 1 fois sur le bouton pour effacer les valeurs et une 2ème fois pour effacer. Et je n’ai pas pu formater les champs en nombre car cela crée une erreur (je pense qu’un champ nombre ne peut pas contenir la valeur vide “”.
Attachments:
You must be logged in to view attached files.michel c.ParticipantMerci pour la proposition.
Lors de la saisie de la dernière ligne il y a un message d’erreur sur la ligne 11 du script (this.getField….is null)
Sinon, ça fonctionne nickel, tu as résolu le problème que j’avais avec le “0” qui lorsqu’il était saisi ne faisait pas apparaître la ligne suivante.
Il y a par contre pas mal de choses que je ne connais pas dans ce script, il va me falloir pas mal de temps pour le décrypter, mais en tout cas merci, ça me fait progresser.
michel c.ParticipantMerci beaucoup, ça fonctionne.
-
AuteurRéponses