Donnez vie à vos documents numériques !
 

bebarth

Toutes mes réponses sur les forums

Affichage de 99 réponses de 100 à 198 (sur un total de 3,104)
  • Auteur
    Réponses
  • en réponse à : Raccourcir une condition #73538
    bebarth
    Maître des clés

    bonjour,
    Je vois 2 erreurs :
    var RepUser2 = this.getField("RepUser<span style="color: #ff9900;">2</span>").valueAsString;

    ...
    if (RepUser2 == (vC2 + ("×" || "*" || " × " || " * ") + vC3) || <span style="color: #ff9900;">RepUser2 ==</span> (vC3 + ("×" || "*" || " × " || " * ") + vC2) || <span style="color: #ff9900;">RepUser2 ==</span> (Number(vC2) * Number(vC3))<span style="color: #ff0000;"><del> && vC1</del></span>)...

    Ici j’ai retiré “&& vC1” car je ne sais pas ce que tu veux vérifier…
    Tu testes et tu me dis !

    @+
    😎

    en réponse à : Champs adresses remplis après sélection nom dans liste #73523
    bebarth
    Maître des clés

    Merci pour ta réponse ! C’est ok mais j’ai un problème avec mon dernier script for (var i = 0; i < colonnes.length; i++) { if (event.value == colonnes[2]) { this.getField(“43 Deplacement”).value = colonnes[6]; break; } } j’ai un message d’erreur car le format du champ 43 est nombre monétaire

    Essaye :
    ...
    this.getField("43 Deplacement").value = Number(colonnes[6]);
    ...

    En supposant que “colonnes[6]” (la septième colonne numérotée basée sur 0) est bien un nombre !

    @+
    😎

    • Cette réponse a été modifiée le il y a 5 mois et 3 semaines par bebarth.
    en réponse à : Champs adresses remplis après sélection nom dans liste #73522
    bebarth
    Maître des clés

    Désolé, existe-t-il une autre méthode que vous pouvez utiliser pour saisir et mettre à jour des données avec le lecteur gratuit ? peccato, nessun altro metodo da poter utilizzare per inserire e aggiornare dati con il lettore gratuito?

    Je ne pense pas !

    @+
    😎

    en réponse à : Champs adresses remplis après sélection nom dans liste #73516
    bebarth
    Maître des clés

    Bonjour Bebarth J’ai réussi à importé et modifier les scripts avec adresses sans problème par contre pour les NPA j’ai qqch qui beug ! Même en reprenant le NPA du fichier avec les adresses afin d’avoir qu’un seul csv … Une case efface l’autre !? Je souhaite utiliser le script dans chaque case du formulaire avec ville et adresse il me suffit de copier ton script dans les actions des cases en question ? for (var i=0; i<colonnes.length; i++) { if (event.value==colonnes[3]) { this.getField(“npaCabinet”).value=colonnes[2]; break; } } J’ai loupé qqch ? Il me semple que c’est les colonnes 3 et 4 Non ? Pas 2 et 3 ? J’ai essayé de remplacer “npaCabinet” par “06 NPA” et villeCabinet par “07 ville” qui corresponde au champs de mon document mais cela ne fonctionne pas Je souhaite aussi ajouter une colonne dans mon csv ( N°7 frais de déplacements) avec un montant et le reprendre dans une case plus loin dans le formulaire en fonction en fonction du NPA ajouté dans le champs ” 06 NPA”

    Il faudrait partager ton fichier car comme ça je ne comprends pas !

    @+
    😎

    en réponse à : Champs adresses remplis après sélection nom dans liste #73515
    bebarth
    Maître des clés

    Salut, en faisant les tests j’ai vu que ça marche sur Acrobat 2020 (je mets à jour le livre) alors qu’avec le lecteur Adobe gratuit, ça ne marche pas. (il ne le met pas à jour pour moi) Existe-t-il un moyen pour que le lecteur gratuit mette à jour le fichier Excel ? Merci

    Le message retourné par la console avec Adobe Reader est :

    NotAllowedError: Les paramètres de protection interdisent l’accès à cette propriété ou à cette méthode.
    Doc.setDataObjectContents:27:Field addAbook.4:Mouse Up

    Donc pas possible…

    @+
    😎

    en réponse à : Champs adresses remplis après sélection nom dans liste #73510
    bebarth
    Maître des clés

    bonjour,
    Si je comprends bien, tu veux alimenter le fichier .csv à partir de données entrées dans le pdf !
    Si c’est cela, il y a un post où j’avais répondu :

    Problème d’ouverture d’un fichier


    …et le fichier correspondant en pièce jointe.

    N’hésite pas à demander pour des informations complémentaires.

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Champs adresses remplis après sélection nom dans liste #73486
    bebarth
    Maître des clés

    bonjour,
    C’est possible ! Il faut donc appeler chaque fichier csv plutôt par son nom que sa position…

    ...
    //
    var fichier=this.getDataObjectContents("NPA.csv");
    var donnees=util.stringFromStream(fichier).replace(/\r/g,"");
    var rangees=donnees.split("\n");
    var NPA=new Array();
    for (var i=0; i<rangees.length; i++) NPA=rangees.split(";");

    // Script champ "npaCabinet" désactivé
    if (event.value) {
    for (var i=0; i<NPA.length; i++) {
    if (event.value==NPA[1]) {
    this.getField("villeCabinet").value=NPA[0];
    break;
    }
    this.getField("villeCabinet").value="";
    }
    } else this.getField("villeCabinet").value="";
    // Script champ "villeCabinet" désactivé
    if (event.value) {
    for (var i=0; i<NPA.length; i++) {
    if (event.value.toUpperCase()==NPA[0].toUpperCase()) {
    this.getField("npaCabinet").value=NPA[1];
    event.target.value=NPA[0];
    break;
    }
    this.getField("npaCabinet").value=""
    }
    } else this.getField("npaCabinet").value="";

    @+
    😎

    • Cette réponse a été modifiée le il y a 5 mois et 3 semaines par bebarth.
    en réponse à : Champs adresses remplis après sélection nom dans liste #73458
    bebarth
    Maître des clés

    Tu peux écrire ceci :
    // Script champ "npaCabinet" désactivé
    for (var i=0; i<colonnes.length; i++) {
    if (event.value==colonnes[2]) {
    this.getField("villeCabinet").value=colonnes[3];
    break;
    }
    }
    // Script champ "villeCabinet" désactivé
    for (var i=0; i<colonnes.length; i++) {
    if (event.value==colonnes[3]) {
    this.getField("npaCabinet").value=colonnes[2];
    break;
    }
    }

    @+

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Champs adresses remplis après sélection nom dans liste #73456
    bebarth
    Maître des clés

    ??? Je ne comprends pas les questions !
    Tu veux un menu déroulant pour “ville” et “NPA” ?

    @+

    en réponse à : Champs adresses remplis après sélection nom dans liste #73452
    bebarth
    Maître des clés

    bonjour,
    Voici les scripts à indiquer :
    // Script de document
    this.getField("nomCabinet").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][0],j];
    cellule[0][0]="";
    this.getField("nomCabinet").setItems(cellule);

    // Script de touches personnalisé du menu déroulant
    if (!event.willCommit) {
    if (event.changeEx!=0) {
    this.getField("adresseCabinet").value=colonnes[event.changeEx][1];
    this.getField("npaCabinet").value=colonnes[event.changeEx][2];
    this.getField("villeCabinet").value=colonnes[event.changeEx][3];
    this.getField("telephoneCabinet").value=colonnes[event.changeEx][4];
    this.getField("emailCabinet").value=colonnes[event.changeEx][5];
    } else {
    this.getField("adresseCabinet").value="";
    this.getField("npaCabinet").value="";
    this.getField("villeCabinet").value="";
    this.getField("telephoneCabinet").value="";
    this.getField("emailCabinet").value="";
    }
    }

    …et si tu as des caractères accentués, il faut absolument enregistrer ton fichier .csv en UTF-8.

    @+

    • 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 à : Décomposition en facteurs premiers #73447
    bebarth
    Maître des clés

    Cadeau !
    Affichage dans différents formats :
    if (this.getField("NB.1").value) {
    function decomposition(nombre) {
    nbPremiers=[];
    while (nombre%2==0) {
    nbPremiers.push(2);
    nombre=nombre/2;
    }
    for (var i=3; i<=Math.sqrt(nombre); i=i+2) {
    while (nombre%i==0) {
    nbPremiers.push(i);
    nombre=nombre/i;
    }
    }
    if (nombre>2) nbPremiers.push(nombre);
    return nbPremiers;
    }
    this.getField("Resultat").value=decomposition(this.getField("NB.1").value).toString().replace(/[,]/g," x ");
    //
    var nbEtExposant=[[nbPremiers[0],1]];
    for (var i=1; i<nbPremiers.length; i++) {
    if (nbEtExposant[nbEtExposant.length-1][0]==nbPremiers) nbEtExposant[nbEtExposant.length-1][1]++;
    else nbEtExposant.push([nbPremiers,1])
    }
    for (var i=0; i<nbEtExposant.length; i++) {
    if (nbEtExposant[1]==1) nbEtExposant=nbEtExposant.toString().replace(/,1$/,"");
    else nbEtExposant=nbEtExposant.toString().replace(/,/,"^");
    }
    this.getField("Resultat1").value=nbEtExposant.toString().replace(/[,]/g," x ");
    //
    var f=this.getField("Resultat2");
    f.textSize=16;
    spans=new Array();
    var j=0;
    for (var i=0; i<nbEtExposant.length; i++) {
    var XX=nbEtExposant.split("^");
    spans=new Object();
    spans.text=XX[0];
    j++;
    if (XX.length>1) {
    spans=new Object();
    spans.text=XX[1];
    spans.superscript=true;
    j++;
    }
    if (i<nbEtExposant.length-1) {
    spans=new Object();
    spans.text=" x ";
    spans.textSize=f.textSize-4;
    j++;
    }
    }
    f.richValue=spans;
    } else {
    this.getField("Resultat").value="";
    this.getField("Resultat1").value="";
    this.getField("Resultat2").value="";
    }

    @+

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Champs adresses remplis après sélection nom dans liste #73441
    bebarth
    Maître des clés

    bonjour,

    Pouvez-vous m’expliquer comment le mettre en place dans le formulaire (Est-ce dans action du champ liste ?)

    Le code est placé en “Script de touches personnalisé” du menu déroulant (cf. copie d’écran).

    Est-ce que le fichier Excel peut-être masqué ou invisible pour les utilisateur ?

    Le fichier Excel peut-être masqué si on cache les volets de navigation… On peut peut-être essayer qu’il ne soit pas possible à afficher !

    Est-ce que le système marchera avec le lecteur pdf ou uniquement la version pro ?

    Ça fonctionnera sur ordinateur PC/Mac avec Acrobat Reader ou Pro (ou autres lecteurs pdf) mais pas avec les téléphones et tablettes dont les readers sont allergiques au JavaScript.

    Si tu veux plus d’aide, merci de partager un fichier (en messagerie privée si tu le souhaites).

    @+

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Champs adresses remplis après sélection nom dans liste #73438
    bebarth
    Maître des clés

    Du coup, voici un script pour un autre post que j’avais écris il y a quelques années (déjà) !

    // Script de document
    var id=this.getField(“ID”).value;
    var studentName=this.getField(“Name”).value;
    var parentName=this.getField(“Parent_Name”).value;
    var address=this.getField(“Address”).value;
    var phoneNumber=this.getField(“Phone_Number”).value;
    var email=this.getField(“E-mail”).value;
    // Initialisation liste déroulante
    this.getField(“ID”).clearItems();
    // Importer l’unique PJ sans la nommer
    var p=this.getDataObject(this.dataObjects[0].name);
    var fichier=this.getDataObjectContents(p.name);
    var donnees=util.stringFromStream(fichier);
    // Séparation des rangées (saut de ligne)
    var rangees=donnees.split(“\n”);
    // Séparation des colonnes (TAB)
    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][0], j];
    // Remplissage de la liste déroulante
    this.getField(“ID”).setItems(cellule); // champ liste déroulante
    // Re-remplissage des champs
    this.getField(“ID”).value=id;
    this.getField(“Name”).value=studentName;
    this.getField(“Parent_Name”).value=parentName;
    this.getField(“Address”).value=address;
    this.getField(“Phone_Number”).value=phoneNumber;
    this.getField(“E-mail”).value=email;

    // Script de touches personnalisé du menu déroulant
    if (!event.willCommit) {
    try {
    var studentName=colonnes[event.changeEx][1];
    } catch(e) {
    var studentName=””;
    }
    try {
    var parentName=colonnes[event.changeEx][2];
    } catch(e) {
    var parentName=””;
    }
    try {
    var address=colonnes[event.changeEx][3];
    } catch(e) {
    var address=””;
    }
    try {
    var phoneNumber=colonnes[event.changeEx][4];
    } catch(e) {
    var phoneNumber=””;
    }
    try {
    var email=colonnes[event.changeEx][5];
    } catch(e) {
    var email=””;
    }
    this.getField(“Name”).value=studentName;
    this.getField(“Parent_Name”).value=parentName;
    this.getField(“Address”).value=address;
    this.getField(“Phone_Number”).value=phoneNumber;
    this.getField(“E-mail”).value=email;
    }

    @+

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Champs adresses remplis après sélection nom dans liste #73436
    bebarth
    Maître des clés
    bonjour,


    var excelFilePath = « /chemin/fichier.xlsx »; //
    var selectedName = this.getField(« nomMenuDeroulant »).value;
    var excelData = app.Excel.importDataObjects(excelFilePath);

    Ça ce n’est pas possible !
    Ton fichier .csv doit être en pièce jointe de ton pdf.

    @+

    en réponse à : Décomposition en facteurs premiers #73434
    bebarth
    Maître des clés

    Tu veux que je développe ?

    😉

    en réponse à : Décomposition en facteurs premiers #73430
    bebarth
    Maître des clés

    bonjour,
    J’avais fait ça il y a quelques temps…
    Voici le script adapté à ton exemple :
    function decomposition(nombre) {
    var nbPremiers=[];
    while (nombre%2==0) {
    nbPremiers.push(2);
    nombre=nombre/2;
    }
    for (var i=3; i<=Math.sqrt(nombre); i=i+2) {
    while (nombre%i==0) {
    nbPremiers.push(i);
    nombre=nombre/i;
    }
    }
    if (nombre>2) nbPremiers.push(nombre);
    return nbPremiers;
    }
    this.getField("Resultat").value=decomposition(this.getField("NB.1").value).toString().replace(/[,]/g," x ");

    @+

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Champs adresses remplis après sélection nom dans liste #73422
    bebarth
    Maître des clés

    bonsoir,
    Le sujet a déjà été traité plusieurs fois, dont :

    Importation des données à partir d’un fichier texte.


    et ci-joint le script associé :
    // Importation de l'unique pièce jointe sans la nommer
    var pj=this.getDataObject(this.dataObjects[0].name);
    var fichier=this.getDataObjectContents(pj.name);
    var donnees=util.stringFromStream(fichier);
    // Suppression du fichier
    this.removeDataObject(pj.name);
    // Suppression du champ "script"
    this.removeField("script");
    // Séparation des lignes de la feuille de calcul (saut de ligne)
    var lignes=donnees.split("\r\n");
    // Séparation des cellules de chaque ligne de la feuille de calcul (TAB)
    cellules=new Array();
    for (var i=1; i<lignes.length; i++) {
    // i est le numéro de la ligne et on commence par la deuxième ligne : i=1
    cellules=lignes.split(";");
    this.getField("Nom").value=cellules[0]; // Cellule 0 de la ligne i, donc Nom
    this.getField("Prenom").value=cellules[1]; // Cellule 1 de la ligne i, donc Prénom
    this.getField("Adresse").value=cellules[2]; // etc.
    this.getField("Telephone").value=cellules[3];
    this.getField("e-mail").value=cellules[4];
    var nomFichier="Fichier "+cellules[0]+" "+cellules[1]+".pdf";
    if (i!=lignes.length-1) this.saveAs({cPath: nomFichier,bCopy: true});
    else this.saveAs({cPath: nomFichier});
    }

    …et le fichier en pièce jointe.

    @+

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Nombre aléatoire compris entre 2 valeurs #73418
    bebarth
    Maître des clés

    …et si tu veux utiliser une fonction pour indiquer les bornes, tu peux écrire :
    function getRandomIntInclusive(min,max) {
    return Math.ceil(Math.random()*(max-min+1)+min-1);
    }
    for (var i=1; i<=100; i++) console.println(i+" : "+getRandomIntInclusive(-20,20));

    @+

    • Cette réponse a été modifiée le il y a 6 mois par bebarth.
    • Cette réponse a été modifiée le il y a 6 mois par bebarth.
    en réponse à : Nombre aléatoire compris entre 2 valeurs #73417
    bebarth
    Maître des clés

    bonjour,
    Le ∆ étant de 40 et vu qu’avec “Math.ceil” on arrondi à l’entier supérieur, personnellement j’écrierais simplement :
    var Nb2=Math.ceil(Math.random()*41-21);

    Si tu lances une boucle dans la console pour 100 nombres aléatoires :
    for (var i=1; i<=100; i++) console.println(i+" : "+Math.ceil(Math.random()*41-21));
    Tu vois que ça fonctionne.

    @+

    en réponse à : Checkboxes cachées si pas cochées #73410
    bebarth
    Maître des clés

    bonjour,
    En script de calcul du champ Val1 tu écris :
    for (var i=1; i<=6; i++) {
    this.getField("c"+i).display=display.visible;
    if (event.value<3000 && this.getField("c"+i).value=="Off") this.getField("c"+i).display=display.hidden;
    }

    @+

    Attachments:
    You must be logged in to view attached files.
    en réponse à : INIT CHECKBOX en javascript #73406
    bebarth
    Maître des clés

    bonjour,
    Voici un script :
    for (var i=1; i<=27; i++) this.getField("M"+i).value="Off";

    @+

    en réponse à : Nombre aléatoire sous condition #73398
    bebarth
    Maître des clés

    bonjour,
    Il faudrait peut-être déclarer et initialiser les variables avant la boucle while !

    @+

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Nombre aléatoire sous condition #73395
    bebarth
    Maître des clés

    bonjour,
    Personnellement je placerais tes lignes dans une boucle while :
    while (Nb1*Nb6 == Nb3*Nb4) {
    var Nb1=Math.round(Math.random()*7)+2;
    var Nb2=Math.round(Math.random()*9)+1;
    var Nb3=Math.round(Math.random()*9)+1;
    var Nb4=Math.round(Math.random()*8)+1;
    var Nb5=Math.round(Math.random()*8)+1;
    var Nb6=Math.round(Math.random()*9)+1;
    }

    @+

    en réponse à : Piece jointe et icône #73385
    bebarth
    Maître des clés

    bonjour,
    Tu pourrais combiner les 2 scripts en ajoutant une alerte entre !
    Du coup, vu que le dernier fichier sélectionné avec l’interface le reste (du moins sur Mac), l’utilisateur n’a pas à re-naviguer pour le trouver…
    Dans l’exemple, j’ai mis le bouton “PJ” invisible car on a besoin de sa position dans le script.

    @+

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Piece jointe et icône #73382
    bebarth
    Maître des clés

    bonjour,
    Non, ce n’est pas possible pour des raisons de sécurité. Avec les pièces jointes on ne peut manipuler via JavaSript que celles importées manuellement. Celles importées par script sont invisibles.

    @+

    en réponse à : Effacer les commentaires #73381
    bebarth
    Maître des clés

    …et ici, à la place de “if (annots != null…” on peut même juste écrire “if (annots…”.
    Donc :
    ...
    if (annots  && annots[j].type == "FreeText") {annots[j].destroy();}

    @+

    en réponse à : Effacer les commentaires #73379
    bebarth
    Maître des clés

    bonjour,
    Tu as l’api reference en ligne où tu pourras trouver tous les types d’annotations :
    https://opensource.adobe.com/dc-acrobat-sdk-docs/library/jsapiref/JS_API_AcroJS.html#annotation-types
    Mais je pense que lorsqu’on programme régulièrement c’est pas mal de télécharger une version pdf.

    @+

    en réponse à : Effacer les commentaires #73362
    bebarth
    Maître des clés

    Bonjour,

    tu peux utiliser l’exemple de l’api référence :

    var annots = this.getAnnots({ nPage:0 }); for (var j = 0; j < annots.length; j++) if (annots[j].type == "FreeText") annots[j].destroy();

    À la place de « FreeText » tu indiques le type d’annotation que tu veux supprimer.

    @+

    Attention : J’ai changé la variable i en j à cause du problème d’affichage lorsque i est entre crochets.

    Pour exécuter le script sur tout le document il faut écrire : var annots = this.getAnnots();

    • Cette réponse a été modifiée le il y a 6 mois et 4 semaines par bebarth.
    • Cette réponse a été modifiée le il y a 6 mois et 4 semaines par bebarth.
    en réponse à : Effacer les commentaires #73359
    bebarth
    Maître des clés

    bonsoir,

    Ça se fait avec la méthode « destroy » des annotations.

    @+

    en réponse à : Action automatisée pour ajouter une page à une autre #73353
    bebarth
    Maître des clés

    bonjour,
    C’est un copier/coller du script dans cette fenêtre.

    @+

    en réponse à : Action automatisée pour ajouter une page à une autre #73344
    bebarth
    Maître des clés

    bonjour,
    Voici maintenant le lien d’une vidéo pour créer une action puis l’exécuter sur plusieurs fichiers.
    https://we.tl/t-YdvFt48Twx

    • Cette réponse a été modifiée le il y a 7 mois par bebarth.
    en réponse à : Action automatisée pour ajouter une page à une autre #73339
    bebarth
    Maître des clés

    À ce moment là il faut créer une action.

    Je te fait une vidéo demain !

    @+
    😎

    en réponse à : Action automatisée pour ajouter une page à une autre #73336
    bebarth
    Maître des clés

    bonjour,
    Voici une petite vidéo pour la façon d’exécuter le script à partir de la console.
    https://we.tl/t-47Z3Y2wHXP

    @+
    😎

    en réponse à : Empecher une date antérieure à la date du Jour #73335
    bebarth
    Maître des clés

    bonjour,
    Essaye ce script en validation du champ “DATE DE SIGNATURE_1” :
    f=this.getField("DATE_DU_JOUR");
    g=this.getField("DATE DE SIGNATURE_1");
    if (g.value!="") {
    var dateDuJour=util.scand("dd/mm/yyyy", f.value).getTime();
    var dateSignature=util.scand("dd/mm/yyyy", g.value).getTime();
    if (dateSignature<dateDuJour) {
    app.alert("Merci de ne pas antidater ce document",3);
    event.rc=false;
    }
    }

    @+
    😎

    en réponse à : Action automatisée pour ajouter une page à une autre #73330
    bebarth
    Maître des clés

    Le fichier verso fermé, tu ouvres une fiche pui la console que tu vides et tu colles le script, puis tout sélectionner et Enter du clavier numérique.
    Les 2 fichiers doivent être dans le même répertoire.

    @+

    😎

    • Cette réponse a été modifiée le il y a 7 mois et 1 semaine par bebarth.
    en réponse à : Action automatisée pour ajouter une page à une autre #73326
    bebarth
    Maître des clés

    J’ai retiré le lien de ton précédent message mais je n’ai pas pu retiré les fichiers !


    @Merlin
    : Il faut une autorisation spéciale que je n’ai pas ?

    @+
    😎

    en réponse à : Action automatisée pour ajouter une page à une autre #73322
    bebarth
    Maître des clés

    Pour faire simple, tu n’ouvres pas le fichier VersoPage.pdf mais uniquement l’autre.
    Si tu veux ajouter les 2 pages il faut modifier un peu le script et indiquer nEnd au lieu de nStart pour insertPage que ce soit avec la console ou avec une action :
    var Chemin=this.path;
    var nomDocument=this.documentFileName;
    var repertoire=Chemin.substring(0,Chemin.length-nomDocument.length);
    this.insertPages ({
    nPage: this.numPages-1,
    cPath: repertoire+"VersoPage.pdf",
    nEnd: 1
    });
    this.saveAs({
    cPath: Chemin,
    bPromptToOverwrite: false,
    });

    Attention au droit à l’image refusé ! Il vaudrait mieux retirer le fichier.

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Action automatisée pour ajouter une page à une autre #73317
    bebarth
    Maître des clés

    bonjour,
    Tu utilises le script avec le fichier VersoPage.pdf qui est le fichier dont tu ajoutes la page…
    Es-tu certain que ça ne fonctionne pas, car ce fichier à maintenant 4 pages au lieu d’une initialement !

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Action automatisée pour ajouter une page à une autre #73312
    bebarth
    Maître des clés

    Il faut activer la console JavaScript, puis ctrl J pour l’afficher.
    Dans la console vide tu colles le script, puis sélectionne tout (ctrl A) et ENTER du clavier numérique (et pas la touche Return).
    Le script s’exécute…

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Action automatisée pour ajouter une page à une autre #73309
    bebarth
    Maître des clés

    bonjour,
    On peut lancer le script soit par une action ou directement depuis la console.

    @+
    😎

    en réponse à : Pourcentage > Demande simple #73304
    bebarth
    Maître des clés

    Il suffit de modifier cette ligne :
    ...
    this.getField("Mht02").value=event.value*0.1;
    ...

    @+
    😎

    • Cette réponse a été modifiée le il y a 7 mois et 1 semaine par bebarth.
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Pourcentage > Demande simple #73300
    bebarth
    Maître des clés

    bonjour,
    En script de calcul du champ Mht01 :
    this.getField("Mht02").value="";
    if (this.getField("QLigne01").value!=0) {
    event.value=this.getField("QLigne01").value*950;
    if (this.getField("CC.0").value!="Off") this.getField("Mht02").value=event.value*1.1;
    }
    else event.value="";

    J’ai modifié les formats des 2 champs pour qu’ils soient identiques.

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Case à cocher > Limiter le nombre #73296
    bebarth
    Maître des clés

    bonjour,
    Tu crée une fonction “verif()” en script de document :
    function verif() {
    var nbCases=0;
    for (var i=0; i<21; i++) {
    if (this.getField("CC1."+i).value!="Off") nbCases++;
    if (nbCases>3) {
    this.getField("CC1."+i).value="Off";
    app.alert("Vous ne pouvez pas cocher plus de 3 cases.",3);
    break;
    }
    }
    }
    Et pour chaque case à cocher une action qui  appelle cette fonction en souris relâchée :
    verif();
    Pour écrire ce script pour toutes les cases à cocher, tu lances celui-ci à partir de la console :
    for (var i=0; i<21; i++) {
    this.getField("CC1."+i).setAction("MouseUp", "verif();");
    }

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Action automatisée pour ajouter une page à une autre #73295
    bebarth
    Maître des clés

    bonjour,
    Pour ajouter la page du fichier “VersoPage.pdf” après la dernière page, il faut écrire :
    var Chemin=this.path;
    var nomDocument=this.documentFileName;
    var repertoire=Chemin.substring(0,Chemin.length-nomDocument.length);
    this.insertPages ({
    nPage: this.numPages-1,
    cPath: repertoire+"VersoPage.pdf",
    nStart: 0
    });
    this.saveAs({
    cPath: Chemin,
    bPromptToOverwrite: false,
    });

    @+
    😎

    en réponse à : Tampons – Texte retour “Undefined” #73280
    bebarth
    Maître des clés

    …et si tu as besoin pour vérifier que les champs nécessaires sont bien remplis dans la boite de dialogue, n’hésite pas !

    @+
    😎

    en réponse à : Tampons – Texte retour “Undefined” #73277
    bebarth
    Maître des clés

    bonjour,
    J’ai passé pas mal de temps à étudier les tampons et boites de dialogue, donc si je peux me permettre, voici un script un peu “simplifié”.
    S’il n’y a rien à initialiser ou rien à vérifier, pas besoin des fonctions “initialize” et “validate” dans le script.
    Par contre, si on veut qu’il y ait au moins une case cochée et tous les champs textes remplis, ce serait peut-être bon de les vérifier…
    Et si on met les valeurs de la boite de dialogue en variables, autant s’en servir lorsqu’on les rappelle pour remplir les champs !

    ///////////////////////////////////
    // Acrobat JavaScript Dialog
    //////////////////////////////////
    var oJSDlg={
    DoDialog: function(){return app.execDialog(this);},
    commit: function (oJSDlg) {
    var oRslt=oJSDlg.store();
    // Lorsqu'on a plusieurs lignes semblables on peut simplifier
    for (var i=1; i<=4; i++) eval("bChk"+i+"=oRslt[\"Chk"+i+"\"];");
    for (var i=1; i<=3; i++) eval("text"+i+"=oRslt[\"Txt"+i+"\"];");
    },
    description: {
    name: "Conformité",
    elements: [{
    type: "view",
    width: 362,
    height: 200,
    elements: [
    {
    type: "check_box",
    item_id: "Chk1",
    name: "Vu",
    },
    {
    type: "check_box",
    item_id: "Chk2",
    name: "Vu avec annotation(s)",
    },
    {
    type: "check_box",
    item_id: "Chk3",
    name: "Corriger tel qu’annoté",
    },
    {
    type: "check_box",
    item_id: "Chk4",
    name: "Refusé",
    },
    {
    type: "edit_text",
    item_id: "Txt1",
    width: 300,
    height: 20,
    name: "Text Field 1",
    },
    {
    type: "static_text",
    name: "Description for Text Field 1",
    },
    {
    type: "edit_text",
    item_id: "Txt2",
    width: 300,
    height: 20,
    name: "Text Field 2",
    },
    {
    type: "static_text",
    name: "Description for Text Field 2",
    },
    {
    type: "edit_text",
    item_id: "Txt3",
    width: 300,
    height: 20,
    name: "Text Field 3",
    },
    {
    type: "static_text",
    name: "Description for Text Field 3",
    },
    {
    type: "ok",
    },
    ],
    }],
    },
    };
    if (event.source.forReal && event.source.stampName=="#VBC") {
    if ("ok"==oJSDlg.DoDialog()) {
    // On pourrait également simplifier
    this.getField("Chk1").checkThisBox(0,bChk1);
    this.getField("Chk2").checkThisBox(0,bChk2);
    this.getField("Chk3").checkThisBox(0,bChk3);
    this.getField("Chk4").checkThisBox(0,bChk4);
    this.getField("Text1").value=text1;
    this.getField("Text2").value=text1;
    this.getField("Text3").value=text1;
    }
    }

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Tampons – Texte retour “Undefined” #73274
    bebarth
    Maître des clés

    Oups, je n’avais pas la réponse Thom Parker lorsque j’ai répondu. Désolé !

    @+
    😎

    en réponse à : Tampons – Texte retour “Undefined” #73273
    bebarth
    Maître des clés

    bonjour,

    je n’ai que mon téléphone avec moi et je ne peux donc pas essayer, mais les noms des « ID » ne doivent contenir que 4 caractères !

    A essayer donc…

    @+
    😎

    en réponse à : Ajouter numérotation après un ajout de page modèle #73240
    bebarth
    Maître des clés

    bonjour,
    Tu peux stocker des variables dans des champs invisibles que tu mets en page 1 ou les enregistrer en script de document.

    @+
    😎

    en réponse à : Calque OCG afficher-masquer #73238
    bebarth
    Maître des clés

    bonjour,
    Sauf erreur, ça fonctionne dans ce fichier joint !

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Calque OCG afficher-masquer #73229
    bebarth
    Maître des clés

    Avant de rendre un calque visible, ils faut les rendre tous non visibles, sinon si on choisi un calque sur un plan avant ça fonctionne mais si il est sur un plan arrière ça ne fonctionne pas.
    Il faudrait donc écrire pour rester dans son style :
    if(event.willCommit) {
    this.getOCGs().some(function(a){return a.state = false};);
    this.getOCGs().some(function(a){return a.state = (a.name==event.value);});
    }

    @+
    😎

    en réponse à : Calque OCG afficher-masquer #73225
    bebarth
    Maître des clés

    bonjour,
    Voici mon script à moi ! 😉
    if (!event.willCommit) {
    var lesCalques=this.getOCGs();
    for (var ii=0; ii<lesCalques.length; ii++) lesCalques[ii].state=false;
    for (var ii=0; ii<lesCalques.length; ii++) {
    if (lesCalques[ii].name==event.changeEx) {
    lesCalques[ii].state=true;
    break;
    }
    }
    }

    @+
    😎

    PS : Indice ii au lieu de i à cause d’un problème d’affichage losque i est entre crochets…

    • Cette réponse a été modifiée le il y a 7 mois et 3 semaines par bebarth.
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Ajouter numérotation après un ajout de page modèle #73224
    bebarth
    Maître des clés

    bonjour,
    Tu peux utiliser l’indice du préfixe de la page dupliquée !

    @+
    😎

    en réponse à : Ouvrir une page web de type data #73210
    bebarth
    Maître des clés

    Il suffit d’une petite modification pour l’affichage du nom dans le popup:
    var aParams=[];
    for (var d=0; d<this.dataObjects.length; d++) aParams.push({cName: this.dataObjects[d].name.substr(0,this.dataObjects[d].name.lastIndexOf(".")), cReturn: d.toString()});
    var cChoice=app.popUpMenuEx.apply(app, aParams);
    if (cChoice!=null) this.exportDataObject({cName: this.dataObjects[cChoice].name, nLaunch:2});

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Ouvrir une page web de type data #73198
    bebarth
    Maître des clés

    bonjour,
    En script d’action souris entrée :
    var aParams=[];
    for (var d=0; d<this.dataObjects.length; d++) aParams.push({cName: this.dataObjects[d].name, cReturn: d.toString()});
    var cChoice=app.popUpMenuEx.apply(app, aParams);
    if (cChoice!=null) this.exportDataObject({cName: this.dataObjects[cChoice].name, nLaunch:2});

    @
    😎

    • Cette réponse a été modifiée le il y a 8 mois par bebarth.
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Ouvrir une page web de type data #73197
    bebarth
    Maître des clés

    Oups ! Je n’avais pas vu le dernier post… Je regarde demain !

    @+
    😎

    en réponse à : Ouvrir une page web de type data #73195
    bebarth
    Maître des clés

    bonjour,
    En script d’action souris entrée :
    var aParams=[
    {cName: "OUVRE PDF2", cReturn: "1"},
    {cName: "OUVRE html2", cReturn: "2"},
    ];
    var cChoice=app.popUpMenuEx.apply(app, aParams);
    if (cChoice!=null) {
    switch (cChoice) {
    case "1":
    this.exportDataObject({cName: "PDF2.pdf", nLaunch:2});
    break;
    case "2":
    this.exportDataObject({cName: "html2.html", nLaunch:2});
    }
    }

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Action automatisée pour ajouter une page à une autre #73194
    bebarth
    Maître des clés

    bonjour,
    Avec ton script :
    ...
    this.insertPages ({
    nPage: 0,
    cPath: repertoire+"Verso.pdf",
    nStart: 0
    });
    ...

    Tu insères la première page du fichier “Verso.pdf” après la première page de ton fichier.
    Ça n’a de sens que si ton fichier n’est pas le fichier “Verso.pdf” !

    @+
    😎

    en réponse à : Afficher le résultat d’un calcul s’il est >0 #73139
    bebarth
    Maître des clés

    bonjour,
    En script de format personnalisé :
    if (event.value<=0) event.value="";

    Pas besoin d’écrire this.event car event ne s’applique qu’au document en cours !

    @+
    😎

    en réponse à : Mettre un deuxième script #73127
    bebarth
    Maître des clés

    bonsoir,
    Ne serait-ce point la même demande que ce post :

    Code pour calculer heures, minutes, secondes

    @+
    😎

    en réponse à : Transfert de valeur #73122
    bebarth
    Maître des clés

    bonjour,
    Voici un script de calcul pour le champ “Text5” :
    if (this.getField("Dropdown1").value!=0) event.value=this.getField("Text"+this.getField("Dropdown1").value).valueAsString;
    else event.value="";
    …et le fichier qui va avec !

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Code pour calculer heures, minutes, secondes #73119
    bebarth
    Maître des clés

    Heureusement qu’il IA encore nous !

    @+
    😎

    en réponse à : Code pour calculer heures, minutes, secondes #73116
    bebarth
    Maître des clés

    bonjour,
    Voici un exemple avec un champ pour indiquer la vitesse, et le script :
    var leTemps=this.getField("ResultatKM").value/this.getField("vitesse").value;
    var lesHeures=Math.floor(leTemps);
    var resteHeures=leTemps-lesHeures;
    var lesMinutes=Math.floor(resteHeures*60);
    var lesSecondes=(resteHeures*3600-lesMinutes*60).toFixed(1);
    //
    if (lesHeures<10) var lesHeures="0"+lesHeures;
    if (lesMinutes<10) var lesMinutes="0"+lesMinutes;
    if (lesSecondes<10) var lesSecondes="0"+lesSecondes;
    //
    event.value=lesHeures+":"+lesMinutes+":"+lesSecondes;

    Ce script est un peu développé pour une meilleure compréhension.

    @+
    😎

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

    bonjour,
    Il faudrait écrire :
    if (event.value!="") event.value=event.value+" %";

    @+
    😎

    en réponse à : Code pour calculer heures, minutes, secondes #73087
    bebarth
    Maître des clés

    bonjour,
    Je t’ai fait un exemple vite fait car après je pars en vacances…
    Script de calcul lorsqu’il n’y a pas beaucoup de champs (cf. premier exemple) :
    if (this.getField("distance").value && this.getField("temps").value && this.getField("allureAux").value) {
    var Temps=this.getField("temps").value.split(":");
    var enSecondes=Number(Temps[0])*3600+Number(Temps[1])*60+Number(Temps[2]);
    var regleDe3=enSecondes*this.getField("allureAux").value/this.getField("distance").value;
    var lesMinutes=Math.floor(regleDe3/60);
    var enSecondes=(regleDe3-lesMinutes*60).toFixed(2).toString().split(".");
    var lesSecondes=enSecondes[0];
    var lesCentiemes=enSecondes[1];
    event.value=lesMinutes+"\'"+util.printf("%,302.0f", lesSecondes)+"\"";
    if (lesCentiemes!="00") event.value+=lesCentiemes;
    } else event.value="";

    Vu que tu as souvent beaucoup de champs, il est préférable de mettre une fonction en script de document et de l’appeler uniquement lorsqu’un champ modifié est désactivé, ce qui évite de lancer le calcul pour tous les champs après chaque évènement (cf. second exemple).
    La fonction :
    function allure(laDistance,leTemps,lAllureAux) {
    if (laDistance && leTemps && lAllureAux) {
    var Temps=leTemps.split(":");
    var enSecondes=Number(Temps[0])*3600+Number(Temps[1])*60+Number(Temps[2]);
    var regleDe3=enSecondes*lAllureAux/laDistance;
    var lesMinutes=Math.floor(regleDe3/60);
    var enSecondes=(regleDe3-lesMinutes*60).toFixed(2).toString().split(".");
    var lesSecondes=enSecondes[0];
    var lesCentiemes=enSecondes[1];
    this.getField("allure."+ind).value=lesMinutes+"\'"+util.printf("%,302.0f", lesSecondes)+"\"";
    if (lesCentiemes!="00") this.getField("allure."+ind).value+=lesCentiemes;
    } else this.getField("allure."+ind).value="";

    }
    <code>et tu l'appelles avec :</code>
    var indice=event.target.name.split(".");

    ind=indice[1];
    allure(this.getField("distance."+ind).value,this.getField("temps."+ind).value,this.getField("allureAux."+ind).value);

    @+
    😎

    • Cette réponse a été modifiée le il y a 10 mois par bebarth.
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Code pour calculer heures, minutes, secondes #73085
    bebarth
    Maître des clés

    bonjour,
    Si tu regardes le format de ton champ end.0, tu verras que ce n’est pas un nombre mais une valeur au format H:MM:ss (personnalisé).
    Tu ne peux donc pas l’utiliser telle quelle dans ta boucle.

    @+
    😎

    en réponse à : Code pour calculer heures, minutes, secondes #73070
    bebarth
    Maître des clés

    Je n’ai pas étudié le fichier complètement pour savoir à quoi correspondent les différents champs, mais dans ton script :
    for (var a=0 ; a<14 ; a++){
    var d = this.getField("dist."+a).value;
    var b = 500/d;
    }
    event.value= "";
    var somme=Time2Num("mm:ss", this.getField("end.0").value)/b;
    HM_Format()
    La boucle ne sert à rien vu qu’il n’y a pas d’opération, et ton b sera donc toujours celui de l’indice 13…
    Je pense que ce n’est pas ce que u souhaites !

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Code pour calculer heures, minutes, secondes #73063
    bebarth
    Maître des clés

    Il n’y a toujours pas de champs “t.”…
    Et pour la boucle de la première ligne, a<=13 (et non a<17).

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Code pour calculer heures, minutes, secondes #73058
    bebarth
    Maître des clés

    bonjour,
    Moi je n’ai pas d’erreur mais la première chose que je vois c’est qu’il n’y a pas de champs “t.” (t minuscule).

    @+
    😎

    en réponse à : Il y a-t-il une façon de faire un calcul plus court que ça? #73046
    bebarth
    Maître des clés

    Essaye comme ça :

    var laSomme=0;
    for (var i=1; i<=8; i++) laSomme+=Number(this.getField("TOTAL"+i).value);
    if (laSomme==0) event.value="";
    else event.value=laSomme;

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Il y a-t-il une façon de faire un calcul plus court que ça? #73044
    bebarth
    Maître des clés

    event.value=0;
    for (var i=1; i<=8; i++) event.value+=this.getField("TOTAL"+i).value;
    if (event.value==0) event.value="";

    @+
    😎

    en réponse à : Il y a-t-il une façon de faire un calcul plus court que ça? #73042
    bebarth
    Maître des clés

    bonjour,
    Quelle est la question ?

    @+
    😎

    en réponse à : Changer le libellé d’un bouton en cliquant dessus #73039
    bebarth
    Maître des clés

    bonjour,
    Il faut écrire :
    if (event.target.buttonGetCaption()=="SUC") event.target.buttonSetCaption("ECH");
    else if (event.target.buttonGetCaption()=="ECH") event.target.buttonSetCaption("ABD");
    else if (event.target.buttonGetCaption()=="ABD") event.target.buttonSetCaption("");
    else event.target.buttonSetCaption("SUC");

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Javascript PDF archivable #73016
    bebarth
    Maître des clés
    bonjour,

    Un tel script peut aussi être exécuté par une Action (Assistant Action).

    Exact ! Ou même depuis la console…
    Et pour ces deux façons on n’a pas besoin d’étendre les privilèges.

    @+
    😎

    en réponse à : Javascript PDF archivable #73009
    bebarth
    Maître des clés

    bonjour,
    Il n’est pas possible d’enregistrer avec un script directement à partir d’un bouton.
    Pour cela, il faut un script de d’application (un fichier .js que l’on place dans le répertoire JavaScript d’Acrobat).
    Le script est du genre :
    if (app.formsVersion>=8) {
    Save_PDFA=app.trustedFunction(function(cheminFichier) {
    app.beginPriv();
    this.flattenPages();
    this.saveAs({
    cPath: cheminFichier,
    cConvID: "com.callas.preflight.pdfa"
    });
    app.endPriv();
    })
    console.println("Le plugin d\'enregistrement \"Save_PDFA\" est actif.");
    }

    Et tu appelles le script via ton bouton avec :
    event.target.display=display.hidden;
    Save_PDFA("myDoc.pdf");

    Ici la première ligne cache le bouton avant d’aplatir les champs (on ne peut pas supprimer le champ qui lance l’action).

    Ci-joint les fichiers.

    @+
    😎

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

    …deux petites mofifications :
    for (var laLigne=1; laLigne<=34; laLigne++) {
    var lesValeurs=[];
    for (var i=1; i<=10; i++) {
    if (this.getField("a."+laLigne+"."+i).value!=="") lesValeurs.push();
    this.getField("a."+laLigne+"."+i).fillColor=["T"];
    }
    try {
    lesValeurs.sort(function(a,b){return a[1]-b[1]});
    for (var i=0; i<=10; i++) {
    if (lesValeurs[1]==lesValeurs[0][1]) {
    if (this.getField("a."+laLigne+"."+lesValeurs[0]).value!=="") this.getField("a."+laLigne+"."+lesValeurs[0]).fillColor=this.getField("A."+laLigne).value=="+"?color.green:color.red;
    } else break;
    }
    for (var i=lesValeurs.length-1; i>=0; i--) {
    if (lesValeurs[1]==lesValeurs[lesValeurs.length-1][1]) {
    if (this.getField("a."+laLigne+"."+lesValeurs[0]).value!=="") this.getField("a."+laLigne+"."+lesValeurs[0]).fillColor=this.getField("A."+laLigne).value=="-"?color.green:color.red;
    }
    }
    } catch(e) {}
    }

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Valeur maximale #72986
    bebarth
    Maître des clés
    bonjour,

    J’ai testé le fichier joint, ça ne fonctionnait pas.

    Tu as certainement testé le script de mon fichier avec ton fichier, car le miens fonctionne très bien… un peu long en script de calcul comme je l’ai expliqué précédemment. Si les valeurs sont entrées manuellement il vaut mieux utiliser un script de champ désactivé qui ne fera le calcul que sur la ligne.
    Pour fonctionner correctement il faut supprimer tous tes autres scripts relatifs à ce calcul. Les menus déroulants doivent également afficher + ou – et ne doivent donc pas être vides.

    Je ne vois pas ou se trouvent les différences pour les valeurs des listes déroulantes (+ et -).

    Il faut regarder les 2 lignes de ce type :
    this.getField("a."+laLigne+"."+lesValeurs[0][0]).fillColor=this.getField("A."+laLigne).value=="+"?color.green:color.red;

    @+
    😎

    en réponse à : Valeur maximale #72980
    bebarth
    Maître des clés

    Du coup, le script d’un seul champ (ici ) doit être :
    for (var laLigne=1; laLigne<=34; laLigne++) {
    var lesValeurs=[];
    for (var i=1; i<=10; i++) {
    if (this.getField("a."+laLigne+"."+i).value!=="") lesValeurs.push([i,this.getField("a."+laLigne+"."+i).value]);
    this.getField("a."+laLigne+"."+i).fillColor=["T"];
    }
    try {
    lesValeurs.sort(function(a,b){return a[1]-b[1]});
    if (this.getField("a."+laLigne+"."+lesValeurs[0][0]).value!=="") this.getField("a."+laLigne+"."+lesValeurs[0][0]).fillColor=this.getField("A."+laLigne).value=="+"?color.green:color.red;
    if (this.getField("a."+laLigne+"."+lesValeurs[lesValeurs.length-1][0]).value!=="") this.getField("a."+laLigne+"."+lesValeurs[lesValeurs.length-1][0]).fillColor=this.getField("A."+laLigne).value=="-"?color.green:color.red;
    } catch(e) {}
    }
    A noter que j’ai ajouté l’inégalité absolu “!==” pour renir compte des éventuels 0.

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Valeur maximale #72977
    bebarth
    Maître des clés
    bonjour,

    Cela fonctionne sauf pour la selection du + ou – dans la liste déroulante, cela ne change rien, c’est toujours la valeur mini qui apparait en vert.

    Les menus déroulants + ou – sont sensés faire quoi ?

    @+
    😎

    en réponse à : Valeur maximale #72973
    bebarth
    Maître des clés

    bonjour,
    Sur le même principe, on écrit :
    for (var laLigne=1; laLigne<=34; laLigne++) {
    var lesValeurs=[];
    for (var i=1; i<=10; i++) {
    if (this.getField("a."+laLigne+"."+i).value!="") lesValeurs.push([i,this.getField("a."+laLigne+"."+i).value]);
    this.getField("a."+laLigne+"."+i).fillColor=["T"];
    }
    try {
    lesValeurs.sort(function(a,b){return a[1]-b[1]});
    if (this.getField("a."+laLigne+"."+lesValeurs[0][0]).value!="") this.getField("a."+laLigne+"."+lesValeurs[0][0]).fillColor=color.green;
    if (this.getField("a."+laLigne+"."+lesValeurs[lesValeurs.length-1][0]).value!="") this.getField("a."+laLigne+"."+lesValeurs[lesValeurs.length-1][0]).fillColor=color.red;
    } catch(e) {}
    }

    @+
    😎

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

    bonsoir,
    Dans le principe, voici un script que l’on peut placer en script de calcul d’un seul champ :
    for (var laLigne=1; laLigne<=15; laLigne++) {
    var lesValeurs=[];
    for (var i=1; i<=10; i++) {
    lesValeurs.push([i,this.getField("a."+laLigne+"."+i).value]);
    this.getField("a."+laLigne+"."+i).fillColor=["T"];
    }
    lesValeurs.sort(function(a,b){return a[1]-b[1]});
    if (this.getField("a."+laLigne+"."+lesValeurs[0][0]).value!="") this.getField("a."+laLigne+"."+lesValeurs[0][0]).fillColor=color.green;
    if (this.getField("a."+laLigne+"."+lesValeurs[9][0]).value!="") this.getField("a."+laLigne+"."+lesValeurs[9][0]).fillColor=color.red;
    }

    Ce script est exécuté après chaque évènement, ce qui risque de ralentir si il y a beaucoup d’autres calcul.

    Si les valeur sont entrées manuellement pour chaque champ, il vaut mieux mettre une fonction en script de document :
    function couleur() {
    var ligne=event.target.name.split(".");
    var laLigne=ligne[1];
    var lesValeurs=[];
    for (var i=1; i<=10; i++) {
    lesValeurs.push([i,this.getField("a."+laLigne+"."+i).value]);
    this.getField("a."+laLigne+"."+i).fillColor=["T"];
    }
    lesValeurs.sort(function(a,b){return a[1]-b[1]});
    if (this.getField("a."+laLigne+"."+lesValeurs[0][0]).value!="") this.getField("a."+laLigne+"."+lesValeurs[0][0]).fillColor=color.green;
    if (this.getField("a."+laLigne+"."+lesValeurs[9][0]).value!="") this.getField("a."+laLigne+"."+lesValeurs[9][0]).fillColor=color.red;
    }

    …et de l’appeler avec un script de champ désactivé :
    couleur();

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Liste déroulante et remplissage de champ correspondant #72951
    bebarth
    Maître des clés

    bonjour,
    En script de validation du menu déroulant tu écris :
    var items=[];
    for (var i=0; i<event.target.numItems; i++) items.push([event.target.getItemAt(i,false),event.target.getItemAt(i,true)]);
    for (var i=0; i<items.length; i++) {
    if (items[0]==event.value) {
    this.getField("Text1").value=items[1];
    break;
    }
    }
    Et bien sûr tu supprimes le script de calcul du champ texte…

    @+
    😎

    P.S. : En script de validation d’un menu déroulant, event.value retourne le nom de l’élément et non la valeur d’exportation.

    • Cette réponse a été modifiée le il y a 11 mois et 2 semaines par bebarth.
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Liste déroulante et remplissage de champ correspondant #72949
    bebarth
    Maître des clés

    bonjour,
    Je ne suis pas certain de bien comprendre !
    Lorsque l’utilisateur indique un élément, tu souhaites l’ajouter à ta liste sans pour cela modifier le contenu du champ texte.
    C’est ça ???

    @+
    😎

    en réponse à : Script textbox vers une autre textbox #72946
    bebarth
    Maître des clés
    bonjour,
    Je ne comprends pas ceci :

    … si observation rempli copié a l’identique ce qui est marqué dans la textbox …

    @+
    😎

    en réponse à : Horloge dans un dossier pdf #72936
    bebarth
    Maître des clés

    bonjour,

    C’est également possible en dessinant les aiguilles en SVG, mais alors là bon courage.

    Ça me “trottait” dans la tête depuis que j’ai répondu, je me suis donc replongé sur le sujet et voici une horloge analogique !
    Le design n’est peut-être pas très moderne, je verrai si je trouve “5 minutes”. 😂

    @+
    😎

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

    bonjour,
    Si tu utilises mon script pour tous les champs “Total” il faut également supprimer tous les anciens scripts des champs “Heures supplémentaires”.
    Il faut également revoir l’ordre de calcul des champs, et enfin placer ce script pour le champ “Total HS” :
    var total=0;
    for (var i=1; i<=5; i++) total+=Time2Num("hh:mm",this.getField("Champ texte5."+i).value);
    event.value=calculHeures(total);

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Calcul d’après une case à cocher #72924
    bebarth
    Maître des clés

    bonjour,
    En script de calcul pour le champ “cartebl” :
    if (event.value!="Off") this.getField("cartejeune").value="Off";
    et pour le champ “cartejeune” :
    if (event.value!="Off") this.getField("cartebl").value="Off";

    @+
    😎

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

    bonjour,
    Voici les scripts à placer en script de document et script de calcul des champs “Total”  :

    // Fonctions en scripts de document
    function Time2Num(sFormat,sTime) {
    if(sTime=="") return "";
    var oTime=util.scand("mm/dd/yyyy "+sFormat,"01/01/1970 "+sTime);
    var fTZOffset=oTime.getTimezoneOffset()*1000*60;
    var fTime=oTime.valueOf()-fTZOffset;
    return Math.round(fTime/1000);
    }
    function calculHeures(nbHeures) {
    //if (nbHeures<0) nbHeures=(24*3600)+(fin-debut);
    nbHeures=Math.round(nbHeures/60);
    heures=Math.floor(nbHeures/60);
    lesMinutes=((nbHeures/60)-heures)*60;
    minutes=util.printf("%,302.0f",lesMinutes);
    return heures+":"+minutes;
    }
    function affichage(ind) {
    var debutJournee=this.getField("Champ texte1."+ind).value;
    var pauseJournee=this.getField("Champ texte2."+ind).value;
    var finJournee=this.getField("Champ texte3."+ind).value;
    var heuresTheoriques=this.getField("Champ texte4."+ind).value;
    if(debutJournee!="" && finJournee!="") {
    var debut=Time2Num("hh:mm",debutJournee);
    var pause=Time2Num("hh:mm",pauseJournee);
    var fin=Time2Num("hh:mm",finJournee);
    var theoriques=Time2Num("hh:mm",heuresTheoriques);
    event.value=calculHeures(fin-debut-pause);
    this.getField("Champ texte5."+ind).value=calculHeures(fin-debut-pause-theoriques);
    } else {
    event.value="";
    this.getField("Champ texte5."+ind).value="";
    }
    }

     

    // Script de calcul des champs "Total"
    var indice=event.target.name.substr(event.target.name.indexOf(".")+1);
    affichage(indice);

    Dans le fichier joint, seule la première ligne est calculée avec ce script.

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Liste déroulante et changement d’image #72909
    bebarth
    Maître des clés

    👍

    Juste pour info, voici comment j’aurais écrit le script :

    // Fonction en script de document
    function light(nSuffix) {
    switch (event.changeEx) {
    case "Oui":
    var couleur=["RGB",0,1,0];
    break;
    case "Partiellement":
    var couleur=["RGB",1,1,0];
    break;
    case "Non":
    var couleur=["RGB",1,0,0];
    break;
    default:
    var couleur=["T"];
    }
    this.getField("gommette."+nSuffix).fillColor=couleur;
    }

    // Script de touches personnalisé
    if (!event.willCommit) light(event.target.name.substr(event.target.name.indexOf(".")+1));

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Liste déroulante et changement d’image #72903
    bebarth
    Maître des clés

    Peux-tu partager un fichier ?

    @+
    😎

    en réponse à : Liste déroulante et changement d’image #72900
    bebarth
    Maître des clés

    bonjour,
    Si j’ai bien compris, tu dois appeler la fonction avec :
    light(event.target.name); N’importe quoi !!! ça va changer la couleur du menu déroulant…

    Comme le dit Merlin, si tu as plusieur menus déroulants et plusieurs gommettes avec le même indice, lu appelles  la fonction avec :
    light(event.target.name.substr(event.target.name.indexOf(".")+1));

    @+
    😎

    • Cette réponse a été modifiée le il y a 1 année par bebarth.
    en réponse à : Liste déroulante et changement d’image #72886
    bebarth
    Maître des clés

    bonjour,
    Dans ce cas on peut simplifier un peu le script :
    if (!event.willCommit) {
    this.getField("gommette").fillColor=["RGB",1,1,1];
    this.getField("ijaune").display=display.hidden;
    this.getField("irouge").display=display.hidden;
    this.getField("iverte").display=display.hidden;
    this.getField("ibleu").display=display.hidden;
    switch (event.changeEx) {
    case "Bleu":
    this.getField("gommette").fillColor=["RGB",0,0,1];
    this.getField("ibleu").display=display.visible;
    break;
    case "Jaune":
    this.getField("gommette").fillColor=["CMYK",0,0,1,0];
    this.getField("ijaune").display=display.visible;
    break;
    case "Vert":
    this.getField("gommette").fillColor=["RGB",0,1,0];
    this.getField("iverte").display=display.visible;
    break;
    case "Rouge":
    this.getField("gommette").fillColor=["RGB",1,0,0];
    this.getField("irouge").display=display.visible;
    }
    }

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Project Terminé Facture #72881
    bebarth
    Maître des clés

    …oui, mais si on écrit 35132023 cela affiche 35/13/2023 ce qui n’est pas une date !

    @+
    😎

    en réponse à : Liste déroulante et changement d’image #72879
    bebarth
    Maître des clés

    bonjour,
    Voici un script de touches personnalisé pour le menu déroulant :
    if (!event.willCommit) {
    switch (event.changeEx) {
    case "Bleu":
    var couleur=["RGB",0,0,1];
    break;
    case "Jaune":
    var couleur=["CMYK",0,0,1,0];
    break;
    case "Vert":
    var couleur=["RGB",0,1,0];
    break;
    default:
    var couleur=["RGB",1,0,0];
    }
    this.getField("gommette").fillColor=couleur;
    }

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Project Terminé Facture #72875
    bebarth
    Maître des clés

    bonjour,
    Je n’ai pas trouvé où se trouve ce code, mais il sert à indiquer le formatage d’un champ où chaque 9 représente un chiffre de 0 à 9.
    Vu que c’est un champ où il faut indiquer une date, il faudrait mieux utiliser AFDate_FormatEx(dd/mm/yyyy) qui ne permet d’indiquer qu’une date valide.

    @+
    😎

    en réponse à : Horloge dans un dossier pdf #72871
    bebarth
    Maître des clés
    bonjour,

    Bonjour à tous, je suis nouveau et je découvre le langage JavaScript, j’aimerais intégrer une horloge analogique…

    Je pense que tu ne commences pas par le plus facile !

    Est-il techniquement possible d’avoir une horloge analogique en javascript?? Si oui avez vous un exemple? Merci

    Ce sera donc possible si tu utilises les outils  commentaires, mais il faudra revoir le script du fichier que Merlin à partagé car il ne fonctionne pas très bien, et après avoir regardé vite-fait je ne vois pas pourquoi ! A-t-il déjà fonctionné correctement avec des version précédentes ?

    C’est également possible en dessinant les aiguilles en SVG, mais alors là bon courage.
    Il n’y a aucune documentation disponible pour Acrobat et le peu de personnes qui savent utiliser cette méthode ne sont pas disposées à partager leurs connaissances. Il faut dire que c’est assez compliqué… J’ai personnellement mis des mois à comprendre un peu comment ça fonctionne et vu que je n’ai pas pratiqué également depuis d’autres mois il faudrait que je me replonge dedans car biens sur toutes les commandes disponibles (en HTML par exemple) ne le sont pas avec Acrobat.
    https://www.w3schools.com/graphics/svg_intro.asp

    Si je peux te donner un conseil, utilise une horloge numérique !!!!

    @+
    😎

    • Cette réponse a été modifiée le il y a 1 année par bebarth.
    en réponse à : Liste déroulante et remplissage de champ correspondant #72862
    bebarth
    Maître des clés

    bonjour,

    en script de calcul du champ tu écris :

    event.value=this.getField(«nonChamp»).value;

    Avec des guillemets à l’anglaise…

    @+
    😎

    en réponse à : Project Terminé Facture #72853
    bebarth
    Maître des clés

    👍

    je regarderai la semaine prochaine car je n’ai qu’un téléphone cette semaine…

    @+
    😎

    en réponse à : Incrémental #72844
    bebarth
    Maître des clés

    bonjour,
    Ça fonctionne si le numéro est attribué à partir un seul fichier initial, mais si on veut établir une facture à partir de documents “fichier client” déjà existants il faudra utiliser un fichier “compteur”.

    @+
    😎

Affichage de 99 réponses de 100 à 198 (sur un total de 3,104)