abracadabraPDF › Forums › PDF – Général › Multiliste déroulante
- Ce sujet contient 34 réponses, 3 participants et a été mis à jour pour la dernière fois par bebarth, le il y a 6 mois et 4 semaines.
-
CréateurSujet
-
9 juin 2024 à 13:17 #74372BerbycParticipant
Bonjour à tous,
Comme je suis débutant et que je n’ai aucune expérience, aidez-moi s’il vous plaît.
J’ai un formulaire contenant 39 listes déroulantes et un fichier Excel, et j’aimerais faire une synchronisation entre les deux fichiers PDF et Excel via JavaScript comme suit :Une synchronisation entre les deux fichiers PDF et Excel, comme suit:
1. Je souhaite que les menus déroulants Chez moi/Absent soient inactifs, sauf si une chaîne est sélectionnée dans le menu déroulant Chaîne.
2. Chaque canal possède sa propre liste d’accueil/retour selon le deuxième tableau ExcelCordialement.
Attachments:
You must be logged in to view attached files. -
CréateurSujet
-
AuteurRéponses
-
9 juin 2024 à 17:20 #74377BerbycParticipant
Et serait-il possible que la deuxième page PDF soit masquée au besoin via une case à cocher non imprimable ?
Merci
10 juin 2024 à 09:40 #74380MerlinMaître des clésBonjour et bienvenue
Il n’y a qu’un seul PDF en pièce jointe, et dedans il n’y a pas de menu déroulant “Chez moi/absent” ni de menu déroulant “chaîne”, ça n’aide pas à la compréhension de ce que tu veux faire.
Dans un PDF plusieurs champs qui ont exactement le même nom partagent leurs données. En clair ils affichent la même chose et en modifier un seul revient à les modifier tous en même temps.
Donc en fait ton PDF ne contient que 3 champs : canal, départ et arrivée.
Pour remplir de nombreux champs automatiquement avec un script il faut qu’ils utilisent une règle de nommage cohérente pour qu’une boucle puisse fonctionner. Par exemple : canal.0, canal.1, canal.2, canal.3, etc.
En général dans les PDF on utilise le point comme séparateur dans le nom des champs pour les raisons qui sont expliquées ici, ainsi que la méthode la plus simple pour les créer : https://www.abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/duplication-rapide-de-champs-de-formulaire/
Si tu veux que tes champs fonctionne correctement il faut les nommer en respectant la syntaxe web : pas de slash, pas d’accent, pas d’espace, ni aucun caractère spécial.
Concernant la deuxième question, c’est possible mais ce n’est pas quelque chose de simple à faire pour un débutant. D’autant que ton PDF contient 3 pages.
Fait une recherche sur “template” et sur “page modèle” dans ce forum pour bien comprendre de quoi il s’agit.
10 juin 2024 à 17:03 #74393bebarthMaître des clésbonjour,
Moi je veux bien aider, mais il faudrait m’expliquer car je n’ai rien compris à ce que tu voulais faire…@+
😎10 juin 2024 à 19:21 #74394BerbycParticipantBonjour à tous,
J’ai deux fichiers, un PDF et l’autre en Excel, ce que je veux c’est :
Une synchronisation entre les deux fichiers, c’est-à-dire que les listes déroulantes dans le fichier PDF seront alimentées depuis les données du fichier Excel comme suit :
La liste déroulante canal de la première page du PDF sera alimentée par la colonne canal dans la première feuille Excel, et chaque canal répertorie plusieurs départs (feuille Départ Excel)
La liste déroulante Départ PDF sera alimentée par la colonne départ de la feuille2 Départ Arrivée de Excel, et chaque Départ regroupe plusieurs arrivées selon les données dans feuille2 Départ Arrivées de Excel
Le reste des listes déroulantes de la page 2 du PDF seront alimentées séparément quand on sélectionnera un choix, et non pas toutes à la fois avec le même choix.
Et serait-il possible que la deuxième page PDF soit masquée au besoin via une case à cocher non imprimable ?
Merci.
Attachments:
You must be logged in to view attached files.10 juin 2024 à 20:22 #74397bebarthMaître des clésJe regarde ça dès que possible.
@+
😎11 juin 2024 à 14:22 #74398bebarthMaître des clésbonjour,
Voici déjà un fichier pour la première partie. Les données doivent être en pièces jointes du fichier .pdf au format .csv. Il n’est donc pas possible d’avoir des onglets et il faut donc joindre 2 fichiers séparés.
Et les scripts utilisés dans ce fichier :
// Script de document
//
var fichier=this.getDataObjectContents("Départ.csv");
var donnees=util.stringFromStream(fichier);
var lignes=donnees.split("\r\n");
var colonnes=new Array();
for (var i=0 ; i<lignes.length ; i++) colonnes=lignes.split(";");
var colonne0=[];
for (var j=0 ; j<colonnes.length ; j++) {
if (colonnes[j][0]) colonne0.push([colonnes[j][0]]);
}
for (var i=1; i<=colonne0.length; i++) {
eval("var colonne"+(i+1)+"=[];");
for (var j=0 ; j<colonnes.length ; j++) {
if (colonnes[j]) eval("colonne"+(i+1)).push(colonnes[j]);
}
}
colonne0[0].push(0);
for (var i=1; i<colonne0.length; i++) {
colonne0.push(eval("colonne"+(i+1)))
}
//
var fichier1=this.getDataObjectContents("Départ Arrivée.csv");
var donnees1=util.stringFromStream(fichier1);
var lignes1=donnees1.split("\r\n");
var colonnes1=new Array();
for (var i=0 ; i<lignes1.length ; i++) colonnes1=lignes1.split(";");
for (var i=1; i<=colonnes1[0].length; i++) {
eval("var colonne"+(i+1)+"1=[\"- Sélectionnez -\"];");
for (var j=1 ; j<colonnes1.length ; j++) {
if (colonnes1[j]) eval("colonne"+(i+1)+"1").push(colonnes1[j]);
}
}
//
var leCanal=this.getField("Canal").value;
this.getField("Canal").clearItems();
this.getField("Canal").setItems(colonne0);
this.getField("Canal").value=leCanal;
// Script de touches personnalisé Menu "Canal"
if (!event.willCommit) {
this.getField("Départ").clearItems();
this.getField("Arrivée").clearItems();
if (event.changeEx!=0) {
var leMenu=event.changeEx.split(",");
var ind=leMenu[0].substr("Canal ".length);
leMenu[0]=["- Sélectionnez -",0];
for (var i=1; i<leMenu.length; i++) {
leMenu=[leMenu,eval("colonne"+(i+1)+"1")];
}
this.getField("Départ").clearItems();
this.getField("Départ").setItems(leMenu);
}
}
// Script de touches personnalisé Menu "Départ"
if (!event.willCommit) {
this.getField("Arrivée").clearItems();
if (event.changeEx!=0) {
this.getField("Arrivée").clearItems();
this.getField("Arrivée").setItems(event.changeEx.split(","));
}
}
Le reste des listes déroulantes de la page 2 du PDF seront alimentées séparément quand on sélectionnera un choix, et non pas toutes à la fois avec le même choix. Et serait-il possible que la deuxième page PDF soit masquée au besoin via une case à cocher non imprimable ?
Pour ça il me faudra quelques explications car je n’ai pas compris…
@+
😎Attachments:
You must be logged in to view attached files.11 juin 2024 à 17:08 #74400BerbycParticipantBonjour Bebarth, bonjour à tous,
Merci Bebarth pour votre réponse et pour votre effort.
Pour ça il me faudra quelques explications car je n’ai pas compris…
On peut pas dupliquer le même choix de la liste déroulante (Départ) ou bien (Arrivée) de la page 1 sur les autre listes déroulante de la page 2.
C’est-à-dire, si on sélectionne un choix (Départ et Arrivée) sur la page 1 pdf , les autres listes déroulantes de page 2 sera vide, afin qu’on aura la possibilité de sélectionner un autre choix diffèrent sur chaque liste déroulante (Départ et Arrivée) page2.(page 2 c’est une page supplémentaire, c’est pour cela que je voudrais que cette page soit masquer et elle sera afficher si besoin via case à cocher non imprimable).
Et serait-il possible que la deuxième page PDF soit masquée au besoin via une case à cocher non imprimable ?
D’autre question s’ils vous plait, serait-il possible masquer les pièces jointes (excel.csv) pour que les autres utilisateurs de ce fichier pdf ne pourront pas accéder au pièces jointes, et ils n’auront donc pas la possibilité de les modifier?
11 juin 2024 à 18:33 #74404bebarthMaître des clésOn peut pas dupliquer le même choix de la liste déroulante (Départ) ou bien (Arrivée) de la page 1 sur les autre listes déroulante de la page 2. C’est-à-dire, si on sélectionne un choix (Départ et Arrivée) sur la page 1 pdf , les autres listes déroulantes de page 2 sera vide, afin qu’on aura la possibilité de sélectionner un autre choix diffèrent sur chaque liste déroulante (Départ et Arrivée) page2.
Ça demande réflexion… une chose est sûre c’est que ce n’est pas simple et que les différents noms de champs ne peuvent pas être identiques à ceux de la page 1. Je regarderai ça jeudi.
(page 2 c’est une page supplémentaire, c’est pour cela que je voudrais que cette page soit masquer et elle sera afficher si besoin via case à cocher non imprimable).
Pages 2 et 3 donc ! Ça ne devrait pas être compliqué, dès que le problème précédent sera résolu.
D’autre question s’ils vous plait, serait-il possible masquer les pièces jointes (excel.csv) pour que les autres utilisateurs de ce fichier pdf ne pourront pas accéder au pièces jointes, et ils n’auront donc pas la possibilité de les modifier?
Ça c’est une bonne question dont je n’ai pas encore la réponse. On pourra peut-être caché ce panneau pour les utilisateurs de Reader, par exemple… Faut essayer.
@Merlin : Tu as une idée ???@+
😎12 juin 2024 à 17:11 #74406MerlinMaître des clés“D’autre question s’ils vous plait, serait-il possible masquer les pièces jointes (excel.csv) pour que les autres utilisateurs de ce fichier pdf ne pourront pas accéder au pièces jointes, et ils n’auront donc pas la possibilité de les modifier?”
La réponse est non.
Sécurité oblige, si c’était possible tous les antivirus rejetteraient le fichier car il serait soupçonné d’être malicieux.
12 juin 2024 à 18:15 #74409BerbycParticipant13 juin 2024 à 12:08 #74412MerlinMaître des clésIl est possible de placer les données dans le code JavaScript mais ça les rendrait difficilement actualisables.
On peut éventuellement chiffrer le code JavaScript mais ça dépend à qui le document est destiné car on retombe dans le problème évoqué ci-dessus : un PDF contenant du code chiffré est systématiquement rejeté par les antivirus, qui empêchent donc son ouverture ou son téléchargement.
13 juin 2024 à 17:13 #74413BerbycParticipantL’antivirus est déjà installé sur toutes les machines des utilisateurs de ce fichier
- Cette réponse a été modifiée le il y a 7 mois et 1 semaine par Berbyc.
13 juin 2024 à 18:54 #74415bebarthMaître des clésbonjour,
Voici ce que j’ai fait aujourd’hui. J’espère que cela te convient. Pour cacher les fichiers attaché on pourrait faire une tempo toutes les secondes par exemple, mais ça veut dire que le fichier est perpétuellement en calcul !Voici tous les scripts que j’ai utilisé. Si tu es débutant ça va peut-être un peu compliqué pour toi à comprendre : Il y a des scripts de document, des fonctions, une page modèle…
// Script de document
//
var nbDepart=0;
for (var i=0; i<this.numFields; i++) {
if (/^Départ\.\d+/.test(this.getNthFieldName(i))) nbDepart++;
}
var fichier=this.getDataObjectContents("Départ.csv");
var donnees=util.stringFromStream(fichier);
var lignes=donnees.split("\r\n");
var colonnes=new Array();
for (var i=0 ; i<lignes.length ; i++) colonnes=lignes.split(";");
var colonne0=[];
for (var j=0 ; j<colonnes.length ; j++) {
if (colonnes[j][0]) colonne0.push([colonnes[j][0]]);
}
for (var i=1; i<=colonne0.length; i++) {
eval("var colonne"+(i+1)+"=[];");
for (var j=0 ; j<colonnes.length ; j++) {
if (colonnes[j]) eval("colonne"+(i+1)).push(colonnes[j]);
}
}
colonne0[0].push(0);
for (var i=1; i<colonne0.length; i++) {
colonne0.push(eval("colonne"+(i+1)))
}
// Fichier "Départ Arrivée.csv"
var fichierDA=this.getDataObjectContents("Départ Arrivée.csv");
var donneesDA=util.stringFromStream(fichierDA);
var lignesDA=donneesDA.split("\r\n");
var colonnesDA=new Array();
for (var i=0 ; i<lignesDA.length ; i++) colonnesDA=lignesDA.split(";");
for (var i=1; i<=colonnesDA[0].length; i++) {
eval("var colonne"+(i+1)+"DA=[\"- Sélectionnez -\"];");
for (var j=1 ; j<colonnesDA.length ; j++) {
if (colonnesDA[j]) eval("colonne"+(i+1)+"DA").push(colonnesDA[j]);
}
}
//
var leCanal=this.getField("Canal").value;
this.getField("Canal").clearItems();
this.getField("Canal").setItems(colonne0);
this.getField("Canal").value=leCanal;
//
function menuCanal(laValeur) {
try {
for (var i=0; i<nbDepart; i++) {
this.getField("Départ."+i).clearItems();
this.getField("Arrivée."+i).clearItems();
}
if (laValeur!=0) {
var leMenu=laValeur.split(",");
var ind=leMenu[0].substr("Canal ".length);
leMenu[0]=["- Sélectionnez -",0];
for (var i=1; i<leMenu.length; i++) {
leMenu=[leMenu,eval("colonne"+(i+1)+"DA")];
}
for (var i=0; i<nbDepart; i++) {
this.getField("Départ."+i).clearItems();
this.getField("Départ."+i).setItems(leMenu);
}
}
} catch(e) {}
}
//
function menuDepart(ind,laValeur) {
this.getField("Arrivée."+ind).clearItems();
this.getField("Arrivée."+ind).setItems(laValeur.split(","));
}
function menuArrivee(leChamp) {
try {
var ind=leChamp.name.substring(leChamp.name.indexOf(".")+1);
var laTable=this.getField("Départ."+ind).value.split(",");
for (var i=0; i<nbDepart; i++) {
if (i==ind) continue;
for (j=0; j<leChamp.numItems; j++) {
if (this.getField("Départ."+i).getItemAt(this.getField("Départ."+i).currentValueIndices,false)==this.getField("Départ."+ind).getItemAt(this.getField("Départ."+ind).currentValueIndices,false) && this.getField("Arrivée."+i).value==laTable[j]) laTable.splice(j,1);
}
}
var lArrivee=leChamp.value;
leChamp.clearItems();
leChamp.setItems(laTable);
leChamp.value=lArrivee;
} catch(e) {}
}
// Script de touches personnalisé Menu "Canal"
if (!event.willCommit) menuCanal(event.changeEx);
// Script de touches personnalisé Menu "Départ"
if (!event.willCommit) menuDepart(event.target.name.substring(event.target.name.indexOf(".")+1),event.changeEx);
// Ajout Script de touches personnalisé de tous les Menus "Départ"
for (var i=0; i<30; i++) {
this.getField("Départ."+i).setAction("Keystroke","if (!event.willCommit) menuDepart(event.target.name.substring(event.target.name.indexOf(\".\")+1),event.changeEx);");
}
// Souris entrée de tous les Menus "Arrivée"
menuArrivee(event.target);
// Ajout Script Souris entrée de tous les Menus "Arrivée"
for (var i=0; i<30; i++) {
this.getField("Arrivée."+i).setAction("MouseEnter","menuArrivee(event.target);");
}
// Script d'ouverture de page
if (app.viewerType!="Exchange-Pro") this.viewState={overViewMode:2};
this.viewState={overViewMode:5}
// Script Affichage Page 2
var modeles=this.templates;
for (i=0; i<modeles.length; i++) {
if (modeles.name=="page2") {
modeles.hidden=(event.target.value=="Off");
break;
}
}
this.pageNum=0;
@+
😎Attachments:
You must be logged in to view attached files.20 juin 2024 à 12:11 #74495BerbycParticipantBonjour a tous,
Désolé pour le retard j’étais en formation de 06 jours.
Merci beaucoup @bebarth pour votre efforts, ca me convient, c’est formidable
Est-ce qu’on peut rendre les listes déroulantes de la page 2 inaccessibles sauf quand les listes déroulantes de page 1 sera remplis, et pour la case à coucher d’affichage de la page2 j’aimerais bien qu’elle ne soit pas imprimable
Merci encore pour vos efforts
Cordialement
- Cette réponse a été modifiée le il y a 7 mois par Berbyc.
20 juin 2024 à 13:49 #74497MerlinMaître des clésBonjour
1. Il faut “emballer” le script de bebarth (orange) dans une condition qui vérifie la valeur de toutes les listes déroulantes de la page 1 :
var nCompt = 0;
for (var i=0; i<this.numFields; i++) {
var oFld = this.getField(this.getNthFieldName(i));
if (oFld != null && oFld.type == "combobox" && oFld.page === 0 && oFld.value === oFld.defaultValue)
{nCompt = nCompt +1;}
}
if (nCompt === 0) {
var modeles=this.templates;
for (i=0; i<modeles.length; i++) {
if (modeles.name=="page2") {
modeles.hidden=(event.target.value=="Off");
break;
}
}
this.pageNum=0;
}
2. Voir capture ci-jointe
Attachments:
You must be logged in to view attached files.20 juin 2024 à 16:02 #74500BerbycParticipantBonjour Merlin,
Vu que je suis très nul en JS, sincèrement j’ai rien compris au je peut mettre ce code dans le scripte de bebarth.
Peux-tu m’aider s’il vous plait
Cordialement
20 juin 2024 à 16:35 #74504MerlinMaître des clésIl faut remplacer le script de bebarth par celui que j’ai posté ci-dessus.
Dans les Propriétés de la case : onglet Actions (voir la capture ci-dessus).
20 juin 2024 à 17:05 #74507BerbycParticipantJe l’ai remplacé mais ca ne fonctionne pas, la deuxième page ne s’affiche pas quand clique au-dessus sur Check Box1, serait-il possible de le mettre votre code sur le scripte de liste déroulante page 1 au lieu de Check Box1
20 juin 2024 à 17:16 #74510bebarthMaître des clésbonjour,
Voici un nouveau fichier. Ici, la case à cocher ne s’imprimera pas et la page 2 sera affichée uniquement si les 3 menus déroulants sont renseignés lorsque cette case est cochée.// Script Affichage Page 2
if (this.getField(“Canal”).value && this.getField(“Départ.0”).value && this.getField(“Arrivée.0”).value) {
var modeles=this.templates;
for (i=0; i<modeles.length; i++) {
if (modeles.name==”page2″) {
modeles.hidden=(event.target.value==”Off”);
break;
}
}
this.pageNum=0;
}@+
😎Attachments:
You must be logged in to view attached files.20 juin 2024 à 18:01 #74513BerbycParticipantMerci beaucoup pour votre réponse.
Peut-on mettre la cas à cocher grisé inactive ou bien masquer et elle sera afficher seulement lorsqu’on remplir les trois listes déroulante, parce que actuellement dans le cas ou on cliquant cette case avant de remplir les 3 listes déroulante, la deuxième page ne s’affiche pas.
20 juin 2024 à 18:23 #74514bebarthMaître des clésDu coup j’ai remis l’ancien script d’affichage de la page 2 et j’ai rajouter un script de calcul pour les menus déroulants :
// Script Affichage Page 2
var modeles=this.templates;
for (i=0; i<modeles.length; i++) {
if (modeles.name=="page2") {
modeles.hidden=(event.target.value=="Off");
break;
}
}
this.pageNum=0;
// Script de calcul des menus déroulants
if (this.getField("Canal").value && this.getField("Départ.0").value && this.getField("Arrivée.0").value!="- Sélectionnez -") {
this.getField("Check Box1").display=display.noPrint;
} else {
this.getField("Check Box1").display=display.hidden;
this.getField("Check Box1").value="Off";
var modeles=this.templates;
for (i=0; i<modeles.length; i++) {
if (modeles.name=="page2") {
modeles.hidden=true;
break;
}
}
this.pageNum=0;
}
@+
😎Attachments:
You must be logged in to view attached files.24 juin 2024 à 14:44 #74533BerbycParticipantMerci pour votre réponse Bebarth, mais quand j’ai mis votre codes JavaScript sur mon fichier du travail, la deuxième feuille est toujours afficher et le CheckBox1 ne fonctionne pas, est-ce que il y a une manipulation a faire sur la deuxième page?
24 juin 2024 à 14:48 #74536MerlinMaître des clésAs tu transformé la deuxième page en “template”, ou “page modèle” ?
24 juin 2024 à 14:53 #74537BerbycParticipant24 juin 2024 à 17:37 #74543bebarthMaître des clésbonjour,
A vérifier que le script de document “init” est bien intégré à ton fichier et que la page modèle se nome bien “page2”, sinon il faut adapter le script.@+
😎Attachments:
You must be logged in to view attached files.24 juin 2024 à 17:46 #74546BerbycParticipantPour le script de document est bien “init”, mais pour le nom de page 2 comme démontré votre capture d’écran 2, je ne sais pas comment le savoir, je travail sur Adobe Acrobate Pro 9
24 juin 2024 à 19:39 #74548bebarthMaître des clésJe ne me souviens pas où on les trouvait sous Acrobat Pro 9, mais voici ce que j’ai trouvé :
https://answers.acrobatusers.com/Where-Page-Templates-Windows-Adobe-Acrobat-9-Pro-q21342.aspx
Menu “Avancé”, sélectionnez “Pages modèles”… ensuite tu devrais les trouver.@+
😎24 juin 2024 à 21:47 #74553MerlinMaître des clésMon vieil Acrobat 9 ne parle plus Français car il a perdu le réglage dans ses Préférences, mais ça se trouve au même endroit dans les menus : “Modèles de pages” en VF.
Ensuite il faut cliquer sur l’icône œil pour afficher/masquer la page correspondante.
Attachments:
You must be logged in to view attached files.25 juin 2024 à 11:11 #74559BerbycParticipantBonjour a tous,
Merci beaucoup ca marche formidable, mais vu que j’ai un document qui porte 05 pages, du coup quand j’affiche la deuxième page via checkbox1, elle sera afficher en dernière au lieu d’être la deuxième, y a pas moyen de de l’afficher en deuxième position sur les 05 pages
D’autre question, serait-il possible de dupliquer la page4 au besoin, et les pages dupliquer sera toujours avant la dernière page qui est p05? en respect toujours l’ordre des pages
25 juin 2024 à 12:18 #74562MerlinMaître des clésEst-ce que ce document est seulement pour toi ou doit-il être diffusé après d’autres utilisateurs ?
En clair est-ce qu’il devra fonctionner seulement avec Acrobat Pro ou aussi avec Acrobat Reader ?
Dans le deuxième cas il faudra changer de script car modeles.hidden ne fonctionne pas avec Acrobat Reader.
25 juin 2024 à 12:28 #74563BerbycParticipantBonjour Merlin,
le document doit-être diffusé pour d’autres utilisateurs et il sera utiliser avec Adobe Reader DC (J’utilise Adobe Pro pour la création du fichier seulement)
25 juin 2024 à 21:48 #74564bebarthMaître des clésbonsoir,
Je regarde ça demain… il faut utiliser la méthode spawn qui permet de dupliquer et supprimer des pages modèles avec Acrobat Reader.D’autre question, serait-il possible de dupliquer la page4 au besoin, et les pages dupliquer sera toujours avant la dernière page qui est p05? en respect toujours l’ordre des pages
Pas de problème pour ça, mais peut-on dupliquer cette page plusieurs fois ou juste une fois ?
@+
😎26 juin 2024 à 10:13 #74566BerbycParticipantPas de problème pour ça, mais peut-on dupliquer cette page plusieurs fois ou juste une fois ?
Oui, on peut dupliquer cette page une fois ou bien plusieurs fois selon le besoin
26 juin 2024 à 17:08 #74571bebarthMaître des clésbonjour,
Voilà, je redonne l’ensemble des scripts qui ont, pour certains, un peu évolués :
// Scripts de document
//
var nbDepart=0;
for (var i=0; i<this.numFields; i++) {
if (/^Départ\.\d+/.test(this.getNthFieldName(i))) nbDepart++;
}
var fichier=this.getDataObjectContents("Départ.csv");
var donnees=util.stringFromStream(fichier);
var lignes=donnees.split("\r\n");
var colonnes=new Array();
for (var ii=0 ; ii
var colonne0=[];`
for (var j=0 ; j
if (colonnes[j][0]) colonne0.push([colonnes[j][0]]);`
}
for (var i=1; i<=colonne0.length; i++) {
eval("var colonne"+(i+1)+"=[];");
for (var j=0 ; j
if (colonnes[j][i+1]) eval(“colonne”+(i+1)).push(colonnes[j][i+1]);`
}
}
colonne0[0].push(0);
for (var ii=1; ii<colonne0.length; ii++) {
colonne0[ii].push(eval("colonne"+(i+1)))
}
// Fichier "Départ Arrivée.csv"
var fichierDA=this.getDataObjectContents("Départ Arrivée.csv");
var donneesDA=util.stringFromStream(fichierDA);
var lignesDA=donneesDA.split("\r\n");
var colonnesDA=new Array();
for (var i=0 ; i
for (var i=1; i<=colonnesDA[0].length; i++) {`
eval("var colonne"+(i+1)+"DA=[\"- Sélectionnez -\"];");
for (var j=1 ; j
if (colonnesDA[j][i+1]) eval(“colonne”+(i+1)+”DA”).push(colonnesDA[j][i+1]);`
}
}
//
var leCanal=this.getField("Canal").value;
this.getField("Canal").clearItems();
this.getField("Canal").setItems(colonne0);
this.getField("Canal").value=leCanal;
//
function menuCanal(laValeur) {
try {
for (var i=0; i<nbDepart; i++) {
this.getField("Départ."+i).clearItems();
this.getField("Arrivée."+i).clearItems();
}
if (laValeur!=0) {
var leMenu=laValeur.split(",");
var ind=leMenu[0].substr("Canal ".length);
leMenu[0]=["- Sélectionnez -",0];
for (var ii=1; ii<leMenu.length; ii++) {
leMenu[ii]=[leMenu[ii],eval("colonne"+(i+1)+"DA")];
}
for (var i=0; i<nbDepart; i++) {
this.getField("Départ."+i).clearItems();
this.getField("Départ."+i).setItems(leMenu);
}
}
} catch(e) {}
}
//
function menuDepart(ind,laValeur) {
this.getField("Arrivée."+ind).clearItems();
this.getField("Arrivée."+ind).setItems(laValeur.split(","));
}
function menuArrivee(leChamp) {
try {
var ind=leChamp.name.substring(leChamp.name.indexOf(".")+1);
var laTable=this.getField("Départ."+ind).value.split(",");
for (var i=0; i<nbDepart; i++) {
if (i==ind) continue;
for (j=0; j<leChamp.numItems; j++) {
if (this.getField("Départ."+i).getItemAt(this.getField("Départ."+i).currentValueIndices,false)==this.getField("Départ."+ind).getItemAt(this.getField("Départ."+ind).currentValueIndices,false) && this.getField("Arrivée."+i).value==laTable[j]) laTable.splice(j,1);
}
}
var lArrivee=leChamp.value;
leChamp.clearItems();
leChamp.setItems(laTable);
leChamp.value=lArrivee;
} catch(e) {}
}
//
function cAc(arrivee) {
if (this.getField("Canal").value && this.getField("Départ.0").value && arrivee!="- Sélectionnez -") {
this.getField("Check Box1").display=display.noPrint;
} else {
this.getField("Check Box1").display=display.hidden;
var modeles=this.templates;
if (this.getField("Check Box1").value!="Off") {
for (ii=0; ii<modeles.length; ii++) {
if (modeles[ii].name=="page2") {
this.deletePages(1);
break;
}
}
}
this.getField("Check Box1").value="Off";
this.pageNum=0;
}
}
// Script de touches personnalisé Menu "Canal"
if (!event.willCommit) {
menuCanal(event.changeEx);
cAc(this.getField("Arrivée.0").value);
}
// Script de touches personnalisé des Menus "Départ" sauf "Départ.0"
if (!event.willCommit) {
if (event.changeEx!=0) {
menuDepart(event.target.name.substring(event.target.name.indexOf(".")+1),event.changeEx);
cAc(this.getField("Arrivée.0").value);
} else {
this.getField("Arrivée."+event.target.name.substring(event.target.name.indexOf(".")+1)).clearItems();
}
}
// Script de touches personnalisé Menu "Départ.0"
if (!event.willCommit) {
if (event.changeEx!=0) {
menuDepart(event.target.name.substring(event.target.name.indexOf(".")+1),event.changeEx);
cAc(this.getField("Arrivée.0").value);
} else {
this.getField("Arrivée."+event.target.name.substring(event.target.name.indexOf(".")+1)).clearItems();
this.getField("Check Box1").display=display.hidden;
var modeles=this.templates;
if (this.getField("Check Box1").value!="Off") {
for (ii=0; ii<modeles.length; ii++) {
if (modeles[ii].name=="page2") {
this.deletePages(1);
break;
}
}
}
this.getField("Check Box1").value="Off";
this.pageNum=0;
}
}
// Ajout Script de touches personnalisé de TOUS les Menus "Départ" sauf "Départ.0"
for (var i=1; i<30; i++) {
this.getField("Départ."+i).setAction("Keystroke","if (!event.willCommit) {\r\tif (event.changeEx!=0) {\r\t\tmenuDepart(event.target.name.substring(event.target.name.indexOf(\".\")+1),event.changeEx);\r\t\tcAc(this.getField(\"Arrivée.0\").value);\r\t} else {\r\t\tthis.getField(\"Arrivée.\"+event.target.name.substring(event.target.name.indexOf(\".\")+1)).clearItems();\r\t}\r}");
}
// Script de touches personnalisé Menu "Arrivée.0"
if (!event.willCommit) {
if (event.changeEx!="- Sélectionnez -") cAc(event.changeEx);
}
// Souris entrée de tous les Menus "Arrivée"
menuArrivee(event.target);
// Ajout Script Souris entrée de TOUS les Menus "Arrivée"
for (var i=0; i<30; i++) {
this.getField("Arrivée."+i).setAction("MouseEnter","menuArrivee(event.target);");
}
// Script d'ouverture de page
if (app.viewerType!="Exchange-Pro") this.viewState={overViewMode:2};
this.viewState={overViewMode:5}
// Script Affichage Page 2
if (event.target.value!="Off") {
var modeles=this.templates;
for (ii=0; ii<modeles.length; ii++) {
if (modeles[ii].name=="page2") {
modeles[ii].spawn(1, false, false);
break;
}
}
this.pageNum=0;
} else {
this.deletePages(1);
}
// Ajouter page 4
var modeles=this.templates;
for (ii=0; ii<modeles.length; ii++) {
if (modeles[ii].name=="page4") {
modeles[ii].spawn(this.numPages-1, false, false);
break;
}
}
PS : Les [ii] dans les scripts ci-dessus sont en fait de simples “i” entre crochets dans le document joint. Il est donc préférable de se reporter aux scripts contenus dans le fichier ci-joint.
@+
😎- Cette réponse a été modifiée le il y a 6 mois et 4 semaines par bebarth.
Attachments:
You must be logged in to view attached files. -
AuteurRéponses
- Vous devez être connecté pour répondre à ce sujet.