Donnez vie à vos documents numériques !
 

bebarth

Toutes mes réponses sur les forums

Affichage de 99 réponses de 1 à 99 (sur un total de 3,263)
  • Auteur
    Réponses
  • en réponse à : Renommer indices #75338
    bebarth
    Maître des clés

    bonjour,
    J’ai beaucoup mieux compris avec ta vidéo, et du coup je me suis aperçu qu’il y avait une erreur dans mon script (pour les menus déroulants et les listes).
    Il faut supprimer une ligne de script :
    ...
    if (leType=="combobox" || leType=="listbox") {
    var liste=new Array();
    for (var k=0; k<g.numItems; k++) {
    var valeur = g.getItemAt(k,false);
    var valeurExport = g.getItemAt(k,true);
    //       <----- Suppimer cette ligne
    var element=[valeur,valeurExport];
    liste.push(element);
    }
    f.setItems(liste);
    f.currentValueIndices=g.currentValueIndices;
    }
    ...
    Je ne me souviens pas pourquoi je l’avais mise !!! Peut-être pour une application spécifique.
    En tout cas cela fonctionne beaucoup mieux maintenant…

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Renommer indices #75332
    bebarth
    Maître des clés

    Je vais faire une petite vidéo si c’est trop confus…

    Je veux bien car je ne suis pas certain de comprendre !

    @+
    😎

    en réponse à : Custom Tool – avec multiples niveaux #75327
    bebarth
    Maître des clés

    bonjour,
    Je viens de relire ta demande, et en fait (si j’ai bien compris) tu pouvais n’utiliser que la partie “bouton” du fichier que je t’ai envoyé !
    Voici un exemple fait avec la méthode “popUpMenuEx” de l’api reference.

    //######################
    // * b2Tools * #
    // 12/24 #
    // ----------- #
    // PersoTool Example #
    // Exemple Outil Perso #
    //######################
    if (typeof app.formsVersion!="undefined" && app.formsVersion>9 && app.viewerVariation!="Reader") {
    // Traductions
    if (app.language=="FRA") {
    var txtBoutonPersoTool="Outil Perso"; // Texte bouton
    var txtInfoPersoTool="Infobulle"; // Infobulle bouton
    }
    else {
    var txtBoutonPersoTool="Personal Tool"; // Button text
    var txtInfoPersoTool="Tooltip"; // Button tooltip
    }
    // Exécution du script
    var executePersoTool=app.trustedFunction(function(){
    // Traductions
    if (app.language=="FRA") {
    var b2txt00="\u00C9l\u00E9ment 1";
    var b2txt01="\u00C9l\u00E9ment 2";
    var b2txt02="\u00C9l\u00E9ment 2, Sous-menu 1";
    var b2txt03="\u00C9l\u00E9ment 2, Sous-menu 2";
    var b2txt04="\u00C9l\u00E9ment 2, Sous-menu 2, Sous-sous-menu 1";
    var b2txt05="0";
    var b2txt06="\u00C9l\u00E9ment 3";
    var b2txt07="\u00C9l\u00E9ment 4";
    var b2txt08="1";
    var b2txt09="Vous avez choisi l'\u00E9l\u00E9ment menu \"";
    var b2txt10="\"";
    }
    else {
    var b2txt00="Item 1";
    var b2txt01="Item 2";
    var b2txt02="Item 2, Submenu 1";
    var b2txt03="Item 2, Submenu 2";
    var b2txt04="Item 2, Submenu 2, Subsubmenu 1";
    var b2txt05="0";
    var b2txt06="Item 3";
    var b2txt07="Item 4";
    var b2txt08="1";
    var b2txt09="You chose the \"";
    var b2txt10="\" menu item";
    }
    //
    var cChoice=app.popUpMenuEx(
    {
    cName: b2txt00,
    bMarked:true,
    bEnabled:false
    },{
    cName: "-"
    },{
    cName: b2txt01,
    oSubMenu: [
    {
    cName: b2txt02
    },{
    cName: b2txt03,
    oSubMenu: {
    cName:b2txt04,
    cReturn: b2txt05
    }
    }
    ]
    },{
    cName: b2txt06
    },{
    cName: b2txt07,
    bMarked: true,
    cReturn: b2txt08
    }
    )
    app.alert(b2txt09+cChoice+"\" menu item");
    //
    });
    // Icône PersoTool
    var dataIconePersoTool="ffffffffff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ffffffffff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3fffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff00ada3ff00ada3ff00ada3ff00ada3fffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff00ada3ff00ada3ff00ada3ff00ada3fffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff00ada3ff00ada3ff00ada3ff00ada3fffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff00ada3ff00ada3ff00ada3ff00ada3fffff7aefffff7aefffff7aefffff7aeffcb0000ffcb0000ffcb0000ffcb0000fffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff00ada3ff00ada3ff00ada3ff00ada3fffff7aefffff7aefffff7aefffff7aeffcb0000fffff7aefffff7aefffff7aeffcb0000fffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff00ada3ff00ada3ff00ada3ff00ada3fffff7aefffff7aefffff7aefffff7aeffcb0000fffff7aefffff7aeff21221fffcb0000ff21221fff21221fff21221ffffff7aefffff7aefffff7aefffff7aeff00ada3ff00ada3ff00ada3ff00ada3fffff7aefffff7aefffff7aefffff7aeffcb0000ffcb0000ffcb0000ffcb0000fffff7aeff21221ffffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff00ada3ff00ada3ff00ada3ff00ada3fffff7aefffff7aefffff7aefffff7aeffcb0000fffff7aefffff7aefffff7aefffff7aeff21221ffffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff00ada3ff00ada3ff00ada3ff00ada3fffff7aefffff7aefffff7aefffff7aeffcb0000fffff7aefffff7aefffff7aefffff7aeff21221ffffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff00ada3ff00ada3ff00ada3ff00ada3fffff7aefffff7aefffff7aefffff7aeffcb0000fffff7aefffff7aefffff7aefffff7aeff21221ffffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff00ada3ff00ada3ff00ada3ff00ada3fffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff21221ffffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff00ada3ff00ada3ff00ada3ff00ada3fffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff21221ffffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff00ada3ff00ada3ff00ada3ff00ada3fffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff00ada3ff00ada3ff00ada3ff00ada3fffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff00ada3ff00ada3ff00ada3ff00ada3fffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aefffff7aeff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ffffffffff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ff00ada3ffffffff";
    var IconePersoTool={
    count: 0,
    width: 20,
    height: 20,
    read: function(nBytes){return dataIconePersoTool.slice(this.count,this.count+=nBytes);}
    };
    // Bouton PersoTool
    var objetBoutonPersoTool={
    cName: "nomBoutonPersoTool",
    cExec: "executePersoTool(event.target);",
    cEnable: "event.rc=(app.doc!=null)",
    cMarked: "event.rc=false",
    cTooltext: txtInfoPersoTool,
    oIcon: IconePersoTool,
    cLabel: txtBoutonPersoTool
    };
    //
    try {
    app.removeToolButton("nomBoutonPersoTool");
    } catch(e){}
    try {
    app.addToolButton(objetBoutonPersoTool);
    } catch(e){}
    }
    //########################
    // That's all folks! #
    // et pis c'est tout ! #
    // @+ #
    // bebarth #
    //########################

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Renommer indices #75326
    bebarth
    Maître des clés

    bonjour,
    …et pareil que Merlin : félicitations pour ce que tu fais !

    Je n’ai pas bien suivi ces derniers jours, du coup tu en es où dans tes demandes ?
    Si tu peux me repréciser ! Merci.

    @+
    😎

    en réponse à : Custom Tool – avec multiples niveaux #75312
    bebarth
    Maître des clés

    …je ne pense pas l’avoir déjà fait alors !

    @+
    😎

    en réponse à : Custom Tool – avec multiples niveaux #75308
    bebarth
    Maître des clés

    bonjour,
    Je t’ai envoyé mon fichier modèle que j’utilise lorsque je crée des utilitaires.
    Je ne le partage pas ici car c’est un peu compliqué et ça a été un peu de boulot à faire, mais je peux le partager sur demande.

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Custom Tool – avec multiples niveaux #75306
    bebarth
    Maître des clés

    bonjour Jean-Claude,
    Envoie-moi une adresse mail en MP à “bebarth arrobase sfr point fr” où je peux te faire parvenir un exemple.

    @+
    😎

    en réponse à : Renommer indices #75302
    bebarth
    Maître des clés

    bonjour,
    Voici les lignes pour pouvoir supprimer les anciens champs avec ton script :

    function Renommer_c() {
    var anciensChamps=[];
    for (var i=0; i<this.numFields; i++) {
    var nomChamp=this.getNthFieldName(i);
    var Menu = this.getField("Menu").value;
    var CaR = this.getField("nom_champ").value;
    var an = this.getField("AN").value;
    var P1new = this.getField("NN").value;
    var P2new = this.getField("NN").value;
    var b = nomChamp.split(".");
    var P1 = (b[0]);
    var P2 = (b[1]);
    var P3 = (b[2]);

    if (Menu == 1 && an == P1) {
    try{
    var ts=this.getField(P1+"."+P2+"."+P3).textSize;
    var tf=this.getField(P1+"."+P2+"."+P3).textFont;
    var rct=this.getField(P1+"."+P2+"."+P3).rect;
    var pg=this.getField(P1+"."+P2+"."+P3).page;
    var f=this.addField(P1new+"."+P2+"."+P3,"text",pg,rct);
    anciensChamps.push(P1+"."+P2+"."+P3);
    f.textSize=ts;
    f.textFont=tf;
    }catch(e){break}
    //this.removeField(P1+"."+P2+"."+P3)
    }

    if (Menu == 2 && an == P2 && CaR == P1) {
    try{
    var ts=this.getField(P1+"."+P2+"."+P3).textSize;
    var tf=this.getField(P1+"."+P2+"."+P3).textFont;
    var rct=this.getField(P1+"."+P2+"."+P3).rect;
    var pg=this.getField(P1+"."+P2+"."+P3).page;
    var f=this.addField(P1+"."+P2new+"."+P3,"text",pg,rct);
    anciensChamps.push(P1+"."+P2+"."+P3);
    f.textSize=ts;
    f.textFont=tf;
    }catch(e){break}
    //this.removeField(P1+"."+P2+"."+P3)
    //app.alert("Champ retiré : "+P1+"."+P2+"."+P3);
    }

    }
    for (var j=0; j<anciensChamps.length; j++) this.removeField(anciensChamps[j]);
    }

    Ton script fonctionne correctement, par contre il ne duplique pas toutes les propriétés. Tu devrais plutôt t’inspirer du miens…

    Pour ce qui est de ton autre problème ce n’est pas très compliqué, il suffit de créer le nouveau champ juste au dessus de l’ancien et de ne pas l’insérer dans la table des champs à supprimer si son nom est “Q”. J’essayerai de te faire ça demain !

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Renommer indices #75298
    bebarth
    Maître des clés

    …en gros lorsque tu ajoutes un nouveau champ et que tu effaces l’ancien immédiatement cela modifie la numérotation des champs c’est pourquoi ils ne sont pas tous remplacés.
    Alors que si tu rajoutes des champs sans supprimer les anciens immédiatement, la numérotation reste identique avec de nouveaux numéros à la fin. il faut donc créer tous les nouveaux avant de supprimer tous les anciens !

    Ai-je été compréhensible ???

    @+
    😎

    en réponse à : Renommer indices #75296
    bebarth
    Maître des clés

    bonjour,
    J’ai mixé ton script avec le mien répondre rapidement à ton problème.

    function Renommer_c() {
    var anciensChamps=[];
    //récuperer les noms de tous les champs
    for (var i=0; i<this.numFields; i++) {
    var nomChamp=this.getNthFieldName(i);
    //déclarer les variables
    var aN = this.getField("Name.3.1").value;
    var nN = this.getField("Name.3.2").value
    var CaR = this.getField("nom_champ").value;
    var Menu = this.getField("Menu").value;
    //décomposer les noms de champs en 3 parties séparées par les points : P1 ; P2 et P3
    var b = nomChamp.split(".");
    var P1 = (b[0]);
    var P2 = (b[1]);
    var P3 = (b[2]);

    //Si l'on désire modifier la partie 1 et que la partie 1 correspond à l'entrée saisie dans le champ Name.3.1
    if (Menu == 1 && aN == P1) {
    //déclarer la variable P1new (nouveau nom pour la partie 1)
    var P1new = nN;
    anciensChamps.push(P1+"."+P2+"."+P3);
    renommerChamp (P1+"."+P2+"."+P3,P1new+"."+P2+"."+P3);
    }

    //Si l'on désire modifier la partie 2 et que la partie 2 correspond à l'entrée saisie dans le champ Name.3.1 et que la partie 1 correspond à la variable CaR
    if (Menu == 2 && aN == P2 && CaR == P1) {
    //déclarer la variable P2new (nouveau nom pour la partie 2)
    var P2new = nN;
    anciensChamps.push(P1+"."+P2+"."+P3);
    renommerChamp (P1+"."+P2+"."+P3,P1+"."+P2new+"."+P3);
    }
    }
    for (var j=0; j<anciensChamps.length; j++) this.removeField(anciensChamps[j]);
    }
    function renommerChamp (leNom,nouveauNom) {
    try {
    g = this.getField(leNom);
    var leType=g.type;
    var laPage=String(g.page);
    var lesPages=laPage.split(",");
    for (var p=0; p<lesPages.length; p++) {
    var cettePage=Number(lesPages[p]);
    if (lesPages.length>1) {
    var nomChamp=leNom+"."+p;
    } else {
    var nomChamp=leNom;
    }
    g=this.getField(nomChamp);
    var lesCoord=g.rect;
    var f = this.addField(nouveauNom, leType, cettePage, lesCoord);
    f = this.getField(nouveauNom);
    for (var j in g) {
    try {
    if (typeof g[j] != "function" && j != "name" && j != "type" && j != "page" && j != "rect") {
    f[j]=g[j];
    }
    } catch(e) {}
    }
    if (leType=="combobox" || leType=="listbox") {
    var liste=new Array();
    for (var k=0; k<g.numItems; k++) {
    var valeur = g.getItemAt(k,false);
    var valeurExport = g.getItemAt(k,true);
    if (valeur==valeurExport) valeurExport="";
    var element=[valeur,valeurExport];
    liste.push(element);
    }
    f.setItems(liste);
    f.currentValueIndices=g.currentValueIndices;
    }
    if (leType=="button") {
    f.buttonSetIcon(g.buttonGetIcon());
    f.buttonSetCaption(g.buttonGetCaption());
    }
    }
    } catch(e) {app.alert("\nLe champ \""+leNom+"\"\rn'existe pas dans ce document.")}
    }

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Action “Lire un son” #75220
    bebarth
    Maître des clés

    Je n’avais pas pensé à essayer avec mon émulateur… Du coup ça fonctionne bien sur PC.

    je me demande si tu ne devrais pas plutôt utiliser l’action souris relâchée

    J’avais pensé à la souris appuyée vu que sur un piano la note se joue lorsqu’on appuie sur la touche et non lorsqu’on la relâche.

    @+
    😎

    en réponse à : Action “Lire un son” #75215
    bebarth
    Maître des clés

    bonjour Merlin,

    Il me semble que c’est un vieux bug de la version Mac

    …comme ça j’aurai plus vite terminé ce que je voulais faire !

    @+
    😎

    PS : J’ai pas mis toutes les notes sinon le fichier ne passait pas;

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Champ image #75207
    bebarth
    Maître des clés

    bonjour,
    En fait, tout se passe à la création de ton champ image qui te propose un nom avec le suffixe “_af_image”.
    Si tu gardes ce nom et que tu le modifies ensuite le suffixe est caché mais bien présent pour une recherche en JavaScript.
    Si lors de la création tu modifies le nom en retirant le suffixe, il ne comporte définitivement pas ce suffixe, même en recherche via JavaScript.
    C’est peut-être (voir certainement) ce qui t’arrives, et si c’est le cas je ne vois pas comment différencier un bouton d’un champ image en JavaScript !!!

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Probleme Javascript dans PDF #75201
    bebarth
    Maître des clés

    bonjour,
    Voici une solution possible. Ici on ne peut écrire que sous le code sous format désiré (2 chiffres, 1 point, 2 chiffres et 1 lettre) et le nombre d’éléments possibles est indiqué si il est multiple ou nul. S’il n’y en a qu’un, l’élément est directement affiché.
    On pourrait également modifier le script pour ne permettre de taper que les codes disponibles… Tu me dis !

    // script de document
    this.getField("codeInput").value="";
    this.getField("filteredOptions").clearItems();
    var p=this.getDataObject(this.dataObjects[0].name);
    var fichier=this.getDataObjectContents(p.name);
    var donnees=util.stringFromStream(fichier);
    var rangees=donnees.split("\n");
    var colonnes=new Array();
    for (var i=0; i<rangees.length; i++) colonnes=rangees.split(";");
    var cellule=new Array();
    for (var j=0; j<colonnes.length; j++) cellule[j]=[colonnes[j][1].replace(/\s$/,""),colonnes[j][0]];
    cellule[0][0]="- "+(cellule.length-1)+" éléments -";
    this.getField("filteredOptions").setItems(cellule);

    // Script de touches personnalisé
    if (!event.willCommit) {
    event.change=event.change.toUpperCase();
    var aTester=event.value.split("");
    aTester.splice(event.selStart,event.selEnd-event.selStart,event.change);
    var testeChaine=aTester.join("");
    if (testeChaine.length<6) testOK=/^(\d{1,2}([.](\d{1,2})?)?)?$/.test(testeChaine);
    else testOK=/^\d{2}[.]\d{2}[a-zA-Z]$/.test(testeChaine);
    event.rc=testOK;
    if (testOK) {
    var lesElements=[];
    for (var i=1; i<cellule.length; i++) {
    if (cellule[1].indexOf(testeChaine)==0) lesElements.push([cellule[0],cellule[1]]);
    }
    var nb=lesElements.length;
    if (nb!=1) lesElements.unshift("- "+nb+" élément(s) -");
    this.getField("filteredOptions").setItems(lesElements);
    }
    } else {
    if (event.value.length<6) testOK=/^(\d{1,2}([.](\d{1,2})?)?)?$/.test(event.value);
    else testOK=/^\d{2}[.]\d{2}[a-zA-Z]$/.test(event.value);
    event.rc=testOK;
    }

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Champ image #75194
    bebarth
    Maître des clés

    bonjour,
    Le type de champ “image” n’existe pas en JavaScript.
    https://opensource.adobe.com/dc-acrobat-sdk-docs/library/jsapiref/JS_API_AcroJS.html#id619
    Un champ image est un champ de type bouton auquel on ajoute une action permettant d’ajouter ou modifier l’image et dont le nom “réel” est modifié en rajoutant un suffixe “_af_image” (cf. copie d’écran jointe).
    On pourrait donc écrire :
    if (nomChamp.indexOf("Question")==0 && nomChamp.indexOf("_af_image")>0) this.getField(nomChamp).readonly=true;

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Probleme Javascript dans PDF #75179
    bebarth
    Maître des clés

    Peux-tu partager un fichier Excel (au format csv ou txt) ou une partie de ce fichier et m’indiquer les cellules utiles.

    @+
    😎

    en réponse à : Probleme Javascript dans PDF #75176
    bebarth
    Maître des clés

    bonjour,
    Si les données sont extraites d’un fichier Excel, pourquoi ne pas attacher un fichier au pdf ?

    @+
    😎

    en réponse à : Supprimer les icônes #75170
    bebarth
    Maître des clés

    bonjour,
    Tu peux retirer les icônes de l’obet icon avec la méthode “removeIcon” : https://opensource.adobe.com/dc-acrobat-sdk-docs/library/jsapiref/doc.html#removeicon
    Ci-joint un fichier exemple.

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Identifier la couleur des champs en exportant les données #75140
    bebarth
    Maître des clés

    bonjour,
    Si je peux donner mon avis, l’extraction de toutes les données que propose Acrobat n’est pas toujours la meilleur solution car on récolte les valeurs de tous les champs, même de ceux qu’on n’a pas besoin (cases à cocher, boutons radio,…).
    Personnellement j’opterais pour un script qui n’extrait que les valeurs souhaitées et dans ce cas on pourrait extraire directement la couleur des champs que l’on aurait par exemple indiquée en info-bulle lors du changement de couleur. cela permettrait d’avoir un document affiché uniquement avec les désignations (sans le nom de la couleur), puis un fichier texte extrait et récupérable directement sans avoir à le retoucher.

    @+
    😎

    en réponse à : Identifier la couleur des champs en exportant les données #75130
    bebarth
    Maître des clés

    bonjour

    Je peux ajouter une maquette si c’est plus facile à visualiser.

    Une maquette serait effectivement la bienvenue.

    @+
    😎

    en réponse à : Problème de lancement d’un script #75115
    bebarth
    Maître des clés

    …je viens de m’apercevoir que l’expression régulière dans la version unicode->texte ne devrait pas être /(\\u\d{4})/g (pour 4 chiffres), mais /(\\[Uu][0-9A-Fa-f]{4})/g vu qu’en numérotation hexadécimale on a également des lettres (A à F) !!!
    Alors pourquoi ça fonctionne en ne recherchant que 4 chiffres ???

    @+
    😎

    • Cette réponse a été modifiée le il y a 2 mois par bebarth.
    en réponse à : Tracé arc de cercle #75114
    bebarth
    Maître des clés

    bonjour,
    Personnellement j’utilise Illustrator mais j’imagine que tu ne peux pas…
    Lorsqu’on cherche ses équivalents gratuits pour PC on trouve Inkscape en numéro 1. Je ne le connais pas mais si il fonctionne bien il faut continuer à l’utiliser !
    https://mailchimp.com/fr/resources/adobe-illustrator-free-alternative/

    @+
    😎

    en réponse à : Tracé arc de cercle #75109
    bebarth
    Maître des clés

    bonjour,
    Comment dire… ?
    Sans vouloir douter de tes compétences, c’est TRÈS TRÈS compliqué à faire !
    Lorsque je me suis penché sur le problème, j’ai posé quelques question sur le forum Acrobat et je n’ai jamais eu de réponse ! Pas une seule, même de Thom Parker qui apparemment est l’un des seul à s’y connaitre. J’ai d’ailleurs su qu’on pouvait dessiner grâce à son fichier :
    https://www.windjack.com/DownLoads/MatrixOperations.pdf

    Comme je n’ai jamais eu réponse j’ai donc creusé ce fichier (pendant plus d’un an) pour essayer de trouver comment ça marche. Le résultat avec Acrobat est un peu décevant par rapport à ce qu’on peut faire en html. Toutes les commandes ne fonctionnent pas avec Acrobat.

    De plus, c’est un peu comme avec les expressions régulières, il faut en faire souvent pour ne pas oublier comment ça fonctionne.
    Si tu es bon en trigonométrie et que tu t’y connais un peu en courbes de Bezier voici 2 liens qui pourront t’aider :
    https://www.w3schools.com/graphics/svg_intro.asp
    https://www.w3schools.com/graphics/svg_path.asp

    Je te joins également 2 fichiers que j’ai fait lors de mon apprentissage. Tu pourras les étudier !!!

    En tout cas c’est un sujet qui m’intéresse et à l’occasion je regarderai si je peux faire quelque chose (mais ce ne sera pas tout de suite).

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Problème de lancement d’un script #75106
    bebarth
    Maître des clés

    J’ai également écris un petit utilitaire !

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Problème de lancement d’un script #75094
    bebarth
    Maître des clés

    C’est également ce que je fait !

    @+
    😎

    en réponse à : Problème de lancement d’un script #75092
    bebarth
    Maître des clés

    bonjour,
    Il faut donc utiliser le premier script. Vu qu’on ne traite que les caractères ascii>128 on peut même réduire le script à :
    var leTexte="Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d'exquis rôtis de bœuf au kir à l'aÿ d'âge mûr & cætera !";
    for (var i=leTexte.length-1; i>=0; i--) {
    if (leTexte.charCodeAt(i)>128) var leTexte=leTexte.substr(0,i)+"\\u"+("00"+leTexte.charCodeAt(i).toString(16)).toUpperCase()+leTexte.substr(i+1);
    }
    console.println("leTexte : "+leTexte);

    @+
    😎

    en réponse à : Problème de lancement d’un script #75090
    bebarth
    Maître des clés

    …Je ne suis pas certain d’avoir totalement compris !!!
    Si en fait tu veux uniquement modifier les caractères accentués, tu peux utiliser ce script dans la console :
    var leTexte="Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d'exquis rôtis de bœuf au kir à l'aÿ d'âge mûr & cætera !";
    for (var i=leTexte.length-1; i>=0; i--) {
    if (leTexte.charCodeAt(i)>128) var leTexte=leTexte.substr(0,i)+"\\u"+("0000"+leTexte.charCodeAt(i).toString(16).toUpperCase()).slice(-4)+leTexte.substr(i+1);
    }
    console.println("leTexte : "+leTexte);
    // Résultat : "D\u00E8s No\u00EBl o\u00F9 un z\u00E9phyr ha\u00EF me v\u00EAt de gla\u00E7ons w\u00FCrmiens je d\u00EEne d'exquis r\u00F4tis de b\u0153uf au kir \u00E0 l'a\u00FF d'\u00E2ge m\u00FBr & c\u00E6tera !"

    …et à l’inverse, pour récupérer un texte :
    var leTexte="D\u00E8s No\u00EBl o\u00F9 un z\u00E9phyr ha\u00EF me v\u00EAt de gla\u00E7ons w\u00FCrmiens je d\u00EEne d'exquis r\u00F4tis de b\u0153uf au kir \u00E0 l'a\u00FF d'\u00E2ge m\u00FBr & c\u00E6tera !";
    leTexte.replace(/(\\u\d{4})/g,parseInt("$1",16));
    console.println("leTexte : "+leTexte);
    // Résultat : "Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d'exquis rôtis de bœuf au kir à l'aÿ d'âge mûr & cætera !"

    @+
    😎

    en réponse à : Problème de lancement d’un script #75089
    bebarth
    Maître des clés

    bonjour,
    Merlin partage un utilitaire gratuit que tu peux trouver ici :

    Texte vers Unicode

    @+
    😎

    en réponse à : Problème de lancement d’un script #75075
    bebarth
    Maître des clés

    bonjour,
    Pour connaitre l’erreur, il faut dans un premier temps savoir d’où elle vient.
    Vu que tous tes scripts sont des fonctions lancées depuis un bouton, le plus simple est de les tester une par une, et on s’aperçoit que ça plante dès la première fonction “Default()”.
    Ensuite, il faut savoir quelle ligne n’est pas correcte, et vu que toutes les lignes font référence à des propriétés de champs, c’est certainement qu’une de ces propriétés n’est pas adaptée au champ concerné.
    J’ai donc rajouté une ligne en début de boucle qui permet de voir sur quel champ ça cloche :
    for (var i=0; i<this.numFields; i++) {
    var nomChamp=this.getNthFieldName(i);
    console.println(i+" - nomChamp : "+nomChamp+" - "+(this.getField(nomChamp).page+1)+" - "+this.getField(nomChamp).type);
    ...

    Et on s’aperçoit que c’est sur un champ liste (combobox)…
    Effectivement, si tu as une liste où aucun élément n’est sélectionné à l’origine, il n’a pas de valeur par défaut. Ici tu as donc 2 solutions : soit tu sélectionnes le point d’interrogation qui devient ta valeur par défaut ou en dernière ligne tu exclus que ce soit un champ de type “combobox” :
    if (this.getField(nomChamp).type!="combobox") this.getField(nomChamp).defaultValue=this.getField(nomChamp).value;

    @+
    😎

    en réponse à : URL cliquable dans champ de formulaire #75065
    bebarth
    Maître des clés

    Avec la méthode “bouton”, le champ devient bien cliquable, mais il ouvre une fenêtre de navigateur en remplissant 2 fois l’url à la suite, comme s’il prenait en compte le bouton + le champ placé dessous… du coup on arrive sur une 400.

    En es-tu certain ?
    Avec l’exemple joint ça fonctionne bien chez moi… Dis-moi si il fonctionne chez toi !

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : URL cliquable dans champ de formulaire #75062
    bebarth
    Maître des clés

    A ce moment là il ne faut pas que le champ soit en lecture seule…

    @+
    😎

    en réponse à : Problème de lancement d’un script #75061
    bebarth
    Maître des clés

    bonjour,
    Pour trouver l’erreur :

    1. Tu lances tes fonctions une à une.
    2. Tu t’aperçois que dès la première fonction Default() ça se plante… en ligne 17
      if (nomChamp.indexOf("Menu.")==0) {this.getField(nomChamp).defaultValue="";}
    3. Il y a des champs “Menu.” qui sont des champs texte et d’autre des menus déroulants dont la valeur par défaut n’est pas vide. C’est pour cela que ça plante.
    4. Il faut donc vérifier le type de champ.

    @+
    😎

    en réponse à : URL cliquable dans champ de formulaire #75057
    bebarth
    Maître des clés

    bonjour,
    Je pense que le plus simple est de superposer à ton champ un bouton avec un script d’action souris relâchée :
    if (this.getField("contactchoix").value!="" && this.getField("contactchoix").value!="undefined") app.launchURL("http://www."+this.getField("contactchoix").value,true);

    Après,

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Choix de Zone de liste vers liste déroulante #75039
    bebarth
    Maître des clés

    bonjour,
    Vous êtes gentils… Je doute qu’outre Atlantique on me considère comme sorti des Mille et une nuits !

    Je ne suis pas certain d’avoir été très clair la dernière fois, mais généralement lorsque j’ai quelque chose dans la tête je ne l’ai pas au… tre part !
    Lorsque on veut sélectionner plusieurs éléments dans une liste, on doit appuyer sur la touche ctrl sur PC et opt ou cmd sur Mac. Donc si on appuie pas sur une de ces touches, cela signifie que l’on désélectionne tous les éléments précédents !
    Je viens de me rappeler que event.modifier contrôle justement si on appuyait sur la touche. J’ai donc pu terminer cette première version.
    On a donc un script champ activé :
    var indices=event.target.currentValueIndices;
    if (indices==-1) {
    var liste=[];
    } else {
    if (typeof indices=="number") var liste=[event.target.getItemAt(indices, false)];
    else {
    var liste=[];
    for (var i=0; i<indices.length; i++) liste.push(event.target.getItemAt(indices, false))
    }
    }
    Puis un script “Changement de sélection” :
    if (!event.willCommit) {
    if (!event.modifier) {
    if (event.value==event.changeEx) {
    this.getField("choix2").value="";
    this.getField("pop2").clearItems();
    var liste=[];
    } else {
    this.getField("choix2").value=event.changeEx;
    this.getField("pop2").setItems([event.changeEx]);
    var liste=[event.changeEx];
    }
    } else {
    liste.push(event.changeEx);
    for (var i=0; i<liste.length-1; i++) {
    if (liste==event.changeEx) {
    liste.splice(i,1);
    liste.pop();
    break;
    }
    }
    liste.sort(function(a, b){return a.localeCompare(b)});
    this.getField("choix2").value=liste.toString().replace(/,/g,"\r");
    this.getField("pop2").setItems(liste);
    }
    }

    Sauf que l’api reference indique “The modifier key on the Microsoft Windows platform is Control and on the Mac OS platform is Option or Command” et apparemment la touche option fonctionne sur Mac. Je suis donc obligé d’appuyer simultanément sur option et commande pour que ça fonctionne.
    Pourriez-vous me dire si ça marche sur PC avec la touche ctrl !

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Expression regulière #75035
    bebarth
    Maître des clés

    bonjour,
    J’y était presque… mais je n’avais pas d’ordinateur hier soir pour vérifier. En fait c’est :
    var RegExTest=new RegExp("^"+rep[k].replace(/([(){}\[\]])/g,"\\$1")+"$");
    Un double antislash pour indiquer qu’on veut le caractère \ et $1 pour récupérer le caractère capturé dans l’expression entre parenthèses (un des caractères entre crochets où les crochets sont eux-mêmes échappés pour indiquer qu’on parle des caractères…). C’est simple, non ?

    @+
    😎

    • Cette réponse a été modifiée le il y a 2 mois et 2 semaines par bebarth.
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Expression regulière #75029
    bebarth
    Maître des clés

    C’est ce que devrait faire la ligne que j’ai modifiée.

    @+
    😎

    en réponse à : Expression regulière #75027
    bebarth
    Maître des clés

    bonjour,
    Essaye :

    var RegExTest=new RegExp("^"+rep[k].replace(/[(){}\[\]]/g,"\$")+"$");

    Je ne peux pas vérifier ce soir… Tu me dis !

    @+
    😎

    en réponse à : Choix de Zone de liste vers liste déroulante #75025
    bebarth
    Maître des clés

    bonjour Jean-Claude,
    J’ai à peu près le même process que toi.
    Au début, comme je te l’avais dis, j’étais parti pour exécuter un uniquement script à partir du champ liste, mais ça ne fonctionnait qu’à moitié. Lorsqu’on ajoutait ou supprimait un élément à la fois ça marchait mais si on avait déjà sélectionné plusieurs éléments et que d’un seul coup on n’en sélectionnait plus qu’un seul, ça ne marchait plus. En fait, event.value ne change pas lorsque change de focus, mais si on revient au champ liste et comme event.changeEx est le nouvel élément sélectionné, ça ne marchait pas !!!
    Tout ça pour dire que j’en suis revenu également à 2 scripts.
    Le script déclencheur en “Changement de sélection” uniquement pour changer de focus et donc lancer le cacul :
    if (!event.willCommit) this.getField("choix2").setFocus();
    Et un script de calcul :
    var indices=this.getField("zone2").currentValueIndices;
    if (indices==-1) {
    event.value="";
    this.getField("pop2").clearItems();
    } else {
    if (typeof indices=="number") {
    event.value=this.getField("zone2").getItemAt(indices, false);
    this.getField("pop2").setItems([this.getField("zone2").getItemAt(indices, false)]);
    } else {
    var liste=[];
    for (var i=0; i<indices.length; i++) liste.push(this.getField("zone2").getItemAt(indices, false));
    event.value=liste.toString().replace(/,/g,"\r");
    this.getField("pop2").setItems(liste);
    }
    }

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Expression regulière #75001
    bebarth
    Maître des clés

    bonjour,
    Je n’ai pas d’erreur lorsque je clique sur “Vérifier” de ton document !

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Choix de Zone de liste vers liste déroulante #74994
    bebarth
    Maître des clés

    Je suis complètement débordé avec tout le TAF urgent à terminé!

    Ne m’en parle pas !!! Tu verras quand tu seras à la retraite :-)… même pas le temps de procrastiner un peu !

    @+
    😎

    en réponse à : Choix de Zone de liste vers liste déroulante #74991
    bebarth
    Maître des clés

    bonjour,
    Si tu veux que ça fonctionne dynamiquement, il faut utiliser “event.changeEx” en script de “Changement de sélection”. Je pense qu’il faut également utiliser un “calculateNow()” car il n’est pas possible de “Valider la valeur sélectionnée immédiatement” avec une “Sélection multiple”.
    J’ai une petite idée mais je ne peux l’essayer en ce moment. Je regarderai ce weekend si tu n’y arrives pas…

    @+
    😎

    en réponse à : Calcul taux d’évolution JavaScript #74989
    bebarth
    Maître des clés

    bonjour,
    Il faut bien retirer le *100 mais il faut aussi modifier le format du champ en “pourcentage”.

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : impression : pivoter des pages #74987
    bebarth
    Maître des clés

    bonjour,
    Il est vrai qu’il n’est pas utile de pivoter les pages avant de les imprimer, mais pour toute autre raison il est quand même possible de le faire via un script.
    Pour une page au format paysage d’un document (et idem pour les pages au format portrait), il y a 2 possibilités : soit elle a été créée dans ce format, ou elle a été créée au format portrait puis pivotée en format paysage. D’où la nécessité de regarder “getPageRotation”. Si ce résultat est 0 c’est que la page a été créée au format paysage, sinon elle a déjà été pivoté. L’instruction “setPageRotations” pivote la page par rapport à la position originale.
    Voici donc un script pour pivoter les pages du format paysage au format portrait :
    for (var p=0; p<this.numPages; p++) {
    var dimPage=this.getPageBox("Crop",p);
    if ((dimPage[2]-dimPage[0])>(dimPage[1]-dimPage[3])) {
    if (this.getPageRotation(p)!=0) this.setPageRotations(p,p,0);
    else this.setPageRotations(p,p,90);
    }
    }

    Par contre, on ne peut vérifier si la position originale est à l’envers (haut en bas)…

    @+
    😎

    en réponse à : Enregister Sous – Chemin choisi par l’utilisateur #74982
    bebarth
    Maître des clés

    … après on peut aussi ajouter un répertoire sur le bureau !

    @+
    😎

    en réponse à : Enregister Sous – Chemin choisi par l’utilisateur #74979
    bebarth
    Maître des clés

    bonjour,

    Si le pdf original est sur le même disque on peut en déduire le chemin du bureau

    On peut par exemple utiliser ce script pour enregistrer sur le bureau utilisateur :
    var ceChemin=this.path.split("/");
    var cheminSurBureau="";
    for (var j=1; j<=3; j++) cheminSurBureau+="/"+ceChemin[j];
    cheminSurBureau+="/Desktop/"+ceChemin[ceChemin.length-1];
    this.saveAs({
    cPath: cheminSurBureau,
    bPromptToOverwrite: true // au cas où !!!
    })

    Ça devrait fonctionner sur Mac et PC, sous unix je ne connais pas la syntaxe des chemins !

    @+
    😎

    • Cette réponse a été modifiée le il y a 2 mois et 3 semaines par bebarth.
    en réponse à : Enregister Sous – Chemin choisi par l’utilisateur #74969
    bebarth
    Maître des clés

    Si le pdf original est sur le même disque on peut en déduire le chemin du bureau, mais attention ils sont différents selon l’OS !

    @+
    😎

    en réponse à : Enregister Sous – Chemin choisi par l’utilisateur #74967
    bebarth
    Maître des clés

    Exact !

    en réponse à : Enregister Sous – Chemin choisi par l’utilisateur #74965
    bebarth
    Maître des clés

    bonjour,
    On ne peut pas afficher la fenêtre de l’interface utilisateur, mais avant enregistrement on pourrait indiquer le chemin dans un champ ou une boite de dialogue !
    Par contre il y aura une erreur si le chemin n’est pas indiqué correctement.

    @+
    😎

    en réponse à : Variables aléatoires #74962
    bebarth
    Maître des clés

    As-tu essayé mon fichier ???
    Essaye de mettre un try… catch !

    @+
    😎

    en réponse à : Variables aléatoires #74956
    bebarth
    Maître des clés

    bonjour,
    Une seule fonction en script de document :
    function random (indice) {
    function getRandomIntInclusive(min,max,dec) {
    return Math.round((Math.random()*(max-min)+min)*Math.pow(10,dec))/Math.pow(10,dec);
    }
    if (this.getField("Var."+indice+".0").value !="" || this.getField("Var."+indice+".1").value !="" || this.getField("Var."+indice+".2").value !="") {
    this.getField("Var."+indice+".3").value=getRandomIntInclusive(this.getField("Var."+indice+".1").value,this.getField("Var."+indice+".2").value,this.getField("Dec."+i).value);
    }
    eval(this.getField("Var."+indice+".0").value+"="+this.getField("Var."+indice+".3").value);
    }
    …et un script pour appeler cette fonction :
    for (var i=1; i<=30; i++) {
    try {
    random (i);
    } catch(e) {
    this.getField("Var."+i+".3").value="";
    }
    }

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Variables ayant comme nom la valeur des champs #74949
    bebarth
    Maître des clés

    Tu écris :
    function variables () {
    eval("var "+this.getField("Var.2.0").value+"="+this.getField("Var.2.3").value);
    eval("var "+this.getField("Var.1.0").value+"="+this.getField("Var.1.3").value);
    app.alert("Valeur de la variable E : "+E+" ; Valeur de la variable F : "+F);
    }

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Variables ayant comme nom la valeur des champs #74941
    bebarth
    Maître des clés

    bonjour,
    Oui, il faut utiliser la méthode “eval”.
    Pour un chiffre :
    eval("var "+this.getField("nomChamp").value+"=5;");
    ou chaîne de caractères :
    eval("var "+this.getField("nomChamp").value+"=\"la chaîne de caractères\";");
    Mais attention, il faut respecter la règle de nomination des variables… donc pas de caractères spéciaux et ne pas commencer par un chiffre !

    @+
    😎

    en réponse à : Calcul taux d’évolution JavaScript #74937
    bebarth
    Maître des clés

    bonjour,
    Il faut écrire :
    event.value=(this.getField("Texte36").value-this.getField("Texte37").value)/this.getField("Texte37").value*100;
    Mais il faut modifier le format des champs en “Nombre” avec indicateur de la monnaie.

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Formulaire avec date calculée en JavaScript #74931
    bebarth
    Maître des clés

    bonjour,

    J’ai réussi à solutionner mon problème.

    Si d’autres ont le même problème ils se débrouilleront ???

    @+
    😎

    en réponse à : Variables aléatoires #74927
    bebarth
    Maître des clés

    bonjour,
    J’ai modifié un peu le script car certaines fois le chiffre était inférieur au mini…
    function getRandomIntInclusive(min,max,dec) {
    return Math.round((Math.random()*(max-min)+min)*Math.pow(10,dec))/Math.pow(10,dec);
    }
    for (var i=1; i<=4; i++) {
    this.getField("Var."+i+".3").value=getRandomIntInclusive(this.getField("Var."+i+".1").value,this.getField("Var."+i+".2").value,this.getField("Dec."+i).value);
    }

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Variables aléatoires #74918
    bebarth
    Maître des clés

    L’avantage de mettre une fonction en script de document c’est de pouvoir l’appeler à partir de plusieurs autres scripts.

    Si elle n’est utilisée qu’avec un script, autant l’intégrer, et pas forcément depuis un bouton…

    @+
    😎

    en réponse à : Formulaire avec date calculée en JavaScript #74915
    bebarth
    Maître des clés

    bonjour,

    Donc le event.rc = false; n’est pas nécessaire également?

    Si, quand même ! Il faut bien pouvoir invalider la réponse, et donc conserver l’ancienne valeur. Tu doit par exemple entrer une valeur supérieure à 5. Admettons que l’ancienne valeur était 10, donc correcte et que tu entres un 3.
    Si tu écris ce scrpt :
    if (event.value>5) {
    app.alert("Valeur correcte",3);
    } else {
    app.alert("Valeur incorrect",3);
    }
    Tu auras le message “Valeur incorrecte”, mais la valeur indiquée dans ton champ sera 3, alors que si tu écris :
    if (event.value>5) {
    app.alert("Valeur correcte",3);
    } else {
    event.rc=false;
    app.alert("Valeur incorrect",3);
    }
    Tu auras le même message “Valeur incorrecte”, mais la valeur restera la précédente (donc 10).

    @+
    😎

    en réponse à : Formulaire avec date calculée en JavaScript #74913
    bebarth
    Maître des clés

    bonjour,

    event.rc = true;

    Juste pour info,  ce n’est pas la peine d’indiquer event.rc = true; car c’est l’état par défaut de la validation si on indique pas event.rc = false;.
    Ça fait une ligne de moins…

    @+
    😎

    en réponse à : Formulaire avec date calculée en JavaScript #74912
    bebarth
    Maître des clés

    Partage ton fichier si cela t’est possible.

    @+
    😎

    en réponse à : Formulaire avec date calculée en JavaScript #74910
    bebarth
    Maître des clés

    La syntaxe est différente, mais le principe est le même !

    @+
    😎

    en réponse à : Variables aléatoires #74906
    bebarth
    Maître des clés

    bonjour,
    J’avais déjà répondu à une demande similaire :

    Nombre aléatoire compris entre 2 valeurs


    Voici donc une adaptation :
    function getRandomIntInclusive(min,max) {
    return (Math.random()*(max-min+1)+min-1).toFixed(this.getField("Dec."+i).value);
    }
    for (var i=1; i<=4; i++) {
    this.getField("Var."+i+".3").value=getRandomIntInclusive(this.getField("Var."+i+".1").value,this.getField("Var."+i+".2").value);
    }

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Formulaire avec date calculée en JavaScript #74905
    bebarth
    Maître des clés

    Qu’est-ce qui ne fonctionne pas ?
    Y a-t-il un message dans la console ?
    Si tu ne veux pas ces informations, il faut retirer des lignes du script, ce qui donne :
    var jour=["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"]
    if (event.value!="") {
    var d=util.scand("dd/mm/yyyy",event.value); // valeur donnée à minuit pile
    var laDate=d.getTime()+24*3600*1000;
    var aujourdhui=util.scand("dd/mm/yyyy", new Date()).getTime();
    if (laDate<aujourdhui) {
    app.alert("Veuillez indiquer une date postérieure ou égale à celle d'aujourd'hui.\rou\rVeuillez indiquer une date qui n'est pas antérieure à celle d'aujourd'hui.",3);
    event.rc=false;
    } else {
    var jCommande=jour[d.getDay()];
    if (d.getDay()==1) var nbJours=4;
    else if (d.getDay()==2) var nbJours=6;
    else var nbJours=5;
    var dateLivraison=laDate+((nbJours-1)*24*3600*1000); // ...comme on a modifié "laDate"
    this.getField("DateLimite").value=new Date(dateLivraison);
    var jLivraison=jour[new Date(dateLivraison).getDay()];
    }
    } else {
    this.getField("DateLimite").value="";
    }

    @+
    😎

    en réponse à : Problème script de validation valeur minimale #74895
    bebarth
    Maître des clés

    bonjour,

    chacun propose son idée et ensuite il faut faire la part des choses.

    Voici donc ma version avec écriture directe lors de la frappe des chiffres (uniquement si >5).

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Formulaire avec date calculée en JavaScript #74891
    bebarth
    Maître des clés

    bonjour,
    Oups, j’avais mal lu…

    Donc, < et non pas >

    Ça ne suffit pas dans ce sens là ! Sans indications supplémentaires la valeur de “laDate” est indiquée à minuit pile. Alors que la valeur de “aujourdhui” est indiquée à ‘instant “t”. À moins que l’on remplisse le champ à 0:00 au millième de seconde près, ce qui est peu probable… si “aujourdhui” est aujourd’hui, la valeur “laDate” est toujours inférieure à la valeur “aujourdhui”. 🙂
    Le script est donc à modifier comme suit :
    var jour=["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"]
    if (event.value!="") {
    var d=util.scand("dd/mm/yyyy",event.value); // valeur donnée à minuit pile
    var laDate=d.getTime()+24*3600*1000;
    var aujourdhui=util.scand("dd/mm/yyyy", new Date()).getTime();
    if (laDate<aujourdhui) {
    app.alert("Veuillez indiquer une date postérieure ou égale à celle d'aujourd'hui.\rou\rVeuillez indiquer une date qui n'est pas antérieure à celle d'aujourd'hui.",3);
    event.rc=false;
    } else {
    var jCommande=jour[d.getDay()];
    this.getField("jourCommande").value=jCommande;
    if (d.getDay()==1) var nbJours=4;
    else if (d.getDay()==2) var nbJours=6;
    else var nbJours=5;
    var dateLivraison=laDate+((nbJours-1)*24*3600*1000); // ...comme on a modifié "laDate"
    this.getField("DateLimite").value=new Date(dateLivraison);
    var jLivraison=jour[new Date(dateLivraison).getDay()];
    this.getField("jourLivraison").value=jLivraison;
    }
    } else {
    this.getField("jourCommande").value="";
    this.getField("DateLimite").value="";
    this.getField("jourLivraison").value="";
    }

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Formulaire avec date calculée en JavaScript #74888
    bebarth
    Maître des clés

    bonjour,
    En scripr de validation de ton champ date :
    var jour=["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"]
    if (event.value!="") {
    var d=util.scand("dd/mm/yyyy",event.value);
    var laDate=d.getTime();
    var aujourdhui=util.scand("dd/mm/yyyy", new Date()).getTime();
    if (laDate>aujourdhui) {
    app.alert("Veuillez indiquer une date antérieure à aujourd'hui.",3);
    event.rc=false;
    } else {
    var jCommande=jour[d.getDay()];
    this.getField("jourCommande").value=jCommande;
    if (d.getDay()==1) var nbJours=4;
    else if (d.getDay()==2) var nbJours=6;
    else var nbJours=5;
    var dateLivraison=laDate+(nbJours*24*3600*1000);
    this.getField("DateLimite").value=new Date(dateLivraison);
    var jLivraison=jour[new Date(dateLivraison).getDay()];
    this.getField("jourLivraison").value=jLivraison;
    }
    }

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Problème script de validation valeur minimale #74879
    bebarth
    Maître des clés

    je voulais faire disparaître l’unité monétaire

    De quel(s) champ(s) ?

    @+
    😎

    bebarth
    Maître des clés

    bonjour,
    Des listes mères/filles supposent qu’il y a plusieurs menus déroulants dans un fichier alors que dans le tien je n’en voit qu’un…
    Je suppose que tu a extrais ton script du fichier ci-joint.
    Regarde en script de document, l’objet “elementsListes” définit les différentes valeurs suivant le choix du premier menu déroulant.
    Il faut que tu fasses la même chose pour ton document.

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Problème script de validation valeur minimale #74871
    bebarth
    Maître des clés

    bonjour,

    Seconde difficulté : la conversion des chiffres en lettres fonctionne très bien, mais y’a-t-il un moyen pour que, dès que le champ « montant en chiffres » est rempli, le champ « montant en lettres » se remplisse simultanément, sans avoir à cliquer dans le champ « montant en chiffres » ? J’ai inséré le script en « champ activé », en vain…

    Le sujet a déjà été traité dans un autre post : https://www.abracadabrapdf.net/forums/topic/remplacer-valeur-numerique-en-lettre/#post-72771

    Voici un fichier qui reprend le script principal, et ci-dessous les scripts que j’ai ajouté :

    // Script de touches personnalisé champ nombre
    if (!event.willCommit) {
    if (event.selStart==0 && event.change==",") event.change="0,";
    if (event.selStart==0 && event.change=="0") event.change="0,";
    var aTester=event.value.split("");
    aTester.splice(event.selStart,event.selEnd-event.selStart,event.change);
    var testeChaine=aTester.join("");
    if (/^([1-9]\d*(\,\d{0,2})?)?$/.test(testeChaine)) this.getField("SaisieSomme").value=Number(testeChaine.replace(/,/,"."))*1000;
    else event.rc=false;
    } else {
    if (event.value=="" || /^([1-9]\d*(\,\d{0,2})?)$/.test(event.value)) this.getField("SaisieSomme").value=Number(event.value.replace(/,/,"."))*1000;
    else event.rc=false;
    }

    // Script de calcul champ SaisieSomme
    if (event.value>5000) {
    ecriture(event.value);
    this.getField("droit2").value=this.getField("SaisieSomme").value*Number(this.getField("tauxpersonnalise").value.replace(",","."))/100;
    this.getField("totalperso").value=this.getField("SaisieSomme").value+this.getField("droit2").value;
    } else {
    this.getField("TexteSomme").value="";
    this.getField("droit2").value="";
    this.getField("totalperso").value="";
    }

    // Script de format personnalisé champ SaisieSomme
    if (event.value<=5000) event.value="";
    else event.value=event.value+" €";

    Je te laisse retirer les étoiles si tu ne les veux pas…

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Chiffre en lettres avec JavaScript #74846
    bebarth
    Maître des clés

    bonjour,

    je ne sais pas s’il y a eu d’autres versions depuis.

    Il y a une version Suisse & Belgique…

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Dupliquer un modèle visible et Réinitialiser #74841
    bebarth
    Maître des clés

    bonjour,

    J’ai essayer en ajout ceci suggérer par Thom Parker mais cela ne fonctionne pas. var strPrefix = event.targetName.split(“.”).splice(0,2).join(“.”); this.resetForm(strPrefix);

    Ça fonctionne si ce script est sur la page des champs à réinitialiser, mais pour ton exemple, le bouton ne l’est pas.
    Vu que la syntaxe des préfixes est toujours la même et que tu ajoutes la page dupliquée en fin de document, tu peux écrire :
    this.getTemplate("page").spawn(this.numPages, true, false);
    var t=this.templates;
    var strPrefix="P"+(this.numPages-1)+"."+t[0].name;
    // ou directement var strPrefix="P"+(this.numPages-1)+".page";
    this.resetForm(strPrefix);
    this.removeField(strPrefix+"."+event.target.name);

    Ici j’ai supprimé le bouton sur la page dupliquée.

    @+
    😎

    P.S. : Dans le script de Thom, “event.targetName” est mal écrit. Ça devrait être “event.target.name” !

    • Cette réponse a été modifiée le il y a 3 mois et 1 semaine par bebarth.
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Léger bug sur mon formulaire #74829
    bebarth
    Maître des clés

    Après avoir cherché un certain temps, je me suis aperçu que :
    Lorsque l’on crée une case à cocher sur Acrobat, sa valeur par défaut est “Off” (décochée).
    Apparemment, avec ton logiciel, sa valeur par défaut lors de sa création est “undefined” (décochée), et lorsqu’on la coche puis décoche sa valeur est “Off”.

    Pour que ça fonctionne sans modifier le script, il faut donc cocher/décocher toutes les cases à cocher avant de les utiliser (idem pour les boutons radio je suppose), ou lancer ce script :
    for (var i=0; i<this.numFields; i++) {
    var nomChamp=this.getNthFieldName(i);
    if ((this.getField(nomChamp).type=="checkbox" || this.getField(nomChamp).type=="radiobutton") && this.getField(nomChamp).value=="undefined") this.getField(nomChamp).value="Off";
    }

    Pour info, ça ne fonctionnait pas non plus dans le premier fichier que tu as partagé…

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Léger bug sur mon formulaire #74825
    bebarth
    Maître des clés

    bonjour,
    Il faut vérifier toutes les réponses possibles séparées par “|” :
    ...
    this.getField("Q."+n+"."+a).readonly=true;
    // BB
    var rep=this.getField("R."+n+"."+a).valueAsString.split("|");
    var OK=0;
    for (var k=0; k<rep.length; k++) {
    var RegExTest=new RegExp("^"+rep[k]+"$");
    if (RegExTest.test(this.getField("Q."+n+"."+a).value)) OK++;
    }
    if (OK) {this.getField("Q."+n+"."+a).fillColor=eval("color."+colorOk);}
    else {this.getField("Q."+n+"."+a).fillColor=eval("color."+colorErr);erreurs++;this.getField("Erreurs").value++;}
    // BB
    if (!erreurs) {
    ...

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Remplir les champs d’une 2e liste déroulante dynamiquement #74820
    bebarth
    Maître des clés

    bonjour,
    Ce sont des listes mères-filles… le plus simple est de chercher “mère fille” sur le forum et tu devrais trouver des réponses.
    https://www.abracadabrapdf.net/forums/search/m%C3%A8re+fille/

    @+
    😎

    en réponse à : Execution d’un script si un champ est absent #74814
    bebarth
    Maître des clés

    je n’avais jamais vu le point d’exclamation placé avant…

    Si, certainement… “==” signifie “est égale à” alors que “!=” signifie “est différent de“. Le point d’exclamation (!) exprime l’inverse.
    Donc if (!this.getField("meca")) signifie s’il n’y a pas de champ nommé “meca”.

    À noter que “==” est le signe d’égalité faible qui ne tient compte que de la valeur (donc0=="0",  le chiffre 0 est égal au caractère “0” et idem pour 0==null) alors que “===” est le signe d’égalité stricte qui tient compte que de la valeur et du type, d’où 0!=="0" et 0!==null.

    @+
    😎

    en réponse à : Execution d’un script si un champ est absent #74812
    bebarth
    Maître des clés

    bonjour,
    …ou if (!this.getField("meca")) {..., ça fonctionne aussi !

    @+
    😎

    en réponse à : Mr ou Mme qui s’inscrit avec bouton radio ou case à cocher #74803
    bebarth
    Maître des clés

    bonjour,
    Tu peux écrire :
    if (event.target.value!="Off") this.getField("Texte1").value=event.target.value+" "+this.getField("Texte1").value.replace(/^(M.\s)|(Mᵐᵉ\s)/,"");
    else this.getField("Texte1").value=this.getField("Texte1").value.replace(/^(M.\s)|(Mᵐᵉ\s)/,"");

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Not Allowed – Script #74795
    bebarth
    Maître des clés

    bonjour,
    Toujours le même problème d’affichage d’un “i” entre crochets sur le forum… On peut le remplacer l’indice par un “j” et ça devrait beaucoup mieux marcher :
    var aTousLesModeles=this.templates;
    for (j=0; j<aTousLesModeles.length; j++) {
    aTousLesModeles[j].hidden=false; // true ou false
    var leNom=aTousLesModeles[j].name;
    var ind=leNom.substr(leNom.length-1);
    var nm=leNom.substr(0,leNom.length-1);
    this.setPageLabels(this.numPages-1, ["D",leNom.substr(0,leNom.length-1),ind-1]);
    }

    P.S. : Je ne me souviens pas ce qu’elle fait là, mais la variable nm en ligne 6 ne sert à rien ici…

    @+
    😎

    • Cette réponse a été modifiée le il y a 3 mois et 3 semaines par bebarth.
    en réponse à : Calcul tangente #74786
    bebarth
    Maître des clés

    bonjour,

    Si ce calcul est correct, il faudra le multiplier par 180/π pour l’avoir en degrés…

    Mais il n’est pas correct, et le calcul n’est pas une notation simplifiée du champ “tangresultatab”.
    Pour trouver la tangente, il faut écrire en script de calcul :
    event.value=Math.tan(this.getField("Resultab").value*Math.PI/180);

    On utilise “Math.tan2” pour trouver la tangente lorsque l’on a les coordonnées d’un point et non un angle !

    @+
    😎

     

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Calcul tangente #74785
    bebarth
    Maître des clés

    bonjour,

    event.value=Math.atan2(this.getField(“Resultab”).value);

    Attention, les calculs trigonométriques utilisent le radian comme unité. Si ce calcul est correct, il faudra le multiplier par 180/π pour l’avoir en degrés…

    @+
    😎

    en réponse à : Script qui fonctionne de façon isolée #74773
    bebarth
    Maître des clés

    bonjour,

    Je pense avoir réussi. Il y avait sûrement plus simple avec une autre numérotation des champs mais je ne voulais pas me refaire tous les calculs… Le script est long mais ça a l’air de marcher. Enfin ça fonctionne si il y a 10 caissons….Il va falloir que je trouve un truc s’il y a moins de 10 caissons…

    Si je peux me permettre, j’aurais quelques recommandations à te donner avant de te lancer dans des calculs, surtout lorsqu’il y a autant de champs… et malheureusement, lorsqu’on “commence” à programmer (durant quelques années), on doit souvent recommencer la nomination des champs, même si c’est un travail fastidieux…

    Je croyais avoir compris que les quantités de formats identiques s’ajoutaient ! Ça n’a pas l’air d’être le cas dans ton tableau.

    @+
    😎

     

    en réponse à : Script qui fonctionne de façon isolée #74765
    bebarth
    Maître des clés

    bonsoir,
    Je ne comprends pas bien ce qu’il faut indiquer dans les colonnes 1 et 2…
    Ce qui va compliquer c’est qu’il n’y a pas de logique de numérotation pour les champs “essence” et “Ep” ! Il aurait été plus simple qu’il y en ait une en fonction de l’indice des champs…

    @+
    😎

    en réponse à : Script qui fonctionne de façon isolée #74748
    bebarth
    Maître des clés

    bonjour,
    Tu pourrais placer en script de format de tous les champs “Caiss” et “Tiroir” :
    if (/(××)|(0×)|(NaN)/.test(event.value)) event.value="–";

    Pour éviter de modifier tous ces champs manuellement, tu peux lancer ce script :
    for (var i=0; i<this.numFields; i++) {
    if (/^(Tiroir)|(Caiss)[.]\d[.]\d$/.test(this.getNthFieldName(i))) {
    this.getField(this.getNthFieldName(i)).setAction("Format","if (/(××)|(0×)|(NaN)/.test(event.value)) event.value=\"–\";");
    }
    }

    @+
    😎

    • Cette réponse a été modifiée le il y a 4 mois par bebarth.
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Script qui fonctionne de façon isolée #74738
    bebarth
    Maître des clés

    bonjour,
    Après une première lecture rapide je remarque qu’il y a 2 fois la fonction “Calc()” en lignes 1 et 71.
    Je n’ai pas vérifié si elles sont exactement identiques, mais peut-être que la seconde qui annule la première ne permet pas l’exécution de certains calculs…

    @+
    😎

    en réponse à : Somme des radio boutons en mots #74735
    bebarth
    Maître des clés

    bonjour,
    Si on veut gagner quelques lignes de script on peut écrire :
    var OK=true;
    for (var i=1; i<=7; i++) var OK=OK && this.getField("Groupe "+i).value!="Off";
    if (OK) {
    // script
    } else event.value="";

    Mais là, j’avoue,je chipote…

    @+
    😎

    en réponse à : Not Allowed – Script #74734
    bebarth
    Maître des clés

    bonjour,

    Si ça t’intéresse, bebarth m’avait écrit un script qui “démasque” les modèles masqués en conservant leurs noms de modèle dans le panneau des pages, au lieu d’avoir page 1, page 2, etc. C’est très pratique quand il y en a beaucoup. Avec son autorisation (dont je doute pas) je pourrais te l’envoyer, ou le poster céans.


    @Merlin
    : Tu peux partager car de tête je ne me souviens pas et je ne serai de retour qu’à la fin du mois pour le plonger dans mes archives…

    @+
    😎

    en réponse à : Not Allowed – Script #74715
    bebarth
    Maître des clés

    Désolé je suis dans le cap corse sans pratiquement aucun réseau…

    @+

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Not Allowed – Script #74708
    bebarth
    Maître des clés

    bonjour,

    Si tu regardes la 3e colonne de la Quick bar, le S indique les niveaux de privilèges où tu peux exécuter cette méthode et on ne trouve pas le niveau Sript de document.

    Par contre, si tu étends les privilèges tu devrais pouvoir te créer un menu qui te permette d’exécuter ce script.

    Essaye et dis-moi/nous.

    @+

    en réponse à : Caractères avec accents dans les menus #74703
    bebarth
    Maître des clés

    Ah, l’Ardèche, ses gorges et jardins suspendus…

    😎

    en réponse à : Caractères avec accents dans les menus #74689
    bebarth
    Maître des clés

    bonjour,

    Bonjour, est-ce que vous avez remarqué dernièrement que les caractères avec accents ne sont plus interprétés correctement même si on utilise leurs valeurs Unicode ? Ex: \u00E9 pour «é».

    Est-ce que cela signifie que ça a déjà fonctionné un jour ???
    A ce que je me souvienne, depuis que j’ai commencé à écrire des utilitaires exécutables depuis un menu ça na jamais fonctionné…
    Pour mon premier utilitaire j’avais même abrégé “Proppriétés” par “Prop.”, mais maintenant j’essaie de trouver des mots sans caractères accentués ou je mets des “e” à la places des “é” !

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Sinus pour baïonnette #74682
    bebarth
    Maître des clés

    bonjour,
    Je n’avais pas vu la vidéo ! Si on la regarde, on peut comprendre que l’opération effectuée n’est pas celle indiquée sur la copie d’écran, mais : coef = déport ÷ sin(22,5) ÷ déport
    Et là on remarque vite que déport ÷ déport = 1… donc coef = 1/sin(angle) quel que soit le cet angle qui est fonction du déport.
    On peut donc écrire :
    event.value=1/Math.sin(this.getField("angle").value*Math.PI/180);
    Ici on transforme les angles en “radian” qui est l’unité trigonométrique utilisée en JavaScript.

    @+
    😎

    PS : les vacances sont pour la fin de semaine, mais j’ai (encore) des soucis avec mes e-mails et je ne reçois pas les notifications ni de ce forum, ni de celui d’adobe…

    • Cette réponse a été modifiée le il y a 5 mois par bebarth.
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Sinus pour baïonnette #74681
    bebarth
    Maître des clés

    bonjour,
    Comment un sinus compris entre -1 et +1 divisé par 500 peut-il être égale à 2,613 ???
    De plus, 541,196/500 ne fait jamais 2,6 mais 1 et des brouettes…
    Il doit y avoir une erreur de formule !

    @+
    😎

    en réponse à : Créer un lien vers une base de donnés en ligne #74640
    bebarth
    Maître des clés

    Il faudrait demander à Thom Parker, ou chercher sur son site, si quelqu’un connaît la réponse c’est lui.

    Tu nous donneras sa réponse…

    @+
    😎

    en réponse à : Créer un lien vers une base de donnés en ligne #74637
    bebarth
    Maître des clés

    bonjour,

    Non ce n’est pas possible !

    @+
    😎

    en réponse à : Générateur liste déroulantes #74633
    bebarth
    Maître des clés

    bonjour,
    Oups ! Je suppose que tout le monde aura rectifié de lui-même ce dysfonctionnement… on ne peut pas penser à tout. 😉
    Pour ma part, j’ai donc modifié les expressions régulières en ligne 124 qui servent à supprimer/rectifier certains caractères inutiles (pour éviter d’avoir des lignes vierges ou des espaces multiples par exemple). Dans la théorie, on a pas besoin de ça si l’on fait attention à ce qu’on frappe…
    La nouvelle ligne est :
    lesElements=oRslt["elem"].replace(/[ ]{2,}/g," ").replace(/^\s+|\s+$/g,"").replace(/[^\S ]+/g,"\r").replace(/\s{3,}/g,"\r");
    Explications sur demande…
    J’espère avoir pensé à tout ce coup ci !

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Somme des radio boutons en mots #74626
    bebarth
    Maître des clés

    bonjour,
    En script de format personnalisé tu peux écrire :
    if (event.value==1) event.value="Growth";
    else if (event.value==2) event.value="Diversified";
    else if (event.value==3) event.value="Growth or Diversified";
    // etc.
    else event.value="";

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Générateur liste déroulantes #74621
    bebarth
    Maître des clés

    En fait, dans ton fichier précédent, les champs à double indices n’étaient que des menus déroulants alors que dans celui-ci il y a tous types de champs.
    J’ai donc modifié le script pour qu’il ne tienne compte que des menus déroulants (2 fois : en lignes 9 et 88) :
    if (OK && this.getField(nomChamp).type=="combobox") {
    Ce qui entraine une modification en ligne 195 que je n’écris pas ici car elle comporte un “i” entre crochets, mais je fais une copie d’écran !

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Générateur liste déroulantes #74614
    bebarth
    Maître des clés

    bonjour,
    Je partage (pratiquement) toujours un fichier lorsque je fournis un script et il vaut mieux utiliser le script du fichier plutôt que celui affiché sur le post.
    J’avais remarqué qu’il y a un problème d’affichage lorsqu’on indique un “i” entre crochets (disparait à l’affichage, doit être interprété comme une balise).
    En tout cas, j’utilise souvent ce” i” entre crochets lorsque j’écris un script et des fois je pense à le modifier avant de partager ce script et d’autres fois je n’y pense pas…
    Dans ce script, il y a effectivement plusieurs fois ce “i” entre crochets et si tu as utilisé celui affiché sur le post de réponse, je pense que l’erreur doit venir de là !!!
    Essaye donc avec celui fourni dans le fichier et (normalement) ça devrait beaucoup mieux fonctionner…

    @+
    😎

    • Cette réponse a été modifiée le il y a 5 mois et 3 semaines par bebarth.
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Générateur liste déroulantes #74608
    bebarth
    Maître des clés

    bonjour,
    Fonctionne correctement avec PDF-XChange pour moi alors que j’ai un message d’erreur avec ton dernier fichier !

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Générateur liste déroulantes #74594
    bebarth
    Maître des clés

    bonjour,
    Il n’y avait pas d’erreur chez moi, et par contre ton fichier ne fonctionne pas (chez moi également) !

    @+
    😎

Affichage de 99 réponses de 1 à 99 (sur un total de 3,263)