abracadabraPDF › Forums › PDF – Général › Liste déroulante d’après champ du formulaire
- Ce sujet est vide.
-
CréateurSujet
-
1 avril 2019 à 19:29 #46040micka92Membre
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 2Par 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…”.
-
CréateurSujet
-
AuteurRéponses
-
2 avril 2019 à 08:00 #65540bebarthMaî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:2 avril 2019 à 11:30 #65541MerlinMaître des clésje 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:4 avril 2019 à 19:48 #65542micka92MembreBonsoir 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).
4 avril 2019 à 20:59 #65543bebarthMaître des clésbonsoir,
…et du coup, mon script te convient ?
@+
:bonjour:4 avril 2019 à 21:14 #65544micka92MembreJe suis en train de le décortiquer pour le comprendre
4 avril 2019 à 21:18 #65545micka92MembreAlors 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.
4 avril 2019 à 21:59 #65546bebarthMaître des clésOups,
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:5 avril 2019 à 07:42 #65547micka92MembreOups,
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 ?
5 avril 2019 à 11:18 #65548bebarthMaître des clésbonjour,
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:5 avril 2019 à 15:18 #65549micka92Membrebonjour,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||AdressenCPnVILLE5 avril 2019 à 20:14 #65550micka92MembreJe 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
Valeur3Mais du coup, comment l’intégrer en script ?
5 avril 2019 à 20:15 #65551bebarthMaître des clésJe 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:6 avril 2019 à 12:29 #65552MerlinMaître des clésJe 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:7 avril 2019 à 07:59 #65553micka92MembreJe 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_mail3Ma 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
VILLEUn champ texte “Mail” doit suivant le choix de la liste déroulante afficher :
MailJe 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 !
7 avril 2019 à 19:38 #65554micka92MembreBon, bah je n’arrive pas au résultat escompté par mes propres moyens. :oh:
8 avril 2019 à 10:26 #65555micka92MembreJe 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|Mail3Ma 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.
8 avril 2019 à 11:23 #65556MerlinMaître des clésC’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.
8 avril 2019 à 12:17 #65557micka92MembreC’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 #.
8 avril 2019 à 14:41 #65558bebarthMaître des clés…je regarde demain, désolé !
@+
:bonjour:8 avril 2019 à 14:55 #65559micka92Membre…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 !
8 avril 2019 à 17:41 #65560MerlinMaître des clésOTAN 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:8 avril 2019 à 20:49 #65561micka92MembreGrâ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…
9 avril 2019 à 09:01 #65562bebarthMaître des clésbonjour,
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:9 avril 2019 à 15:01 #65563micka92Membrebonjour,
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.
9 avril 2019 à 16:59 #65564bebarthMaître des clés…et ça ne te serait pas possible de mettre tes données dans un fichier attaché ?
@+
:bonjour:10 avril 2019 à 12:16 #65565micka92Membre…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.
10 avril 2019 à 20:02 #65566micka92MembreDu 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|Age2Ma 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.
11 avril 2019 à 11:49 #65567bebarthMaître des clésbonjour,
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; ivar 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:12 avril 2019 à 07:08 #65568micka92Membrebonjour,
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; ivar 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.
12 avril 2019 à 08:30 #65569bebarthMaître des clésbonjour,
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 -
AuteurRéponses
- Vous devez être connecté pour répondre à ce sujet.