Skip to main content
Participant
November 3, 2023
해결됨

Créer une liste déroulante dépendante d'une autre

  • November 3, 2023
  • 3 답변들
  • 14079 조회

Bonjour,

 

Je souhaite créer un formulaire PDF avec 2 liste déroulante. Une première liste déroulante contenant le noms des Pôles (Ressources, Vie Sociale, Animation) et une seconde avec le directions des directions des pôles (Finances, DRH, DSI, etc). Chaque pôle possède ses propres directions.

Je souhaiterai qu'après avoir sélectionné le pôle dans la liste 1, la liste 2 ne propose que les directions du pôle sélectionné dans la liste 1.

J'espère avoir été clair et je vous remercie d'avance pour votre aide.

최고의 답변: JR Boulay

Vous trouverez tout ce que vous voulez savoir sur cette page, en Français et c'est gratuit : https://www.abracadabrapdf.net/forums/search/liste+mere+fille/

3 답변

JR Boulay
Community Expert
Community Expert
November 13, 2023

Ce sujet est un condensé récent de toute cette problématique.

Il explique même comment importer les données depuis un fichier Excel/CSV, pour une mise à jour plus facile :

https://www.abracadabrapdf.net/forums/topic/champs-adresses-remplis-apres-selections-nom-dans-liste/

Acrobate du PDF, InDesigner et Photoshopographe
JR Boulay
Community Expert
JR BoulayCommunity Expert답변
Community Expert
November 5, 2023

Vous trouverez tout ce que vous voulez savoir sur cette page, en Français et c'est gratuit : https://www.abracadabrapdf.net/forums/search/liste+mere+fille/

Acrobate du PDF, InDesigner et Photoshopographe
David PARRA작성자
Participant
November 13, 2023

Bonjour,

 

Merci pour ce lien, ce site est super !!!

J'ai trouvé ce qu'il me fallait grâce à lui, et je vous explique comment j'ai fait (pour les novices comme moi) :

Tout d'abord, il faut créer un simple fichier texte où vous collerez le script afin de pouvoir le copier-coller plus tard.

Voici le script à copier dans votre fichier texte :

 

//-------------------------------------------------------------
//-----------------Ne pas modifier les balises XML--------------------
//-------------------------------------------------------------
/*
LICENSE:
acrojs_dependentList.js by Joel Geraci is licensed under a Creative Commons Attribution 4.0 International License.
You are free to:
Share — copy and redistribute the material in any medium or format
Adapt — remix, transform, and build upon the material for any purpose, even commercially.
Setup:
For list boxes:  Add this script to the "selection change" script of the master list box.
For combo boxes: Add this script to the "custom format" script of the dropdown box. 
IMPORTANT!
Edit the following line to identify the field name of the dependent list box then edit the properties of the dependentListValues JSON object. Property names should correspond to the export values of the list items.
*/
var dependentListBoxFieldName = "dependentListBox";
var dependentListValues = 
{
"PR": [
["Direction générale du pôle", "DGPR"],
["DRH", "DRH"],
["DBMG", "DBMG"],
["FINANCES", "F"],
["DAJCP (Direction Affaires Juridiques & Commande Publique)", "DAJCP"],
["DSI", "DSI"]
],
"PVS": [
["Direction générale du pôle", "DGPVS"],
["DAF (Direction Administration & Finances)", "DAFPVS"],
["DIE (Direction Insertion et Emploi)", "DIE"],
["LOG (Direction Logement et Habitat)", "LOG"],
["MLA (Maison Loire Autonomie)", "MLA"],
["PE (Direction Enfance)", "PE"],
["TDS (Territoires Développement Social)", "TDS"]
],
"PADD": [
["Direction générale du pôle", "DGPADD"],
["DAF (Direction Administration & Finances)", "DAFPADD"],
["FA (Direction Eau, Environnement, Forêt & Agriculture)", "FA"],
["PAI (Direction Projets d'Aménagement d'Infrastructures)", "PAI"],
["PREE (Direction Patrimoine Routier, Entretien & Exploitation", "PREE"],
["STE (Direction Services Territoriaux) : parc routier + CDEE + STD", "STE"]
],
"PAAE": [
["Direction générale du pôle", "DGPAAE"],
["DAF (Direction Administration & Finances)", "DAFPADD"],
["ARCH (Directoin des Archives Départementales", "ARCH"],
["CULT (Direction de la Culture)", "CULT"],
["ED (Direction de l'Education)", "EDUC"],
["ING. TER (Direction Ingénierie et Solidarités territoriales)", "INGTER"],
["LM (Direction du Livre et du Multimédia)", "DDLM"],
["DA (Direction Attractivité) : Chalmazel + Sports", "DA"]
],
"CAB": [
["Cabinet du Président", "CabPres"],
["COMM (Direction de la Communication", "COMM"],
["Cabinet Antenne Roanne", "CABROA"],
["Cabinet Groupes Politiques (tous les élus)", "CABPOLI"],
["Cabinet St Etienne & Montbrison", "CABSTE"],
["Cabinet secrétariat Elus", "CABELUS"],
],
"DGS": [
["Direction", "DDGS"],
["SG (Secrétariat Général)", "SG"],
],
"Asso, syndic & Groupements": [
["CDT", "CDT"],
["CGAS", "CGAS"],
["MDPH (Maison Départementale des Personnes Handicapées", "MDPH"],
["Syndicats", "Syndic"],
],
"SMAP": [
["Direction", "DSMAP"],
["TN (Direction Transition Numérique", "DTN"],
],
};
/*
You probably don't need to change anything from here down
*/
if ((event.target.type == "combobox" && event.name == "Format") || (event.target.type == "listbox" && event.name == "Keystroke")) {
if (event.target.type == "combobox") {
if (dependentListValues.hasOwnProperty(event.target.value)) {
this.getField(dependentListBoxFieldName).setItems(dependentListValues[event.target.value]);
}
else {
this.getField(dependentListBoxFieldName).clearItems();
}
}
if (event.target.type == "listbox" && dependentListValues.hasOwnProperty(event.changeEx)) {
this.getField(dependentListBoxFieldName).setItems(dependentListValues[event.changeEx]);
}
}
else {
app.alert("This script was not intended for this field type or event.");
}

quote

 

Dans ce script, la 1ere liste contiendra PR, PVS, PADD, etc et la seconde Direction générale du pôle, DSI, DRH, etc.

Je vous laisse le plaisir de changer ces valeurs, gardez bien les espaces et tous les caractères spéciaux (les " et [ ] par exemple) pour éviter de faire planter le script.

 

Ensuite, ouvrez votre fichier PDF et créez 2 listes déroulantes (leur nom importe peu).

Une fois créé, il faudra activer le module Javascript : Affichage > Outils > javascript

Cliquez ensuite sur "Modifier tous les scripts Javascript"

Effacez tout le contenu de la fenêtre qui vient de s'ouvrir, puis collez le script ci-dessus. Cliquez sur OK

 

Maintenant vous allez devoir modifier la 1ere liste déroualnte pour lui injecter ce script :

Allez dans Affichage > Outils > Formulaires

Cliquer sur Modifier

Sélectionnez votre 1ere liste puis faites un clic droit et cliquez sur Propriétés

Dans la nouvelle fenêtre, cliquez sur l'onglet Format

Dans Catégorie de format, séelctionnez Personnalisée

Juste en dessous, dans la partie Script de format personnalisé, cliquez sur Modifier situé à droite

Collez le script puis validez

Allez dans l'onglet Options puis ajoutez ici le nom des valeurs de votre liste (pour moi ce sera PR, PVS, PAAE, etc)

Validez et testez, normalement cela devrait fonctionner (en tout cas c'est le cas pour moi).

 

J'espère avoir été clair et précis.

Comme je l'expliquai au début, je suis un novice, donc je ne vous serai d'aucune aide pour débugguer votre PDF....

Le seul conseil que je peux vous donner c'est d'aller sur le site https://www.abracadabrapdf.net qui ets juste génial !!!

 

Participating Frequently
March 28, 2025

Bonjour, 

J'ai pris le script dont David mentionnait, le voici:

//-------------------------------------------------------------

//-----------------Ne pas modifier les balises XML--------------------

//-------------------------------------------------------------

/*

LICENSE:

acrojs_dependentList.js by Joel Geraci is licensed under a Creative Commons Attribution 4.0 International License.

https://creativecommons.org/licenses/by/4.0/

You are free to:

Share — copy and redistribute the material in any medium or format

Adapt — remix, transform, and build upon the material for any purpose, even commercially.

Setup:

For list boxes:  Add this script to the "selection change" script of the master list box.

For combo boxes: Add this script to the "custom format" script of the dropdown box. 

IMPORTANT!

Edit the following line to identify the field name of the dependent list box then edit the properties of the dependentListValues JSON object. Property names should correspond to the export values of the list items.

*/

var dependentListBoxFieldName = "dependentListBox";

var dependentListValues = 

{

"PR": [

["Direction générale du pôle", "DGPR"],

["DRH", "DRH"],

["DBMG", "DBMG"],

["FINANCES", "F"],

["DAJCP (Direction Affaires Juridiques & Commande Publique)", "DAJCP"],

["DSI", "DSI"]

],

"PVS": [

["Direction générale du pôle", "DGPVS"],

["DAF (Direction Administration & Finances)", "DAFPVS"],

["DIE (Direction Insertion et Emploi)", "DIE"],

["LOG (Direction Logement et Habitat)", "LOG"],

["MLA (Maison Loire Autonomie)", "MLA"],

["PE (Direction Enfance)", "PE"],

["TDS (Territoires Développement Social)", "TDS"]

],

"PADD": [

["Direction générale du pôle", "DGPADD"],

["DAF (Direction Administration & Finances)", "DAFPADD"],

["FA (Direction Eau, Environnement, Forêt & Agriculture)", "FA"],

["PAI (Direction Projets d'Aménagement d'Infrastructures)", "PAI"],

["PREE (Direction Patrimoine Routier, Entretien & Exploitation", "PREE"],

["STE (Direction Services Territoriaux) : parc routier + CDEE + STD", "STE"]

],

"PAAE": [

["Direction générale du pôle", "DGPAAE"],

["DAF (Direction Administration & Finances)", "DAFPAAE"],

["ARCH (Directoin des Archives Départementales", "ARCH"],

["CULT (Direction de la Culture)", "CULT"],

["ED (Direction de l'Education)", "EDUC"],

["ING. TER (Direction Ingénierie et Solidarités territoriales)", "INGTER"],

["LM (Direction du Livre et du Multimédia)", "DDLM"],

["DA (Direction Attractivité) : Chalmazel + Sports", "DA"]

],

"CAB": [

["Cabinet du Président", "CabPres"],

["COMM (Direction de la Communication", "COMM"],

["Cabinet Antenne Roanne", "CABROA"],

["Cabinet Groupes Politiques (tous les élus)", "CABPOLI"],

["Cabinet St Etienne & Montbrison", "CABSTE"],

["Cabinet secrétariat Elus", "CABELUS"],

],

"DGS": [

["Direction", "DDGS"],

["SG (Secrétariat Général)", "SG"],

],

"Asso, syndic & Groupements": [

["CDT", "CDT"],

["CGAS", "CGAS"],

["MDPH (Maison Départementale des Personnes Handicapées", "MDPH"],

["Syndicats", "Syndic"],

],

"SMAP": [

["Direction", "DSMAP"],

["TN (Direction Transition Numérique", "DTN"],

],

};

/*

You probably don't need to change anything from here down

*/

if ((event.target.type == "combobox" && event.name == "Format") || (event.target.type == "listbox" && event.name == "Keystroke")) {

if (event.target.type == "combobox") {

if (dependentListValues.hasOwnProperty(event.target.value)) {

this.getField(dependentListBoxFieldName).setItems(dependentListValues[event.target.value]);

}

else {

this.getField(dependentListBoxFieldName).clearItems();

}

}

if (event.target.type == "listbox" && dependentListValues.hasOwnProperty(event.changeEx)) {

this.getField(dependentListBoxFieldName).setItems(dependentListValues[event.changeEx]);

}

}

else {

app.alert("This script was not intended for this field type or event.");

}

 


j'ai fait la démarche qu'il explique, mais ça ne fonctionne pas pour moi, je ne sais pas quoi faire avec la deuxième liste, dois-je inscrire le script aussi? est-ce parce que je n'ai pas tout inscrit les champs des listes? 

 

Ensuite, ouvrez votre fichier PDF et créez 2 listes déroulantes (leur nom importe peu).

Une fois créé, il faudra activer le module Javascript : Affichage > Outils > javascript

Cliquez ensuite sur "Modifier tous les scripts Javascript"

Effacez tout le contenu de la fenêtre qui vient de s'ouvrir, puis collez le script ci-dessus. Cliquez sur OK

 

Maintenant vous allez devoir modifier la 1ere liste déroualnte pour lui injecter ce script :

Allez dans Affichage > Outils > Formulaires

Cliquer sur Modifier

Sélectionnez votre 1ere liste puis faites un clic droit et cliquez sur Propriétés

Dans la nouvelle fenêtre, cliquez sur l'onglet Format

Dans Catégorie de format, séelctionnez Personnalisée

Juste en dessous, dans la partie Script de format personnalisé, cliquez sur Modifier situé à droite

Collez le script puis validez

Allez dans l'onglet Options puis ajoutez ici le nom des valeurs de votre liste (pour moi ce sera PR, PVS, PAAE, etc)

Validez et testez, normalement cela devrait fonctionner (en tout cas c'est le cas pour moi).

Thom Parker
Community Expert
Community Expert
November 3, 2023

The simple approach is to use a Custom Validation Script on the first list to set the items in the second list. 

 

Here's a script for List#1 that shows the pattern

 

if ( event . value ==  "Finance" ) 
     this . getField ( "List2" ) . setItems ( [ "AA" , "BB" , "CC" ] ) ; 
else  if ( event . value ==  "HR" ) 
     this . getField ( "List2" ) . setItems ( [ "aa" , "bb" , "cc" ] ) ;

 

 

List #1 should have the "Commit selected value immediatly" option selected. 

 

Thom Parker - Software Developer at PDFScriptingUse the Acrobat JavaScript Reference early and often