abracadabraPDF › Forums › PDF – Général › Vérification et tri
- Ce sujet contient 13 réponses, 3 participants et a été mis à jour pour la dernière fois par
michel c., le il y a 1 semaine et 6 jours.
-
CréateurSujet
-
5 février 2025 à 08:48 #75407
michel c.
ParticipantBonjour, j’ai crée un document qui me permettra de positionner les dates de passages d’examen pour mes élèves et j’aimerais ajouter quelques fonctionnalités :
• Lors du clic sur le bouton “générer les listes d’élèves”, j’aimerais que les champs groupe.n.1 listent tous les élèves d’un même groupe (chaque groupe correspond à la valeur des champs gato.i)
• J’aimerais que les champs groupe.n.2 fassent le total des lignes (des élèves) qui se trouvent dans les champs au dessus (groupe.n.1)
• Lors du clic sur vérifier j’aimerais avoir un message d’alerte si un élève a été oublié et un autre si un élève a été positionné 2 fois
Merci
Attachments:
You must be logged in to view attached files. -
CréateurSujet
-
AuteurRéponses
-
5 février 2025 à 18:23 #75410
Merlin
Maître des clésSalut
C’est typiquement une question pour bebarth, les array c’est mon cauchemar !
5 février 2025 à 18:32 #75411bebarth
Maître des clésbonjour,
Voici ma proposition :
var listeEleves=this.getField("entreesListe").value;
var VP1=[];
var VTR=[];
var VP2=[];
var Alternance=[];
var inconnus=[];
var elevesX2=[];
var lesEleves=listeEleves.split("\r");
lesEleves.sort(function(a,b){return a.localeCompare(b)});
var elevePrecedent="";
for (var i=0; i<lesEleves.length; i++) {
var unEleve=lesEleves.split("/");
try {
if (unEleve[0]==elevePrecedent) elevesX2.push(unEleve[0]);
switch (unEleve[1]) {
case "VP1":
VP1.push(unEleve[0]);
break;
case "VTR":
VTR.push(unEleve[0]);
break;
case "VP2":
VP2.push(unEleve[0]);
break;
case "Alternance":
Alternance.push(unEleve[0]);
break;
default:
if (unEleve[0]!="-") inconnus.push(unEleve[0]);
}
var elevePrecedent=unEleve[0]
} catch(e) {}
}
this.getField("groupe.1.1").value=VP1.toString().replace(/,/g,"\r");
this.getField("groupe.1.2").value=VP1.length;
this.getField("groupe.2.1").value=VTR.toString().replace(/,/g,"\r");
this.getField("groupe.2.2").value=VTR.length;
this.getField("groupe.3.1").value=VP2.toString().replace(/,/g,"\r");
this.getField("groupe.3.2").value=VP2.length;
this.getField("groupe.4.1").value=Alternance.toString().replace(/,/g,"\r");
this.getField("groupe.4.2").value=Alternance.length;
if (inconnus.length) app.alert("Les élèves suivants n'ont pas de groupe :\r"+inconnus.toString().replace(/,/g,"\r"),3);
else app.alert("Tous les élèves ont un groupe.",3);
if (elevesX2.length) app.alert("Les élèves suivants sont dans plusieurs groupes :\r"+elevesX2.toString().replace(/,/g,"\r"),3);
Ceci est une version où l’on indique les noms des champs et des variables. On aurait pu en faire une qui les trouve automatiquement, mais ça complique un peu le script… Je me suis dit “commençons par le plus simple, on verra si il y a de la demande !”.
@+
😎-
Cette réponse a été modifiée le il y a 2 semaines et 5 jours par
bebarth.
Attachments:
You must be logged in to view attached files.6 février 2025 à 09:35 #75414michel c.
ParticipantMerci beaucoup, c’est exactement ce que je voulais.
Je souhaiterais également lors du clic sur le bouton vérifier (qui est sur la 2ème) page avoir un message d’alerte si un élève a été oublié et un autre si un élève a été positionné 2 fois dans le tableau.
Je ne vois pas du tout comment je pourrais m’y prendre pour cela…
Merci
6 février 2025 à 21:29 #75417bebarth
Maître des clésbonsoir,
Je regarde rapidement…
Je pense faire en sorte que lorsqu’un nom a été sélectionné il n’apparaisse plus dans les autres menus déroulants et afficher le nombre de noms qui n’ont pas encore été sélectionnés.
Ça te conviendrait ???@+
😎6 février 2025 à 22:12 #75418Merlin
Maître des clésbebarth = ce type est top !
7 février 2025 à 08:28 #75419michel c.
ParticipantOui, ce serait parfait, je ne savais pas que c’était possible.
9 février 2025 à 11:58 #75425bebarth
Maître des clésbonjour,
Je ne vais pas vous raconter ma vie, mais pour info j’ai terminé mais je ne pense pas avoir le temps de peaufiner le script aujourd’hui… Certainement demain !@+
😎10 février 2025 à 14:09 #75426bebarth
Maître des clésbonjour,
Je viens de finaliser le script.
J’ai un peu galéré sur une erreur que je qualifierais “de débutant” (“<=” au lieu de “<“), mais avec un instant de lumière pendant la nuit j’ai enfin pu débloquer le script que voici :// Script de document
var dropdownName="gato";
var dropdownNumber=0;
for (var i=0; i<this.numFields; i++) {
if (this.getField(this.getNthFieldName(i)).name.indexOf(dropdownName+".")==0) dropdownNumber++;
}
function liste() {
var listeEleves=this.getField("entreesListe").value;
var lesEleves=listeEleves.split("\r");
lesEleves.sort(function(a,b){return a.localeCompare(b)});
lesNoms=lesEleves.map(function(element) {return [element.split("/")[0],element]});
var theIndex=event.target.name.substr(event.target.name.indexOf(".")+1);
theValue=event.target.value;
for (var i=0; i<dropdownNumber; i++) {
if (i!=theIndex) {
var laPosition=this.getField(dropdownName+"."+i).currentValueIndices;
for (j=0; j<lesNoms.length; j++) {
if (lesNoms[j][0]==this.getField(dropdownName+"."+i).getItemAt(laPosition,false) && this.getField(dropdownName+"."+i).value!="-") {
lesNoms.splice(j,1);
break;
}
}
}
}
}
function fillDropdown() {
liste();
event.target.setItems(lesNoms);
event.target.value=theValue;
}
function selection() {
var theIndex=event.target.name.substr(event.target.name.indexOf(".")+1);
if (event.changeEx=="-") this.getField("Group."+theIndex).value="-";
else this.getField("Group."+theIndex).value=event.changeEx.split("/")[1];
liste();
if (event.changeEx=="-") this.getField("nonListes").value=lesNoms.length-1;
else this.getField("nonListes").value=lesNoms.length-2;
}
liste();
this.getField("nonListes").value=lesNoms.length-1;
// Pour placer les scripts sur tous les menus déroulants
for (var i=0; i<this.numFields; i++) {
var nomChamp=this.getNthFieldName(i);
if (nomChamp.indexOf("gato.")==0) {
this.getField(nomChamp).setAction("MouseEnter", "fillDropdown();");
this.getField(nomChamp).setAction("Keystroke", "if (!event.willCommit) {selection();}");
};
}
Tu me dis si tu as des questions…
@+
😎Attachments:
You must be logged in to view attached files.10 février 2025 à 19:27 #75428Merlin
Maître des clésBravo, beau boulot mais cette erreur s’affiche à l’ouverture du PDF :
TypeError: event.target.name is undefined
12:Document-Level:initEt je crois qu’il y a un problème dans la colonne “Groupe” (image jointe)
Attachments:
You must be logged in to view attached files.10 février 2025 à 20:40 #75430bebarth
Maître des clésOups ! Ça vient de la mise en fonction… et “event.target.name” lancé depuis le script de document n’a aucun sens… Je regarde demain !
Par contre, je ne comprends pas ta copie d’écran !!! Ça fonctionne chez moi.
@+
😎Attachments:
You must be logged in to view attached files.10 février 2025 à 23:28 #75432michel c.
ParticipantC’est exactement ce qu’il me faut. A part l’erreur à l’ouverture c’est parfait.
Il y a aussi un souci sur l’affichage des groupes sur le tableau de la page 2 lors du clic sur vérifier mais j’ai une idée pour remédier à cela.
11 février 2025 à 14:21 #75433bebarth
Maître des clésbonjour,
Il y avait plusieurs méthodes pour pallier ce message. En voici une :
// Script de document
var dropdownName="gato";
var dropdownNumber=0;
for (var i=0; i<this.numFields; i++) {
if (this.getField(this.getNthFieldName(i)).name.indexOf(dropdownName+".")==0) dropdownNumber++;
}
var listeEleves=this.getField("entreesListe").value;
var lesEleves=listeEleves.split("\r");
lesEleves.sort(function(a,b){return a.localeCompare(b)});
function liste() {
lesNoms=lesEleves.map(function(element) {return [element.split("/")[0],element]});
var theIndex=event.target.name.substr(event.target.name.indexOf(".")+1);
theValue=event.target.value;
for (var i=0; i<dropdownNumber; i++) {
if (i!=theIndex) {
var laPosition=this.getField(dropdownName+"."+i).currentValueIndices;
for (j=0; j<lesNoms.length; j++) {
if (lesNoms[j][0]==this.getField(dropdownName+"."+i).getItemAt(laPosition,false) && this.getField(dropdownName+"."+i).value!="-") {
lesNoms.splice(j,1);
break;
}
}
}
}
}
function fillDropdown() {
liste();
event.target.setItems(lesNoms);
event.target.value=theValue;
}
function selection() {
var theIndex=event.target.name.substr(event.target.name.indexOf(".")+1);
if (event.changeEx=="-") this.getField("Group."+theIndex).value="-";
else this.getField("Group."+theIndex).value=event.changeEx.split("/")[1];
liste();
if (event.changeEx=="-") this.getField("nonListes").value=lesNoms.length-1;
else this.getField("nonListes").value=lesNoms.length-2;
}
function comptage() {
lesNoms=lesEleves.map(function(element) {return [element.split("/")[0],element]});
for (var i=0; i<dropdownNumber; i++) {
var laPosition=this.getField(dropdownName+"."+i).currentValueIndices;
for (j=0; j<lesNoms.length; j++) {
if (lesNoms[j][0]==this.getField(dropdownName+"."+i).getItemAt(laPosition,false) && this.getField(dropdownName+"."+i).value!="-") {
lesNoms.splice(j,1);
break;
}
}
}
this.getField("nonListes").value=lesNoms.length-1;
}
comptage();
Avec mon script, le bouton “Vérifier n’a plus lieu d’être” vu que les champs “Group” sont rempli automatiquement lors de chaque sélection d’élève.
@+
😎Attachments:
You must be logged in to view attached files.11 février 2025 à 22:23 #75435michel c.
ParticipantC’est incroyable, je ne savais pas que c’était possible de faire ça !
Un grand merci et bravo !
-
Cette réponse a été modifiée le il y a 2 semaines et 5 jours par
-
AuteurRéponses
- Vous devez être connecté pour répondre à ce sujet.