Donnez vie à vos documents numériques !
 

Liste déroulante d’après champ du formulaire

abracadabraPDF Forums PDF – Général Liste déroulante d’après champ du formulaire

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

    Bonsoir,

    Je vais essayer d’être clair dans ma demande.

    J’aurais besoin de pouvoir alimenter une liste déroulante et un champ texte, grâce à des valeurs contenues dans un autre champ. En gros, je m’imagine un champ texte dans lequel on pourrait mettre des valeurs ligne par ligne comme exemple :
    Titre 1||Valeur 1
    Titre 2||Valeur 2

    Par la suite, il faudrait que ma liste déroulante s’alimente avec les données “Titre 1, Titre 2…” et que mon champ texte associé s’alimente avec les données “Valeur 1, Valeur 2…”.

Affichage de 30 réponses de 1 à 30 (sur un total de 30)
  • Auteur
    Réponses
  • #65540
    bebarth
    Maître des clés

    bonjour,
    Voilà !
    Si j’ai bien compris ce que tu voulais faire, il faut créer une table avec le texte récupéré de ton champ et coupé à chaque saut de ligne puis alimenter la liste en définissant chaque élément par un élément de la table divisé à chaque ||…
    Je ne sais pas si je suis très clair !!! Tu regarderas le script…
    @+
    :bonjour:

    #65541
    Merlin
    Maître des clés

    je m’imagine un champ texte dans lequel on pourrait mettre des valeurs ligne par ligne comme exemple :

    Tu en as rêvé, le PDF l’a fait : ça s’appelle une “zone de liste”. La principale différence avec la “liste déroulante” c’est que tous les items sont affichés en permanence.
    :Smiley15:

    #65542
    micka92
    Membre

    Bonsoir Merlin,

    Non pas tout à fait. Je connais la liste déroulante, et ce n’est pas ce dont j’ai besoin. Dans mon cas, l’utilisateur doit pouvoir modifier les valeurs de la liste depuis le fichier PDF lui-même (sans avoir une version Pro d’Adobe).

    #65543
    bebarth
    Maître des clés

    bonsoir,
    …et du coup, mon script te convient ?
    @+
    :bonjour:

    #65544
    micka92
    Membre

    Je suis en train de le décortiquer pour le comprendre ;)

    #65545
    micka92
    Membre

    Alors c’est exactement ça, mais par contre, je ne peux pas choisir de valeur de la liste déroulante ainsi générée. Cela reste automatiquement sur la dernière valeur.

    #65546
    bebarth
    Maître des clés

    Oups,
    Je me souviens avoir changé d’avis au dernier moment sans avoir assez vérifié apparemment !
    J’avais placé le script en calcul du champ texte au lieu de script de souris enfoncée sur la liste… Je ne me souviens plus pourquoi.
    J’ai remis le script sur la liste déroulante.
    @+
    :bonjour:

    #65547
    micka92
    Membre

    Oups,
    Je me souviens avoir changé d’avis au dernier moment sans avoir assez vérifié apparemment !
    J’avais placé le script en calcul du champ texte au lieu de script de souris enfoncée sur la liste… Je ne me souviens plus pourquoi.
    J’ai remis le script sur la liste déroulante.
    @+
    :bonjour:

    Super bebarth, t’es un chef ! Dernière petite question : j’ai mis des n dans mon champ pour faire apparaître des sauts de ligne sur les valeurs 1, 2, 3 etc mais ça m’affiche n et ne fait pas de saut de ligne. Existe-t-il une astuce ?

    #65548
    bebarth
    Maître des clés

    bonjour,

    j’ai mis des n dans mon champ pour faire apparaître des sauts de ligne sur les valeurs 1, 2, 3 etc mais ça m’affiche n et ne fait pas de saut de ligne. Existe-t-il une astuce ?

    Je ne suis pas certain de comprendre ! Tu écris “Titre 1||Valeur 1nTitre 2||Valeur 2nTitre 3||Valeur 3nTitre 4||Valeur 4nTitre 5||Valeur 5nTitre 6||Valeur 6” dans ton champ texte ???
    si c’est ça, tu remplaces “var laChaine = lesValeurs.split(“u000D“);” par “var laChaine = lesValeurs.split(“\n“);”
    @+
    :bonjour:

    #65549
    micka92
    Membre

    bonjour,Je ne suis pas certain de comprendre ! Tu écris “Titre 1||Valeur 1nTitre 2||Valeur 2nTitre 3||Valeur 3nTitre 4||Valeur 4nTitre 5||Valeur 5nTitre 6||Valeur 6” dans ton champ texte ???
    si c’est ça, tu remplaces “var laChaine = lesValeurs.split(“u000D“);” par “var laChaine = lesValeurs.split(“\n“);”
    @+
    :bonjour:

    En fait, c’est au sein même de mes données Valeur 1, Valeur 2 etc que j’ai besoin de faire apparaître des sauts de ligne. Du coup, dans mon champ de données total, j’ai écrit n, mais sur le champ valeur qui s’affiche en fonction de la liste déroulante créée, bah j’ai toujours n qui s’affiche, et pas de saut de ligne.

    Exemple :
    Magasin Fourre-Tout||AdressenCPnVILLE
    Magasin Tartampion||AdressenCPnVILLE

    #65550
    micka92
    Membre

    Je pense, sauf erreur de ma part, qu’il est impossible de renseigner un code quelconque représentant un saut de ligne, pour qu’il apparaisse comme un saut de ligne dans un autre. Pour autant, je me dis qu’il est possible pour moi de renseigner mes données de la façon suivante :
    Titre1||Valeur1||Valeur2||Valeur3…

    Du coup, je renseignerais ma liste déroulante avec Titre1, et il faudrait que je renseigne mon champ texte avec :
    Valeur1
    Valeur2
    Valeur3

    Mais du coup, comment l’intégrer en script ?

    #65551
    bebarth
    Maître des clés

    Je n’ai pas compris tout de suite ce que tu voulais comme résultat !
    Voilà une version qui devrait correspondre.
    Ne pas oublier de mettre le champ texte en lignes multiples;
    @+
    :bonjour:

    #65552
    Merlin
    Maître des clés

    Je me dois d’insister : il est beaucoup plus simple de remplir les lignes d’une zone de liste que de réinventer la roue dans un champ de texte multiligne.
    :geek:

    #65553
    micka92
    Membre

    Je n’ai pas compris tout de suite ce que tu voulais comme résultat !
    Voilà une version qui devrait correspondre.
    Ne pas oublier de mettre le champ texte en lignes multiples;
    @+
    :bonjour:

    Merci beaucoup, c’est exactement ce que je cherchais. Si ce n’est que dans “this.getField(“Liste”).insertItemAt(laValeur[0],laValeur[1],i);”, cela m’incrémente la liste de choix avec pour pour libellé laValeur[0], et pour valeur d’exportation laValeur[1]. Du coup, comme il me fallait comme valeur d’exportation la même chose que le libellé, j’ai remplacé 1 par 0. Cela fonctionne.

    Par contre pour la suite, je n’arrive plus à suivre. En effet, dans mon script de calcul du champ “Adresse”, quelque chose coince. En effet, je pense que ton script prenait la valeur d’exportation, soit laValeur[1] (je ne sais pas comment d’ailleurs), pour la découper grâce au séparateur n, que je vais remplacer par # d’ailleurs car j’avais pris n pensant que ça me ferait des sauts de ligne. Du coup, comme ma valeur d’exportation ne contient plus que le libellé, les lignes 2 et 3 sont “undefined”.

    Du coup, mon besoin est :
    Champ texte avec
    Libellé1|Adresse1#CP1#VILLE1|Adresse_mail1
    Libellé2|Adresse2#CP2#VILLE2|Adresse_mail2
    Libellé3|Adresse3#CP3#VILLE3|Adresse_mail3

    Ma liste déroulante doit s’incrémenter avec pour libellé et valeur d’exportation “Libellé1”, “Libellé2”, “Libellé3″…

    Un champ texte “Adresse” doit suivant le choix de la liste déroulante afficher :
    Adresse
    CP
    VILLE

    Un champ texte “Mail” doit suivant le choix de la liste déroulante afficher :
    Mail

    Je continue d’essayer de mon côté car même si je n’y arrive pas avant que tu puisses m’aider, cela m’aide à comprendre tes macros ! ;)

    #65554
    micka92
    Membre

    Bon, bah je n’arrive pas au résultat escompté par mes propres moyens.  :oh:

    #65555
    micka92
    Membre

    Je me dois d’insister : il est beaucoup plus simple de remplir les lignes d’une zone de liste que de réinventer la roue dans un champ de texte multiligne.
    :geek:

    Bonjour ami Merlin,

    En quoi une zone de liste pourrait m’être utile ?

    En effet, mon besoin est le suivant :

    Je veux un champ texte que je masquerais via un bouton (ça je sais faire :p).
    Dedans, il y aura des données comme ci-après :

    Titre1|Adresse1#CP1#Ville1|Mail1
    Titre2|Adresse2#ComplémentAdresse2#CP2#Ville2|Mail2
    Titre3|Adresse3#CP3#Ville3|Mail3

    Ma liste déroulante “Liste” doit s’incrémenter avec les valeurs Titre1, Titre2, Titre3… aussi bien en libellé qu’en élément qu’en valeur d’exportation.

    Mon champ texte “Adresse” doit s’incrémenter avec les valeurs Adresse, Complément d’adresse (si existant), CP et Ville, avec un affichage ligne par ligne à chaque séparateur #.

    Enfin, mon champ texte “Mail” doit s’incrémenter avec les valeurs Mail1, Mail2, Mail3…

    Du coup, je ne vois pas en quoi la zone de liste pourrait m’être utile.

    #65556
    Merlin
    Maître des clés

    C’est une réflexion d’ordre général.
    J’ai vu plus haut que tu galérais avec les sauts de ligne dans le champ texte, alors qu’une zone de liste se remplit obligatoirement ligne par ligne (item par item), comme les listes déroulantes.

    Faute de voir le document il est difficile d’être plus précis.

    #65557
    micka92
    Membre

    C’est une réflexion d’ordre général.
    J’ai vu plus haut que tu galérais avec les sauts de ligne dans le champ texte, alors qu’une zone de liste se remplit obligatoirement ligne par ligne (item par item), comme les listes déroulantes.

    Faute de voir le document il est difficile d’être plus précis.

    Ci-joint le fichier fourni par bebarth sur lequel j’ai tenté de travailler.

    La liste déroulante s’alimente bien, sauf que les valeurs d’exportation devraient être les mêmes que celles des éléments. Pour cela, je sais qu’il faut juste modifier 1 par 0 dans le script, mais du coup, comme la suite utilise la valeur d’exportation, ça ne fonctionne plus.

    Pour le reste, je n’arrive pas à saucissonner mes lignes, puis les valeurs ligne par ligne séparées par “|”, puis enfin le bloc valeur 2 découpé par des #.

    #65558
    bebarth
    Maître des clés

    …je regarde demain, désolé !
    @+
    :bonjour:

    #65559
    micka92
    Membre

    …je regarde demain, désolé !
    @+
    :bonjour:

    Pas de soucis, j’ai eu du mal à exprimer mon besoin. Je dois rendre mon projet ce soir, donc je vais le laisser en l’état (je voulais juste apporter la possibilité de pouvoir offrir un champ de personnalisation plutôt que de refournir un nouveau formulaire à chaque fois). L’avantage c’est que les données en question sont plutôt… “stables”, et ne devraient donc pas changer tous les 4 matins.

    Néanmoins, je suis preneur de la solution pour une prochaine fois ! ;)

    #65560
    Merlin
    Maître des clés

    OTAN pour moi (comme on dit en Ukraine)  :Smiley03:
    Je croyais qu’il fallait remplir un champ multi-ligne, alors que du coup, si j’ai bien compris, il faut au contraire aller piocher des éléments dedans.
    :geek:

    #65561
    micka92
    Membre

    Grâce à notre ami bebarth, j’ai ENFIN réussi à produire ce que je voulais (cf. ci-joint).

    Bon, le seul “problème”, c’est que je n’ai pas réussi à modifier les scripts pour ne pas avoir à travailler depuis les valeurs d’exportation de ma liste déroulante. Je m’explique, le script affiche ma chaîne de caractères avant “|” en valeur élément de ma liste déroulante, et la chaîne de caractères complète après “|” s’incrémente en valeur d’exportation. Du coup, tous les autres scripts récupère les données depuis la valeur d’exportation. C’est super, et cela fonctionne, mais il m’aurait fallu avoir pour valeur d’exportation la valeur élément (exemple : Fournisseur1/Fournisseur1). Mais n’arrivant pas à modifier le script en conséquence, j’ai abandonné l’idée.

    Néanmoins, je reste preneur d’une solution… ;)

    #65562
    bebarth
    Maître des clés

    bonjour,
    Désolé, mais je ne comprends plus bien ce que tu veux faire exactement !
    Les valeurs d’exportations de ta liste alimentent ton champ “Valeur” donc elles ne peuvent pas correspondre aux valeurs de la liste.
    Il faut peut-être traiter le problème différemment si c’est ça.
    @+
    :bonjour:

    #65563
    micka92
    Membre

    bonjour,
    Désolé, mais je ne comprends plus bien ce que tu veux faire exactement !
    Les valeurs d’exportations de ta liste alimentent ton champ “Valeur” donc elles ne peuvent pas correspondre aux valeurs de la liste.
    Il faut peut-être traiter le problème différemment si c’est ça.
    @+
    :bonjour:

    Je m’explique : quand je crée une simple liste déroulante, avec des valeurs Fournisseur1, Fournisseur2, Fournisseur3 etc, je mets également ces données comme valeurs d’exportation (cf. PJ).

    Dans ta macro, tu mets en valeur d’exportation toutes mes données séparées par les #. Du coup, si je dois traiter un export de données plus tard, je verrai apparaître Adresse1#CP1#VILLE1… et non Fournisseur1.

    #65564
    bebarth
    Maître des clés

    …et ça ne te serait pas possible de mettre tes données dans un fichier attaché ?
    @+
    :bonjour:

    #65565
    micka92
    Membre

    …et ça ne te serait pas possible de mettre tes données dans un fichier attaché ?
    @+
    :bonjour:

    Non pas possible car utilisé sur des tablettes.

    #65566
    micka92
    Membre

    Du coup, comment écrire un script pour qu’à partir de ma liste déroulante, je peux afficher une donnée dans un champ texte ?

    Mon champ de données :
    Nom1|Prénom1|Age1
    Nom2|Prénom2|Age2

    Ma liste déroulante s’incrémente grâce au script de bebarth, mais avec en valeur élément et valeur d’exportation Nom1, Nom2…

    Je ne sais pas comment écrire un script pour récupérer sur un champ texte la valeur Prénomx ou Agex en fonction du choix de ma liste déroulante. J’ai bien compris le script qui découpe le champ de données ligne par ligne, puis dans chaque ligne par chaque séparateur | mais je n’arrive pas à mettre la donnée souhaitée dans un champ texte directement depuis le champ de données, et non depuis la valeur d’exportation de la liste déroulante proposée par bebarth.

    #65567
    bebarth
    Maître des clés

    bonjour,
    Tes questions sont certainement très claires dans ta tête, mais personnellement je ne vois pas quel est ton problème… le fichier Doc 1.pdf que tu as partagé me parait correct et je ne vois pas pourquoi tu as besoin que la valeur d’exportation soit identique à la valeur sélectionnée. Si tu as besoin de cette valeur, tu peux la récupérer comme tu l’as justement fait dans ton champ “Fournisseur”.
    En ce qui concerne ta dernière demande, c’est plus simple :

    Code:
    // Liste en souris enfoncée
    this.getField(“Liste”).clearItems();
    var lesValeurs = this.getField(“champTexte”).value;
    var laChaine = lesValeurs.split(“u000D”);
    for (var i=0; i    var laValeur=laChaine.split(“|”);
        this.getField(“Liste”).insertItemAt(laValeur[0],laValeur[0],i);
    }

    // Nom
    var indice =this.getField(“Liste”).currentValueIndices;
    var laValeur=laChaine[indice].split(“|”);
    this.event.target.value=laValeur[0];

    // Prenom
    this.event.target.value=laValeur[1];

    // Age
    this.event.target.value=laValeur[2];

    @+
    :bonjour:

    #65568
    micka92
    Membre

    bonjour,
    Tes questions sont certainement très claires dans ta tête, mais personnellement je ne vois pas quel est ton problème… le fichier Doc 1.pdf que tu as partagé me parait correct et je ne vois pas pourquoi tu as besoin que la valeur d’exportation soit identique à la valeur sélectionnée. Si tu as besoin de cette valeur, tu peux la récupérer comme tu l’as justement fait dans ton champ “Fournisseur”.
    En ce qui concerne ta dernière demande, c’est plus simple :

    Code:
    // Liste en souris enfoncée
    this.getField(“Liste”).clearItems();
    var lesValeurs = this.getField(“champTexte”).value;
    var laChaine = lesValeurs.split(“u000D”);
    for (var i=0; i    var laValeur=laChaine.split(“|”);
        this.getField(“Liste”).insertItemAt(laValeur[0],laValeur[0],i);
    }

    // Nom
    var indice =this.getField(“Liste”).currentValueIndices;
    var laValeur=laChaine[indice].split(“|”);
    this.event.target.value=laValeur[0];

    // Prenom
    this.event.target.value=laValeur[1];

    // Age
    this.event.target.value=laValeur[2];

    @+
    :bonjour:

    Merci pour le retour. Oui, effectivement, cela me semble clair dans ma tête, mais c’est difficile à exprimer.

    En fait, j’ai besoin que mes valeurs d’exportation soient identiques aux valeurs des éléments de mes listes déroulantes car derrière, il y a tout un process qui travaille d’après ces valeurs, et le nom des champs. Et ces process ne peuvent pas être modifiés. Voilà pourquoi.

    #65569
    bebarth
    Maître des clés

    bonjour,

    En fait, j’ai besoin que mes valeurs d’exportation soient identiques aux valeurs des éléments de mes listes déroulantes car derrière, il y a tout un process qui travaille d’après ces valeurs, et le nom des champs. Et ces process ne peuvent pas être modifiés. Voilà pourquoi.

    Il faudrait voir ce que tu appelles “process”, mais avec :

    Code:
    var indice=this.getField(“Liste”).currentValueIndices; //Ici c’est la position dans la liste de l’élément sélectionné
    this.event.target.value=this.getField(“Liste”).getItemAt(indice,false);// Ici tu lis la valeur de l’élément
    this.event.target.value=this.getField(“Liste”).getItemAt(indice,true);// Ici tu lis la valeur d’exportation de l’élément

    https://help.adobe.com/en_US/acrobat/acrobat_dc_sdk/2015/HTMLHelp/index.html#t=Acro12_MasterBook%2FJS_API_AcroJS%2FField_methods.htm%23TOC_getItemAtbc-12&rhtocid=_6_1_8_31_2_11
    @+
    :bonjour:

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