Donnez vie à vos documents numériques !
 

Listes déroulantes liées et champs associés

abracadabraPDF Forums PDF – Général Listes déroulantes liées et champs associés

  • Ce sujet est vide.
  • Créateur
    Sujet
  • #45172
    micka92
    Membre

    Bonsoir.

    Après quelques recherches sur le forum, je n’ai pas trouvé le moyen de réaliser le formulaire que je souhaite :
    – Afficher une liste déroulante à 3 choix
    – Chaque choix de la première liste doit faire apparaître une seconde liste différente
    – Le choix de cette seconde liste doit faire apparaître une valeur dans un champ n°1
    – Le choix de cette seconde liste doit faire apparaître une valeur dans un champ n°2

    Le formulaire doit être utilisé sur iPad (PDF Expert).

    En espérant avoir été suffisamment explicite dans ma demande.

    Cordialement.

Affichage de 33 réponses de 1 à 33 (sur un total de 33)
  • Auteur
    Réponses
  • #59063
    jeanine63000
    Membre

    Bonjour,
    Essaye une recherche en “mère fille” ou “menu déroulant en cascade”.

    #59064
    micka92
    Membre

    Bonsoir.

    J’ai bien réussi à modifier à ma sauce le script d’un fichier sur le forum nommé “Abracadabra_Menu deroulant_Liste mere fille.pdf”.

    Problème : en modifiant les choix des menus sur ce fichier cela fonctionne parfaitement. En copiant-collant le script sur un nouveau fichier (ma création), cela ne fonctionne plus. J’ai un message d’erreur m’indiquant “Liste fille *Choix menu 1* non définie”. J’ai pourtant bien repris les deux scripts de page ainsi que le script de touches personnalisé…

    Si quelqu’un peut m’aider ! :mur:

    #59065
    Merlin
    Maître des clés

    Bonjour.

    C’est parce-que tu ne copies que la partie émergée de l’iceberg.
    L’essentiel des scripts est placé en “Script de document”, voir chapitre 3 sur cette page : http://abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/les-differents-niveaux-dutilisation-des-scripts-javascript/

    :idee:

    #59066
    micka92
    Membre

    Bonjour Merlin.

    J’ai bien recopié le script de document (que j’ai appelé script de page dans mon précédent post… :Ooops: ). J’ai le même message d’erreur que sur le fichier “Abracadabra_Menu deroulant_Liste mere fille” si je choisis Amérique du Sud puis Brésil (ce qui est normal puisque dans le script de document “Initialisation”, il n’a pas été défini de liste petite-fille pour le Brésil).

    J’ai tenté de réduire le nombre de choix à 4 sur ma liste fille car je pensais que cela pouvait venir de cela (ça peut aller à 20 pour mon besoin) mais ça ne marche toujours pas…

    #59067
    micka92
    Membre

    Je viens de tenter un vrai copier coller avec les mêmes valeurs, les mêmes scripts, les mêmes noms de champs etc mais cela ne fonctionne pas.

    Je me pose la question de savoir comment le script de document se lance au démarrage ? Y-a-t’il un réglage à faire quelque part que je ne ferai peut-être pas dans mon nouveau document ?

    #59068
    Merlin
    Maître des clés

    Ouvre ton document de travail, dans ce document de travail tu importes le document d’exemple qui contient les scripts de document (panneau Pages : Importer des pages).
    Et ensuite tu supprimes immédiatement les pages importées.

    Résultat : tous les scripts de document ont été transférés (intacts) dans ton document de travail !
    :extra:

    #59069
    micka92
    Membre

    Je viens de faire la manip. Cela fonctionne parfaitement tant que je ne ferme pas le fichier. Si je l’enregistre, le ferme et l’ouvre à nouveau, j’ai le même problème qu’avant.

    #59070
    Merlin
    Maître des clés

    A partir de là, soit tu fais passer un exemple de ton document soit on joue aux devinettes…
    :Smiley15:

    #59071
    micka92
    Membre

    Bonsoir.

    Vous trouverez ci-joint un exemple du problème concerné. Le champ “ld_ff1” est la liste mère et le champ “ld_ff2” la liste fille.

    #59072
    micka92
    Membre

    Je n’y arrive toujours pas…  :mur:

    Si j’ajoute le fichier “Abracadabra_Menu deroulant_Liste mere fille”, soit la liste fille fonctionne, soit la liste mère perd ses valeurs enregistrées. Quoiqu’il arrive, en enregistrant/fermant le fichier et l’ouvrant à nouveau, j’ai toujours le message d’erreur “Liste fille *Choix menu 1* non définie”.

    #59073
    Merlin
    Maître des clés

    Si j’ajoute le fichier “Abracadabra_Menu deroulant_Liste mere fille”

    Où trouve t’on ce document ?

    #59074
    micka92
    Membre
    #59075
    brumbies
    Membre

    Bonjour,

    Quelques Pistes…
    1) tu dois Initialiser tes listes à l’ouverture du document… Met en script d’ouverture ta fonction “Initialisation();”
    2) ta fonction initialisation comporte une ligne qui a 1 élément de trop et qui ne permet donc pas l’insertion d’Item sur tes listes…
    Ton code : this.getField(“ld_ff1”).insertItemAt(ListeN1[indexTypeFF],ListeN1[indexTypeFF],ListeN1[indexTypeFF],indexTypeFF)
    Celui qui est correct : this.getField(“ld_ff1”).insertItemAt(ListeN1[indexTypeFF],ListeN1[indexTypeFF],indexTypeFF)

    Essai ce devrait mieux fonctionner…

    :Smiley01:

    #59076
    micka92
    Membre

    Bonsoir.

    J’ai modifié la ligne en erreur mais en ce qui concerne le script d’ouverture… je ne vois pas comment faire. J’ai cherché sur le forum quelques sujets à propos de cela mais je ne pige pas  :Ooops:

    #59077
    brumbies
    Membre

    Bonsoir,

    Tu l’as peut être déjà indiqué mais tu utilises quelle logiciel pour créer ton PDF? et quelle version?
    :Smiley01:

    #59078
    micka92
    Membre

    Bonjour.

    J’utilise Adobe Acrobat XI Pro et le formulaire sera utilisé sur iPad avec PDF Expert 5.

    #59079
    brumbies
    Membre

    Bonjour,

    Donc tu peux procéder ainsi :

    1. Cliquez sur le bouton Vignettes de page, à gauche.
    2. Sélectionnez la vignette associée à la page qui vous intéresse, puis choisissez Propriétés de la page dans le menu Options AX_NavOptions_Sm_N.png.
    3. Cliquez sur l’onglet Actions.
    4. Dans le menu Sélectionner le déclencheur, choisissez Ouverture de la page pour définir une action à l’ouverture de la page ou choisissez Fermeture de la page pour définir une action à la fermeture de la page.
    5. Choisissez “Exécuter un script javascript” dans le menu Sélectionner l’action, puis cliquez sur Ajouter.
    6. [/list] :Smiley01:

    #59080
    alex
    Participant

    Bonjour à tous,
    Oui, on peut très bien lancer le script d’initialisation à l’ouverture de page.
    On peut aussi le lancer à l’ouverture du document en utilisant la procédure suivante:

    function Initialisation()
    {
    //suite des opérations à effectuer…
    }
    Initialisation()

    C’est ce que j’ai illustré dans l’exemple joint.

    #59081
    micka92
    Membre

    Bonsoir.

    Merci à vous deux pour vos différentes solutions qui fonctionnent parfaitement.

    Petite question pour ma culture personnelle : quelle est la différence entre les deux méthodes proposées ?

    #59082
    micka92
    Membre

    Autre petite question pour finaliser mon formulaire car j’ai fait des recherches mais je préfère en être sûr :
    – Le script permettant d’envoyer un formulaire PDF par mail en reprenant un champ (deux idéalement) dans l’objet fonctionnera-t-il sur PDF Expert ?

    #59083
    brumbies
    Membre

    Bonjour,

    1) Dans ton cas, il n’y a pas de différence entre les 2 méthodes au niveau du résultat recherché.
    Celui d’Alex s’exécute à l’ouverture du document. Tandis que le mien ne s’exécute qu’à l’ouverture de la page.
    Donc si la page que tu ouvres à l’ouverture contient le script il s’ouvrira à l’ouverture, alors que si ce n’est pas le cas il ne s’exécutera qu’après coup.
    De plus, la méthode d’Alex est prioritaire sur les scripts de page dans l’ordre d’exécution des scripts….

    Donc pour résumer, ça va dépendre de ce que tu souhaites faire…

    2) Il faut tester…
    :Smiley01:

    #59084
    micka92
    Membre

    Merci à tous pour votre collaboration. Mon formulaire fonctionne bien désormais.

    Faute de trop bien faire (grâce à vous), on me demande désormais d’afficher un champ et du texte si une valeur précise de ma liste déroulante est choisie. J’ai cherché sur le forum mais entre les calques et tout le reste, j’ai peur de m’y perdre…  :Ooops:

    #59085
    micka92
    Membre

    En complément d’information, ce que j’appelle “texte à afficher” fait partie de ma trame de fond du document. Cela apparaît comme un champ modifiable uniquement en allant dans “Modification du contenu > Modifier le texte et les images”.

    #59086
    Merlin
    Maître des clés

    Tu as le choix entre :

    – placer par-dessus un champ de formulaire à fond blanc pour servir de cache,

    – supprimer le texte de la page, et remplacer par un champ de formulaire qui s’affichera en fonction.

    Dans les deux cas il vaudra mieux placer le déclencheur dans la liste déroulante.

    #59087
    micka92
    Membre

    Merci Merlin !

    Cela marche parfaitement. Je suis content car j’arrive plus facilement à appréhender les scripts du site et à les adapter à mon formulaire (même si pour le coup, celui-là est très facile  :jerisjaune: ).

    Pour finaliser le tout, j’aimerais qu’un champ date s’écrive en rouge si la date inscrite est postérieure de plus de 365 jours à la date d’un autre champ date.

    #59088
    brumbies
    Membre

    Bonjour,

    As tu regardé le topic suivant?
    http://abracadabrapdf.net/forum/index.php/topic,2662.msg14500.html#msg14500
    Avec l’exemple d’Alex et en l’adaptant légèrement tu devrais pouvoir réussir à faire ce que tu veux…

    ensuite pour modifier la couleur du texte d’un champs on peut utiliser:

    Code:
    var f = this.getField(“myField”);
    f.textColor = color.red;

    ensuite pour le remettre en noir: color.black
    :Smiley01:

    #59089
    micka92
    Membre

    Bonjour.

    Effectivement, le script répond à mes attentes mais je n’arrive pas obtenir le résultat que je veux, c’est-à-dire que le texte s’affiche en rouge.

    En effet, j’ai modifié la condition de contrôle par “if ecartJ<-365" et le résultat escompté est le bon. Toutefois, le contenu du champ disparaît quand la condition est validée. Je ne comprends pas pourquoi...

    #59090
    brumbies
    Membre

    Bonjour,

    Le plus simple serait que tu post un exemple actualisé de ton fichier…
    :Smiley01:

    #59091
    micka92
    Membre

    Voilà !

    #59092
    brumbies
    Membre

    C’est tout de suite plus facile …  :geek:

    donc ton problème est que tu as définit en script de document une fonction Controle() que tu n’appelles pas … donc rien ne peut s’exécuter !
    L’astuce est de mettre au niveau de ton champs “c_dateverifdff” => Propriétés => Validation => Exécuter un script de validation personnalisé
    et tu y places l’instrcution :
    Controle();

    Ensuite attention, car si la date est supérieure à 1 an alors le texte “s’effacera” car tu as mis :
    this.event.target.fillColor=color.transparent;

    :Smiley01:

    #59093
    micka92
    Membre

    Au temps pour moi, l’exemple que j’ai envoyé ne comprends pas l’activation du script que j’ai bien dans mon document original sur le champ “Date 2”. Tout comme la couleur rouge qui est bien présente sur mon formulaire. J’ai donc envoyé un exemple en partant d’une mauvaise version désolé  :Ooops: .

    En prenant le bon document, ma date disparaît toujours quand elle est supérieure à un an :
    this.event.value=””;this.event.target.textColor=color.red;

    Par contre, si je sélectionne le champ, alors il apparaît en rouge après…  :oh:

    Pour finir, à quoi sert la ligne ? : this.event.target.fillColor=this.getField(“c_dateinter”).fillColor;

    #59094
    micka92
    Membre

    Bizarre… à la première date supérieure d’un an que j’ai mise, elle disparaît. Puis, si je saisis une nouvelle date, qu’elle soit supérieure ou inférieur à un an, elle reste en rouge.

    #59095
    brumbies
    Membre

    Ok je n’avais pas vu la ligne this.event.value=””;
    qui réinitialise à “vide” la valeur de ton champs Date2 => donc dans ton script si la condition était vrai alors la valeur disparaissait.

    De plus la fonction filColor modifie la couleur de fond et non la couleur du texte, donc inutile dans ton cas…

    donc si la condition est vrai => alors la couleur de fond se met en rouge
    sinon => elle se met de la même couleur que celle de ton champ “c_dateinter” ………. qui n’existe pas !

    donc je modifierai le code suivant

    Code:
    if(ecartJ<0)
    {
    this.event.value=””;
    this.event.target.fillColor=color.transparent;
    }
    else
    {
    this.event.target.fillColor=this.getField(“Date1”).fillColor;
    }

    par

    Code:
    if(ecartJ<-365) // pour prendre en compte la différence d'un an en moins du champs Date2 par rapport à Date1
    {
      this.event.target.textColor = color.red;
    }
    else
    {
      this.event.target.textColor = color.black;
    }

    :Smiley01:

Affichage de 33 réponses de 1 à 33 (sur un total de 33)
  • Vous devez être connecté pour répondre à ce sujet.