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,382)
  • Auteur
    Réponses
  • en réponse à : Ajustages #76577
    bebarth
    Maître des clés

    Bonsoir,
    J’ai extrait les tableaux d’après ceux de ton pdf.
    Je regarde ce que je peux faire dès que possible (certainement ce week-end).

    @+
    😎

    en réponse à : Ajustages #76571
    bebarth
    Maître des clés

    bonjour,
    Est-il possible de trouver un fichier de toutes ces valeurs ?
    Je n’ai jamais cherché, mais j’imagine que ça doit se trouver.
    Avec ça on pourra effectivement s’en servir pour extraire toutes le valeurs dont on a besoin.

    @+
    😎

    en réponse à : Tableau de conversion #76566
    bebarth
    Maître des clés

    bonjour,
    Ce ne doit pas être de bon fichier…

    @+
    😎

    en réponse à : Tableau de conversion #76562
    bebarth
    Maître des clés

    bonjour,

    Voila impec,

    Es-tu certain que ça fonctionne bien, parce que lorsque je change la valeur à convertir il n’y a plus rien !!!

    Tu devrais peut être limiter le champ de résultat à deux décimales…

    Si on indique 2 décimales dans le cas de l’exemple, le résulta va donner 0 !
    Il serait donc préférable d’afficher un résultat en « notation scientifique » (comme on appelle ça) si le résultat à 2 décimales. Dans mon script on modifie la fin du script :
    ...
    else {
    valeuaAffichee=util.printf("%.3f",resultat).replace(/\.?0+$/,"");
    if (valeuaAffichee!=0) event.value=valeuaAffichee;
    else event.value=resultat.toExponential(2);
    }
    }

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Tableau de conversion #76555
    bebarth
    Maître des clés

    Le 1) c’est l’onglet « Options » du menu déroulant « typeUnite ».

    Le 2) est en script de document.

    Le 3) est en script de touches personnalisé du menu déroulant « typeUnite ».

    Le 4) est en script de calcul du champ « valeurConvertie ».

    @+
    😎

    en réponse à : Tableau de conversion #76552
    bebarth
    Maître des clés

    Comme je te l’ai expliqué dans ce post (#post-76546) :

    Tableau de conversion


    ces menus déroulants se remplissent via le script et non manuellement. Je t’invite donc à lire ce post en entier !

    @+
    😎

    en réponse à : Tableau de conversion #76549
    bebarth
    Maître des clés

    Quelle liste ??? Le menu déroulant « typeUnite » ?

    @+
    😎

    en réponse à : Tableau de conversion #76546
    bebarth
    Maître des clés

    bonjour,
    Pour rajouter une famille d’unités, il faut faire 4 modifications. Ici on va rajouter un convertisseur de températures.

    1) On joute MANUELLEMENT « Température » comme élément du menu déroulant « mère » -> typeUnite.

    2) Dans le script de document, on ajoute à l’objet « lesUnites » les différentes unités à convertir :
    ...
    "Température": [
    ["Celcius (°C)","°C"],
    ["Fahrenheit (°F)","°F"],
    ["Kelvin (°K)","°K"],
    ],
    ...

    3) On ajoute au script de touches personnalisé du champ Mère « typeUnite » la valeur par défaut lorsque l’on sélectionne « Tempétature ».
    ...
    case "Température":var uniteBase="°C"; break;
    ...

    4) Et enfin ou ajoute les différent calculs de conversions selon les unités.
    Dans un premier temps on convertit l’unité sélectionnée vers l’unité de base, puis ce résultat vers l’unité à convertir :
    ...
    case "Température":
    // Unité de base -> Celcius
    switch (uniteInitiale) {
    case "°C": var base=valeurInitiale; break;
    case "°F": var base=(valeurInitiale-32)*5/9; break;
    case "°K": var base=valeurInitiale-273.15; break;
    }
    switch (uniteConvertie) {
    case "°C": var resultat=base; break;
    case "°F": var resultat=(base*9/5)+32; break;
    case "°K": var resultat=base+273.15; break;
    }
    break;
    ...

    J’espère que cela est plus clair pour toi.

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Tableau de conversion #76543
    bebarth
    Maître des clés

    bonjour,
    J’essaie de regarder ce weekend !

    @+
    😎

    en réponse à : Tableau de conversion #76537
    bebarth
    Maître des clés

    Tout est dans les scripts.
    J’ai retirés les unités anglo-saxonnes.
    je te laisse étudier les différences des scripts.

    // Script de document : Tableau des unités par famille
    var lesUnites={
    "Distance": [
    ["nanomètre (nm)","nm"],
    ["micromètre (µm)","µm"],
    ["millimètre (mm)","mm"],
    ["centimètre (cm)","cm"],
    ["décimètre (dm)","dm"],
    ["mètre (m)","m"],
    ["décamètre (dam)","dam"],
    ["hectomètre (hm)","hm"],
    ["kilomètre (km)","km"],
    ],
    "Poids": [
    ["milligramme (mg)","g"],
    ["centigramme (cg)","cg"],
    ["décigramme (dg)","dg"],
    ["gramme (g)","g"],
    ["décagramme (dag)","dag"],
    ["hectogramme (hg)","hg"],
    ["kilogramme (kg)","kg"],
    ["quintal (q)","q"],
    ["tonne (t)","t"],
    ],
    "Surface": [
    ["millimètre carré (mm^2)","mm2"],
    ["centimètre carré (cm^2)","cm2"],
    ["décimètre carré (dm^2)","dm2"],
    ["mètre carré (m^2)","m2"],
    ["kilomètre carré (km^2)","km2"],
    ["centiare (ca)","ca"],
    ["are (a)","a"],
    ["hectare (ha)","ha"],
    ],
    "Volume": [
    ["millilitre (ml)","ml"],
    ["centilitre (cl)","cl"],
    ["décilitre (dl)","dl"],
    ["litre (l)","l"],
    ["décalitre (dal)","l"],
    ["hectolitre (hl)","l"],
    //
    ["millimètre cube (mm^3)","mm3"],
    ["centimètre cube (cm^3)","cm3"],
    ["décimètre cube (dm^3)","dm3"],
    ["mètre cube (m^3)","m3"],
    ]
    };

    // Script de touches personnalisé du champ Mère "typeUnite"
    if (!event.willCommit) {
    this.getField("uniteInitiale").clearItems();
    this.getField("uniteConvertie").clearItems();
    if (event.changeEx!=0) {
    this.getField("uniteInitiale").setItems(lesUnites[event.changeEx]);
    this.getField("uniteConvertie").setItems(lesUnites[event.changeEx]);
    switch (event.changeEx) {
    case "Distance":var uniteBase="m"; break;
    case "Poids":var uniteBase="kg"; break;
    case "Surface":var uniteBase="m2"; break;
    case "Volume":var uniteBase="l"; break;
    }
    this.getField("uniteInitiale").value=uniteBase;
    this.getField("uniteConvertie").value=uniteBase;
    }
    }

    // Script de calcul du champ "valeurConvertie"
    var typeUnite=this.getField("typeUnite").value;
    var uniteInitiale=this.getField("uniteInitiale").value;
    var uniteConvertie=this.getField("uniteConvertie").value;
    var valeurInitiale=this.getField("valeurInitiale").value;
    if (valeurInitiale=="" || typeUnite=="" || uniteInitiale=="" || uniteConvertie=="") {
    event.value="";
    } else {
    valeurInitiale=Number(valeurInitiale);
    // 1 - Conversion vers l'unité de base
    // 2 - Conversion à partir de l'unité de base
    switch (typeUnite) {
    case "Distance":
    // Unité de base -> mètre
    switch (uniteInitiale) {
    case "nm": var base=valeurInitiale/1000000000; break;
    case "µm": var base=valeurInitiale/1000000; break;
    case "mm": var base=valeurInitiale/1000; break;
    case "cm": var base=valeurInitiale/100; break;
    case "dm": var base=valeurInitiale/10; break;
    case "m": var base=valeurInitiale; break;
    case "dam": var base=valeurInitiale*10; break;
    case "hm": var base=valeurInitiale*100; break;
    case "km": var base=valeurInitiale*1000; break;
    }
    switch (uniteConvertie) {
    case "nm": var resultat=base*1000000000; break;
    case "µm": var resultat=base*1000000; break;
    case "mm": var resultat=base*1000; break;
    case "cm": var resultat=base*100; break;
    case "dm": var resultat=base*10; break;
    case "m": var resultat=base; break;
    case "dam": var resultat=base/10; break;
    case "hm": var resultat=base/100; break;
    case "km": var resultat=base/1000; break;
    }
    break;
    case "Poids":
    // Unité de base -> kilogramme
    switch (uniteInitiale) {
    case "mg": var base=valeurInitiale/1000000; break;
    case "cg": var base=valeurInitiale/100000; break;
    case "dg": var base=valeurInitiale/10000; break;
    case "g": var base=valeurInitiale/1000; break;
    case "dag": var base=valeurInitiale/100; break;
    case "hg": var base=valeurInitiale/10; break;
    case "kg": var base=valeurInitiale; break;
    case "q": var base=valeurInitiale*100; break;
    case "t": var base=valeurInitiale*1000; break;
    }
    switch (uniteConvertie) {
    case "mg": var resultat=base*1000000; break;
    case "cg": var resultat=base*100000; break;
    case "dg": var resultat=base*10000; break;
    case "g": var resultat=base*1000; break;
    case "dag": var resultat=base*100; break;
    case "hg": var resultat=base*10; break;
    case "kg": var resultat=base; break;
    case "q": var resultat=base/100; break;
    case "t": var resultat=base/1000; break;
    }
    break;
    case "Surface":
    // Unité de base -> mètre carré
    switch (uniteInitiale) {
    case "mm2": var base=valeurInitiale/1000000; break;
    case "cm2": var base=valeurInitiale/10000; break;
    case "dm2": var base=valeurInitiale/100; break;
    case "m2": var base=valeurInitiale; break;
    case "km2": var base=valeurInitiale*1000000; break;
    case "ca": var base=valeurInitiale; break;
    case "a": var base=valeurInitiale*10000; break;
    }
    switch (uniteConvertie) {
    case "mm2": var resultat=base*1000000; break;
    case "cm2": var resultat=base*10000; break;
    case "dm2": var resultat=base*100; break;
    case "m2": var resultat=base; break;
    case "km2": var resultat=base/1000000; break;
    case "ca": var resultat=base; break;
    case "a": var resultat=base/10000; break;
    }
    break;
    case "Volume":
    // Unité de base -> litre
    switch (uniteInitiale) {
    case "ml": var base=valeurInitiale/1000; break;
    case "cl": var base=valeurInitiale/100; break;
    case "dl": var base=valeurInitiale/10; break;
    case "l": var base=valeurInitiale; break;
    case "dal": var base=valeurInitiale*10; break;
    case "hl": var base=valeurInitiale*100; break;
    //
    case "mm3": var base=valeurInitiale/1000000; break;
    case "cm3": var base=valeurInitiale/1000; break;
    case "dm3": var base=valeurInitiale; break;
    case "m3": var base=valeurInitiale*1000; break;
    }
    switch (uniteConvertie) {
    case "ml": var resultat=base*1000; break;
    case "cl": var resultat=base*100; break;
    case "dl": var resultat=base*10; break;
    case "l": var resultat=base; break;
    case "dal": var resultat=base/10; break;
    case "hl": var resultat=base/100; break;
    //
    case "mm3": var resultat=base*1000000; break;
    case "cm3": var resultat=base*1000; break;
    case "dm3": var resultat=base; break;
    case "m3": var resultat=base/1000; break;
    }
    break;
    }
    if (isNaN(resultat)) event.value="";
    else event.value=util.printf("%.6f",resultat).replace(/\.?0+$/,"");
    }

    // Script de touches personnalisé du champ "valeurInitiale"
    if(!event.willCommit) {
    if (event.change==",") event.change="."
    var aTester=event.value.split("");
    aTester.splice(event.selStart, event.selEnd-event.selStart, event.change);
    var testeChaine=aTester.join("");
    event.rc=/^([1-9]\d*([.]?\d+)?)|([0]([.]\d*)?)$/.test(testeChaine);
    } else {
    event.rc=event.value=="" || /^([1-9]\d*([.]\d+)?)|([0][.]\d+)$/.test(event.value);
    }

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Tableau de conversion #76530
    bebarth
    Maître des clés

    bonjour,
    Voici un exemple de convertisseurs basé sur des menus déroulants mère/filles. J’espère ne pas avoir fait d’erreurs de conversion…
    Si ça t’intéresse je te laisse l’adapter à tes besoins. Si tu as besoin d’un coup de main je pourrais t’aider (si tu n’es pas trop pressé).

    // Script de document : Tableau des unités par famille
    var lesUnites={
    "Distance": [
    ["nanomètre (nm)","nm"],
    ["micromètre (µm)","µm"],
    ["millimètre (mm)","mm"],
    ["centimètre (cm)","cm"],
    ["décimètre (dm)","dm"],
    ["mètre (m)","m"],
    ["décamètre (dam)","dam"],
    ["hectomètre (hm)","hm"],
    ["kilomètre (km)","km"],
    ["pouce (in)","in"],
    ["pied (ft)","ft"],
    ["yard (yd)","yd"],
    ["mile (mi)","mi"]
    ],
    "Poids": [
    ["milligramme (mg)","g"],
    ["centigramme (cg)","cg"],
    ["décigramme (dg)","dg"],
    ["gramme (g)","g"],
    ["décagramme (dag)","dag"],
    ["hectogramme (hg)","hg"],
    ["kilogramme (kg)","kg"],
    ["quintal (q)","q"],
    ["tonne (t)","t"],
    //
    ["once (oz)","oz"],
    ["livre (lb)","lb"]
    ],
    "Surface": [
    ["millimètre carré (mm^2)","mm2"],
    ["centimètre carré (cm^2)","cm2"],
    ["décimètre carré (dm^2)","dm2"],
    ["mètre carré (m^2)","m2"],
    ["kilomètre carré (km^2)","km2"],
    ["centiare (ca)","ca"],
    ["are (a)","a"],
    ["hectare (ha)","ha"],
    //
    ["square inch (in2)","yd2"],
    ["square foot (ft2)","ft2"],
    ["square yard (yd2)","yd2"],
    ],
    "Volume": [
    ["millilitre (ml)","ml"],
    ["centilitre (cl)","cl"],
    ["décilitre (dl)","dl"],
    ["litre (l)","l"],
    ["décalitre (dal)","l"],
    ["hectolitre (hl)","l"],
    //
    ["millimètre cube (mm^3)","mm3"],
    ["centimètre cube (cm^3)","cm3"],
    ["décimètre cube (dm^3)","dm3"],
    ["mètre cube (m^3)","m3"],
    //
    ["pinte US (US fl)","pt_us"],
    ["gallon US (gal)","gal_us"],
    ["once liquide US (fl oz)","floz_us"]
    ]
    };

    // Script de touches personnalisé du champ Mère "typeUnite"
    if (!event.willCommit) {
    this.getField("uniteInitiale").clearItems();
    this.getField("uniteConvertie").clearItems();
    if (event.changeEx!=0) {
    this.getField("uniteInitiale").setItems(lesUnites[event.changeEx]);
    this.getField("uniteConvertie").setItems(lesUnites[event.changeEx]);
    switch (event.changeEx) {
    case "Distance":var uniteBase="m"; break;
    case "Poids":var uniteBase="kg"; break;
    case "Surface":var uniteBase="m2"; break;
    case "Volume":var uniteBase="l"; break;
    }
    this.getField("uniteInitiale").value=uniteBase;
    this.getField("uniteConvertie").value=uniteBase;
    }
    }

    // Script de calcul du champ "valeurConvertie"
    var typeUnite=this.getField("typeUnite").value;
    var uniteInitiale=this.getField("uniteInitiale").value;
    var uniteConvertie=this.getField("uniteConvertie").value;
    var valeurInitiale=this.getField("valeurInitiale").value;
    if (valeurInitiale=="" || typeUnite=="" || uniteInitiale=="" || uniteConvertie=="") {
    event.value="";
    } else {
    valeurInitiale=Number(valeurInitiale);
    // 1 - Conversion vers l'unité de base
    // 2 - Conversion à partir de l'unité de base
    switch (typeUnite) {
    case "Distance":
    // Unité de base -> mètre
    switch (uniteInitiale) {
    case "nm": var base=valeurInitiale/1000000000; break;
    case "µm": var base=valeurInitiale/1000000; break;
    case "mm": var base=valeurInitiale/1000; break;
    case "cm": var base=valeurInitiale/100; break;
    case "dm": var base=valeurInitiale/10; break;
    case "m": var base=valeurInitiale; break;
    case "dam": var base=valeurInitiale*10; break;
    case "hm": var base=valeurInitiale*100; break;
    case "km": var base=valeurInitiale*1000; break;
    //
    case "in": var base=valeurInitiale*0.0254; break;
    case "ft": var base=valeurInitiale*(0.0254*12); break;
    case "yd": var base=valeurInitiale*(0.0254*12*3); break;
    case "mi": var base=valeurInitiale*(0.0254*12*3*1760); break;
    }
    switch (uniteConvertie) {
    case "nm": var resultat=base*1000000000; break;
    case "µm": var resultat=base*1000000; break;
    case "mm": var resultat=base*1000; break;
    case "cm": var resultat=base*100; break;
    case "dm": var resultat=base*10; break;
    case "m": var resultat=base; break;
    case "dam": var resultat=base/10; break;
    case "hm": var resultat=base/100; break;
    case "km": var resultat=base/1000; break;
    //
    case "in": var resultat=base/0.0254; break;
    case "ft": var resultat=base/(0.0254*12); break;
    case "yd": var resultat=base/(0.0254*12*3); break;
    case "mi": var resultat=base/(0.0254*12*3*1760); break;
    }
    break;
    case "Poids":
    // Unité de base -> kilogramme
    switch (uniteInitiale) {
    case "mg": var base=valeurInitiale/1000000; break;
    case "cg": var base=valeurInitiale/100000; break;
    case "dg": var base=valeurInitiale/10000; break;
    case "g": var base=valeurInitiale/1000; break;
    case "dag": var base=valeurInitiale/100; break;
    case "hg": var base=valeurInitiale/10; break;
    case "kg": var base=valeurInitiale; break;
    case "q": var base=valeurInitiale*100; break;
    case "t": var base=valeurInitiale*1000; break;
    //
    case "oz": var base=valeurInitiale*(0.45359237/16); break;
    case "lb": var base=valeurInitiale*0.45359237; break;
    }
    switch (uniteConvertie) {
    case "mg": var resultat=base*1000000; break;
    case "cg": var resultat=base*100000; break;
    case "dg": var resultat=base*10000; break;
    case "g": var resultat=base*1000; break;
    case "dag": var resultat=base*100; break;
    case "hg": var resultat=base*10; break;
    case "kg": var resultat=base; break;
    case "q": var resultat=base/100; break;
    case "t": var resultat=base/1000; break;
    //
    case "oz": var resultat=base/(0.45359237/16); break;
    case "lb": var resultat=base/0.45359237; break;
    }
    break;
    case "Surface":
    // Unité de base -> mètre carré
    switch (uniteInitiale) {
    case "mm2": var base=valeurInitiale/1000000; break;
    case "cm2": var base=valeurInitiale/10000; break;
    case "dm2": var base=valeurInitiale/100; break;
    case "m2": var base=valeurInitiale; break;
    case "km2": var base=valeurInitiale*1000000; break;
    case "ca": var base=valeurInitiale; break;
    case "a": var base=valeurInitiale*10000; break;
    //
    case "in2": var base=valeurInitiale*(0.0254*0.0254); break;
    case "ft2": var base=valeurInitiale*((0.0254*12)*(0.0254*12)); break;
    case "yd2": var base=valeurInitiale*((0.0254*12*3)*(0.0254*12*3)); break;
    }
    switch (uniteConvertie) {
    case "mm2": var resultat=base*1000000; break;
    case "cm2": var resultat=base*10000; break;
    case "dm2": var resultat=base*100; break;
    case "m2": var resultat=base; break;
    case "km2": var resultat=base/1000000; break;
    case "ca": var resultat=base; break;
    case "a": var resultat=base/10000; break;
    //
    case "in2": var resultat=base/(0.0254*0.0254); break;
    case "ft2": var resultat=base/((0.0254*12)*(0.0254*12)); break;
    case "yd2": var resultat=base/((0.0254*12*3)*(0.0254*12*3)); break;
    }
    break;
    case "Volume":
    // Unité de base -> litre
    switch (uniteInitiale) {
    case "ml": var base=valeurInitiale/1000; break;
    case "cl": var base=valeurInitiale/100; break;
    case "dl": var base=valeurInitiale/10; break;
    case "l": var base=valeurInitiale; break;
    case "dal": var base=valeurInitiale*10; break;
    case "hl": var base=valeurInitiale*100; break;
    //
    case "mm3": var base=valeurInitiale/1000000; break;
    case "cm3": var base=valeurInitiale/1000; break;
    case "dm3": var base=valeurInitiale; break;
    case "m3": var base=valeurInitiale*1000; break;
    //
    case "pt_us": var base=valeurInitiale*(3.785411784/8); break;
    case "gal_us": var base=valeurInitiale*3.785411784; break;
    case "floz_us": var base=valeurInitiale*(3.785411784/128); break;
    }
    switch (uniteConvertie) {
    case "ml": var resultat=base*1000; break;
    case "cl": var resultat=base*100; break;
    case "dl": var resultat=base*10; break;
    case "l": var resultat=base; break;
    case "dal": var resultat=base/10; break;
    case "hl": var resultat=base/100; break;
    //
    case "mm3": var resultat=base*1000000; break;
    case "cm3": var resultat=base*1000; break;
    case "dm3": var resultat=base; break;
    case "m3": var resultat=base/1000; break;
    //
    case "pt_us": var resultat=base/(3.785411784/8); break;
    case "gal_us": var resultat=base/3.785411784; break;
    case "floz_us": var resultat=base/(3.785411784/128); break;
    }
    break;
    }
    if (isNaN(resultat)) event.value="";
    else event.value=util.printf("%.6f",resultat).replace(/\.?0+$/,"");
    }

    // Script de touches personnalisé du champ "valeurInitiale"
    if(!event.willCommit) {
    if (event.change==",") event.change="."
    var aTester=event.value.split("");
    aTester.splice(event.selStart, event.selEnd-event.selStart, event.change);
    var testeChaine=aTester.join("");
    event.rc=/^([1-9]\d*([.]?\d+)?)|([0]([.]\d*)?)$/.test(testeChaine);
    } else {
    event.rc=event.value=="" || /^([1-9]\d*([.]\d+)?)|([0][.]\d+)$/.test(event.value);
    }

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Tableau de conversion #76529
    bebarth
    Maître des clés

    Bonjour,
    j’essaie de re faire un exemple de listes mères/filles rapidement.

    @+
    😎

    en réponse à : Tableau de conversion #76521
    bebarth
    Maître des clés

    bonjour,

    Ton document est une usine à gaz dans laquelle il est difficile de deviner qui fait quoi et d’où viennent les erreurs. C’est d’autant plus difficile quand on n’en est pas l’auteur.

    Pareil !!!
    Je pense que ce serait plus compréhensible de faire des listes mères/filles où on pourrait choisir les unités à convertir.

    @+
    😎

    en réponse à : Tableau de conversion #76520
    bebarth
    Maître des clés

    bonjour,

    Ton document est une usine à gaz dans laquelle il est difficile de deviner qui fait quoi et d’où viennent les erreurs. C’est d’autant plus difficile quand on n’en est pas l’auteur.

    Pareil !!!
    Je pense que ce serait plus compréhensible de faire des listes mères/filles où on pourrait choisir les unités à convertir.

    @+
    😎

    en réponse à : Action d’un menu déroulant sur 4 cases #76488
    bebarth
    Maître des clés

    bonjour,

    J’ai voulu faire la même chose mais j’ai pataugé car je voulais en faire un script de validation, c’est effectivement beaucoup plus simple ainsi !

    Si pour un formulaire plus compliqué on ne veut pas que le calcul s’effectue après chaque évènement, on peut effectivement remplacer ce script par un script de touches personnalisé. Dans ce cas il faut utiliser event.changeEx :
    if (!event.willCommit) {
    var valeurs=event.changeEx.split("-");
    this.getField("Text2").value=valeurs[0];
    this.getField("Text3").value=valeurs[1];
    }

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Action d’un menu déroulant sur 4 cases #76484
    bebarth
    Maître des clés

    bonjour,
    En valeur d’exportation de chaque élément tu écris le nombre de batteries et le nombre de châssis séparés par un trait d’union (par exemple), puis avec un script de calcul :
    var valeurs=event.value.split("-");
    this.getField("Text2").value=valeurs[0];
    this.getField("Text3").value=valeurs[1];

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    bebarth
    Maître des clés

    bonjour,
    Dans le premier exemple la dernière lettre est légèrement rognée parce que c’est un M qui a une chasse plus grande que les autres !

    quelqu’un pourrait-il en insérer un de plus… ce qui générerait une erreur

    Pour éviter cela, on peut ajouter un script de touches personnalisée qui limitera à 16  le nombre de caractères pouvant être frappés :
    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("");
    var modeleRegEx=/^\w{0,16}$/;
    event.rc=modeleRegEx.test(testeChaine);
    } else {
    var modeleRegEx=/^\w{16}$/;
    event.rc=event.value=="" || modeleRegEx.test(event.value);
    }

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Feuille de pointage horaire #76452
    bebarth
    Maître des clés

    bonjour,
    …et en script de format personnalisé on pourrait rajouter un script pour vérifier que la date indiquée est bien un lundi.
    // Format date
    var jours=["dimanche","lundi","mercredi","jeudi","vendredi","samedi"];
    var d=util.scand("dd/mm/yy",event.value);
    var cetteDate=new Date(d);
    var jour=cetteDate.getDay();
    if (jour!=1) {
    app.alert("Le "+event.value+" n'est pas un lundi mais un "+jours[jour],3)
    event.value="";
    }

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Feuille de pointage horaire #76449
    bebarth
    Maître des clés

    bonjour,
    désolé je n’ai pas suivi les dernières conversations…
    Voici ce que j’ai fait :
    // Sript de document
    function Time2Num(format,temps) {
    if(temps=="") return "";
    var oTime=util.scand("mm/dd/yyyy "+format,"01/01/1970 "+temps);
    var decalageUTC=oTime.getTimezoneOffset()*1000*60
    var tempsEcoule=oTime.valueOf()-decalageUTC;
    return Math.round(tempsEcoule/1000);
    }
    function secondes2hhmm(totalSec) {
    totalSec=Math.round(totalSec/60);
    totalH=Math.floor(totalSec/60);
    totalM=((totalSec/60)-totalH)*60;
    minutes=util.printf("%,302.0f",totalM);
    return totalH+":"+minutes;
    }
    function calcul(ind) {
    var hDebut=this.getField("heureDebut."+ind).value;
    var hFin=this.getField("heureFin."+ind).value;
    var pause=this.getField("pause."+ind).value;
    if(hDebut!="" && hFin!="") {
    var debutSec=Time2Num("hh:mm",hDebut);
    var finSec=Time2Num("hh:mm",hFin);
    var pauseSec=Time2Num("h:mm",pause);
    var totalSec=finSec-debutSec-pauseSec;
    var suppSec=totalSec-(7*3600);
    event.value=secondes2hhmm(totalSec);
    if (suppSec>=0) this.getField("heuresSupp."+ind).value=secondes2hhmm(suppSec);
    else this.getField("heuresSupp."+ind).value="";
    }
    }
    function laDate(nom,ind) {
    var dateBase=this.getField(nom+".0").valueAsString;
    if (dateBase!="") {
    var laDate=util.scand("dd/mm/yy",dateBase);
    laDate.setDate(laDate.getDate()+ind);
    return util.printd("dd/mm/yy",laDate);
    } else {
    return "";
    }
    }

    // date
    var nomChamp=event.target.name;
    var champ=nomChamp.split(".");
    event.value=laDate(champ[0],Number(champ[1]));

    // totalHeures
    event.value="";
    calcul(event.target.name.substring(event.target.name.indexOf(".")+1));

    // total
    event.value="";
    var somme=0;
    for (var i=0; i<7; i++) {
    if (this.getField("totalHeures."+i).value!="") {
    somme+=Time2Num("hh:mm",this.getField("totalHeures."+i).value)
    }
    }
    event.value=secondes2hhmm(somme);

    …et le fichier joint.

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Feuille de pointage horaire #76438
    bebarth
    Maître des clés

    bonsoir,
    Encore quelques questions.
    Dans ton exemple l’heure de début est 8:30 et l’heure de fin 16:00, alors que tu dis que les horaires sont de 7:30 à 15:30 avec une heure pour déjeuner.
    Je suppose donc que les horaires sont variables, avec  une base de 7h travaillées. Quelles sont donc les plages horaires de début et de fin de journée ?
    Ai-je bien tout compris ?

    Je ne pourrai regarder ça que demain après-midi.

    @+
    😎

    en réponse à : Feuille de pointage horaire #76434
    bebarth
    Maître des clés

    Ma feuille n’est pas possible a faire ?

    Si, mais je pense que vu ta demande, le fichier de Merlin est un peu compliqué. Je pensais plutôt à celui-ci joint ?

    Saurais-tu l’adapter à ton fichier ? Dis-moi, sinon je regarderai ce soir…

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Feuille de pointage horaire #76426
    bebarth
    Maître des clés

    …et heure de fin c’est toujours 16h ? ensuite c’est du temps supplémentaire ??

    @+
    😎

    en réponse à : Feuille de pointage horaire #76424
    bebarth
    Maître des clés

    bonjour,
    La pause non rémunérée est-elle toujours de 12h30 à 13h30, donc 1h00 ?
    Le temps supplémentaire est-il calculé automatiquement après 16h00 ?

    @+
    😎

    en réponse à : Quel outil pour remplir des PDF XFA ? #76401
    bebarth
    Maître des clés

    bonjour,
    Je ne connais pas pdftk et en plus je ne comprends pas ton soucis !
    Qu’est-ce que signifie : « les champs semblent bien affectés et indiqués à l’affichage mais quand on sélectionne le contrôle, la valeur précédemment affichée disparait… » ?
    Pourrais-tu être un peu plus explicite et faire quelques copies d’écran ?
    Merci

    @+
    😎

    en réponse à : Faire apparaitre un mot via un calcul #76107
    bebarth
    Maître des clés

    bonjour,
    En script de calcul du champ Type_1 tu peux écrire :
    if (this.getField("JeuxMaxi1").value>0 && this.getField("JeuxMini1").value>0) event.value="Ajustement Libre";
    else if (this.getField("JeuxMaxi1").value<0 && this.getField("JeuxMini1").value<0) event.value="Ajustement Serré";
    else event.value="Ajustement Incertain";

    Ce champ peut-être de type texte…

    @+
    😎

    en réponse à : Faire apparaitre un mot via un calcul #76103
    bebarth
    Maître des clés

    bonjour,
    Quels champs (résultats) doivent être comparés pour donner l’ajustement : RITJEUJMN et VRITJEUJMNITC ???

    @+
    😎

    PS : petite erreur -> 2 résultats négatifs j’ai du serrage

    en réponse à : `Liste déroulante à partir de données Excel #76093
    bebarth
    Maître des clés

    Bonjour,
    c’est effectivement possible d’extraire des données à partir d’un fichier csv ou txt pour alimenter le menu déroulant.
    Mais avec plus de 100 lignes, est-ce très pratique ?
    N’y a-t-il pas moyen de découper afin d’avoir des listes mère filles ?
    Pour ma part, je ne pourrai regarder qu’à partir de lundi.

    @+
    😎

    bebarth
    Maître des clés

    Hi,
    That was possible with the previous .xls file format but not since the .xlsx file format.

    @+
    😎

    en réponse à : Comment faire – + – = + #76043
    bebarth
    Maître des clés

    bonjour,
    Heu ! … Tu pourrais reformuler ta demande ?

    @+
    😎

    en réponse à : Boite de dialogue pour récupérer des valeurs #76021
    bebarth
    Maître des clés

    bonjour,
    Après avoir cherché un certain temps, j’avoue que je n’ai pas trouvé le pourquoi.
    Par contre, j’ai trouvé que ça fonctionne si tu remplis en premier ce champ :
    ...
    if(app.execDialog(bbDialogue)=="ok"){
    this.getField("montRed1").value=reduc;
    this.getField("Index1HP").value=HP;
    this.getField("Index1HC").value=HC;
    this.getField("i1cP").value=EJ;
    this.getField("i1c2").value=EA;
    this.getField("reduc1").value=motif;
    }
    ...

    J’en ai profité pour faire quelques modifications à ta boite de dialogue (si ça te convient)…

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Boite de dialogue pour récupérer des valeurs #76013
    bebarth
    Maître des clés

    bonjour,
    voici un exemple avec quelques vérifications.
    Ici on vérifie que tous les champs de la boite de dialogue sont remplis, que HP est supérieur à HC (supposition) et que à par le champ « Motif » tous les autres champs sont des nombres.
    On peut bien sûr rajouter des vérifications…
    J’ai fait en sorte que le script pour la boite de dialogue soit le plus compréhensible possible. Ici on doit vérifier tous les champs avec la fonction validate ce n’est donc pas indispensable d’utiliser commit (qui valide sans vérification).

    var bbDialogue={
    loadDefaults: function(boiteDialogue) {
    boiteDialogue.load({
    HPtx: "987",
    HCtx: "123",
    redu: "0",
    moti: "Réduction du "+util.printd("dd mmm yyyy", new Date()),
    })
    },
    initialize: function(boiteDialogue) {
    this.loadDefaults(boiteDialogue);
    },
    validate: function(boiteDialogue) {
    var oRslt=boiteDialogue.store();
    HP=oRslt["HPtx"];
    HC=oRslt["HCtx"];
    EJ=oRslt["EJtx"];
    EA=oRslt["EAtx"];
    reduc=oRslt["redu"];
    motif=oRslt["moti"];
    var testOK0=true;
    if (!HP || !HC || !EJ || !EA || !reduc || !motif) var testOK0=false;
    var testOK1=true;
    if (isNaN(HP) || isNaN(HC) || isNaN(EJ) || isNaN(EA) || isNaN(reduc)) var testOK1=false;
    var testOK2=true;
    if (Number(HC)>=Number(HP)) var testOK2=false;
    if (!testOK0) app.alert("Veuillez remplir tous les champs.",3);
    else if (!testOK1) app.alert("A part le motif de réduction, la valeur des autres champs doit être un nombre.",3);
    else if (!testOK2) app.alert("Le montant HP doit être supérieur au montant HC.",3);
    var testOK=testOK0 && testOK1 && testOK2;
    return testOK;
    },
    description: {
    name: "b2Tools",
    elements: [
    {
    type: "view",
    alignment: "align_fill",
    elements: [
    {
    type: "static_text",
    alignment: "align_center",
    char_width: 20,
    char_height: 3,
    name: "Veuillez de remplir\rtous les champs".toUpperCase(),
    font: "dialog",
    bold: true,
    },
    {
    type: "static_text",
    name: "HP",
    font: "dialog",
    bold: true,
    },
    {
    type: "edit_text",
    item_id: "HPtx",
    width: 200,
    },
    {
    type: "static_text",
    name: "HC",
    font: "dialog",
    bold: true,
    },
    {
    type: "edit_text",
    item_id: "HCtx",
    alignment: "align_fill",
    },
    {
    type: "static_text",
    alignment: "align_center",
    char_width: 20,
    char_height: 3,
    name: "Attention,\rHP doit être > à HC",
    font: "dialog",
    italic: true,
    },
    {
    type: "static_text",
    name: "EJ",
    font: "dialog",
    bold: true,
    },
    {
    type: "edit_text",
    item_id: "EJtx",
    alignment: "align_fill",
    },
    {
    type: "static_text",
    name: "EA",
    font: "dialog",
    bold: true,
    },
    {
    type: "edit_text",
    item_id: "EAtx",
    alignment: "align_fill",
    },
    {
    type: "gap",
    height: 5,
    },
    {
    type: "cluster", //
    elements: [
    {
    type: "static_text",
    name: "Montant de la réduction",
    font: "dialog",
    bold: true,
    },
    {
    type: "edit_text",
    item_id: "redu",
    alignment: "align_fill",
    },
    {
    type: "static_text",
    name: "Motif de la réduction",
    font: "dialog",
    bold: true,
    },
    {
    type: "edit_text",
    item_id: "moti",
    multiline: true,
    alignment: "align_fill",
    height: 75,
    },
    ]
    },
    {
    type: "gap",
    height: 15,
    },
    {
    type: "ok_cancel",
    },
    ]
    },
    ]
    }
    };
    if(app.execDialog(bbDialogue)=="ok"){
    this.getField("HP").value=HP;
    this.getField("HC").value=HC;
    this.getField("EJ").value=EJ;
    this.getField("EA").value=EA;
    this.getField("reduc").value=reduc;
    this.getField("motif").value=motif;
    }

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Boite de dialogue pour récupérer des valeurs #76009
    bebarth
    Maître des clés

    bonjour,
    … Après, il faut généralement faire quelques vérifications lorsqu’on appuie sur OK (comme tous les champs doivent être remplis et qu’ils correspondent à quelque chose), sinon généralement cela provoque ensuite des erreurs !

    @+
    😎

    bebarth
    Maître des clés

    …et pour info il existe également « insertSeparatorEntryInList » pour insérer un trait de séparation dans le menu déroulant.

    @+
    😎

    bebarth
    Maître des clés

    bonjour,

    Est-ce possible que la liste des options de ce menu déroulant ne soit pas triée alphabétiquement?

    C’est possible en utilisant « insertEntryInList » qui est une fonction non documentée…
    j’essaye de te faire ça ce soir, sinon rapidement…

    @+
    😎

    en réponse à : Bouton radio sur plusieurs lignes #75972
    bebarth
    Maître des clés

    bonjour,
    Tu peux utiliser ce script qui te génèrera des couples de boutons radio avec valeurs d’exportation « Oui ou « Non ».
    var groupes="groupe"; // base des noms de groupes
    var diam=11; // diamètre (pt)
    var delta=35; // entraxe (pt)
    var nb=0;
    var RegExTest=new RegExp("^"+groupes+"\\d+$");
    for (var i=0; i<this.numFields; i++) {
    if (RegExTest.test(this.getNthFieldName(i))) nb++;
    }
    var nomGroupe=groupes+(nb+1);
    var laPage=this.getPageBox();
    var x=laPage[2]/2-delta/2-diam/2;
    var y=laPage[1]/2+diam/2;
    var f=this.addField(nomGroupe,"radiobutton",this.pageNum,[x,y,x+diam,y-diam]);
    x+=delta;
    var f=this.addField(nomGroupe,"radiobutton",this.pageNum,[x,y,x+diam,y-diam]);
    f.fillColor=color.white;
    f.strokeColor=color.black;
    f.borderStyle=border.i;
    f.exportValues=["Oui","Non"];
    f.value="Off"; // ou "Oui" ou "Non"

    @+
    😎

    en réponse à : Script qui marche en partie #75936
    bebarth
    Maître des clés

    bonjour,
    Pourquoi revérifier tous les champs à chaque fois ???
    Tu peux utiliser cette fonction :
    function laCouleur(nomChamp) {
    if (!this.getField(nomChamp).isBoxChecked(0)) {
    this.getField(nomChamp.toUpperCase()).textColor=color.black;
    if (nomChamp.split(".")[0]=="a") this.getField(nomChamp.toUpperCase()).fillColor=color.red;
    else this.getField(nomChamp.toUpperCase()).fillColor=color.blue;
    } else {
    this.getField(nomChamp.toUpperCase()).fillColor=color.transparent;
    if (nomChamp.split(".")[0]=="a") this.getField(nomChamp.toUpperCase()).textColor=color.red;
    else this.getField(nomChamp.toUpperCase()).textColor=color.blue;
    }
    }
    Et l’appeler avec :
    laCouleur(event.target.name);

    Pour écrire cette ligne avec toutesles cases à cocher tu peux exécuter de la console :
    for (var i=0; i<this.numFields; i++) {
    var nomChamp=this.getNthFieldName(i);
    var f=this.getField(this.getNthFieldName(i));
    if (f.type=="checkbox" && (this.getNthFieldName(i).indexOf("a.")==0 || this.getNthFieldName(i).indexOf("b.")==0)) f.setAction("MouseUp","laCouleur(event.target.name);")
    }

    @+
    😎

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

    bonjour,
    Ces nombres sont-ils toujours écrits avec un espaces ou y a-t-il possibilité qu’ils le soient sans espaces ???

    Si c’est le cas, essaye :
    var texte="12 345 678";
    var texte=texte.replace(/(\d{1,3}) (\d{3})/g, "$1\u00A0$2");
    console.println("texte : "+texte);

    Sinon, l’expression régulière sera différente (et un peu plus compliquée).

    @+
    😎

    en réponse à : Liste déroulante avec long texte #75906
    bebarth
    Maître des clés

    bonjour,
    A priori, le nom du champ « leChoix » avec un « l » minuscule.

    @+
    😎

    en réponse à : Liste déroulante avec long texte #75897
    bebarth
    Maître des clés

    bonjour,
    Moi je te propose une solution se ressemble un peu plus à une liste, et lorsqu’on passe la souris sur le choix cela affiche le texte qui est « validé » si on appuie sur ce choix (et on re-appuie pour le désélectionner).

    Voici les différents scripts :

    // Souris entrée
    entree(event.target.name.slice(-1));

    function entree(ind) {
    for (var i=0; i<4; i++) this.getField("choix."+i).textColor=color.ltGray;
    if (this.getField("leChoix").value!=="") {
    this.getField("choix."+this.getField("leChoix").value).textColor=color.gray;
    this.getField("choix."+this.getField("leChoix").value).strokeColor=color.red;
    }
    event.target.textColor=color.black;
    this.getField("leTexte").value=textes[ind];
    this.getField("leTexte").display=display.visible;
    }

    // Souris sortie
    sortie(event.target.name.slice(-1));

    function sortie(ind) {
    for (var i=0; i<4; i++) {
    this.getField("choix."+i).textColor=color.ltGray;
    this.getField("choix."+i).strokeColor=color.transparent;
    }
    if (this.getField("leChoix").value==="") this.getField("leTexte").display=display.hidden;
    else {
    this.getField("leTexte").value=textes[this.getField("leChoix").value];
    this.getField("choix."+this.getField("leChoix").value).textColor=color.black;
    }
    }

    // Souris relâchée
    relachee(event.target.name.slice(-1));

    function relachee(ind) {
    for (var i=0; i<4; i++) {
    this.getField("choix."+i).textColor=color.ltGray;
    this.getField("choix."+i).strokeColor=color.transparent;
    }
    if (this.getField("leChoix").value==ind) this.getField("leChoix").value="";
    else {
    this.getField("leChoix").value=ind;
    event.target.textColor=color.black;
    event.target.strokeColor=color.red;
    }
    }

    // init
    var textes=["LIT-201 – Introduction à la littérature musicale\rLe cours LIT-201 explore les grandes périodes et aborde les œuvres majeures qui ont marqué l’histoire de la musique en Occident, du Moyen Âge jusqu’à aujourd’hui. Des genres et des styles variés provenant du répertoire instrumental, vocal, profane et sacré sont étudiés. Ce cours vise à acquérir des connaissances et des compétences pour apprécier des œuvres représentatives de grandes périodes historiques, et pour les situer dans leur contexte. Il amènera aussi l’étudiante et l’étudiant à une meilleure compréhension du langage musical grâce à une initiation à l’analyse.","LIT-202 – Moyen Âge, Renaissance et baroque\rLe cours LIT-202 aborde les grandes œuvres et explore les différents courants qui ont marqué l’histoire de la musique en Occident, du Moyen Âge jusqu’au milieu du 18e siècle. Des genres et des styles variés provenant du répertoire instrumental, vocal, profane et sacré sont étudiés. Ce cours vise à acquérir des connaissances et des compétences pour apprécier des œuvres représentatives de l’époque médiévale, de la Renaissance et du baroque, et pour les situer dans leur contexte. Il amènera aussi l’étudiante et l’étudiant à une meilleure compréhension du langage musical grâce à une initiation à l’analyse.","LIT-203 – Classicisme et Romantisme\rLe cours LIT-203 aborde les grandes œuvres et explore les différents courants qui ont marqué l’histoire de la musique en Occident, du milieu du 18e siècle jusqu’à la fin du 19e siècle. Des genres et des styles variés provenant du répertoire instrumental, vocal, profane et sacré sont étudiés. Ce cours vise à acquérir des connaissances et des compétences pour apprécier des œuvres représentatives des périodes classique et romantique, et pour les situer dans leur contexte. Il amènera aussi l’étudiante et l’étudiant à une meilleure compréhension du langage musical grâce à une initiation à l’analyse.","LIT-204 – XXe siècle et musique contemporaine\rLe cours LIT-204 aborde les grandes œuvres et explore les différents courants qui ont marqué l’histoire de la musique en Occident, du début du 20e siècle jusqu’à aujourd’hui. Des genres et des styles variés provenant du répertoire tant instrumental que vocal sont étudiés, et la musique québécoise est abordée. Ce cours vise à acquérir des connaissances et des compétences pour apprécier des œuvres représentatives de cette période et pour les situer dans leur contexte. Il amènera aussi l’étudiante et l’étudiant à une meilleure compréhension du langage musical grâce à une initiation à l’analyse."];

    …et le fichier associé.

    En espérant que cet exemple te conviendra !

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Action pour ouvrir une page web par script #75856
    bebarth
    Maître des clés

    Si je trouve, je te dirai pourquoi ça ne fonctionne pas en fonction, mais pour l’instant je ne sais pas !!!

    @+
    😎

    en réponse à : Action pour ouvrir une page web par script #75853
    bebarth
    Maître des clés

    …comme ça je ne comprends pas pourquoi cela ne fonctionne pas !
    Dans un premier temps tu peux mettre ce script sur tous tes boutons « AjouT ».

    var ind=event.target.name.substring(event.target.name.indexOf(".")+1);
    var nomBoutons=[];
    for (var k=0; k<10; k++) nomBoutons.push(this.getField("LinkT."+ind+"."+k).buttonGetCaption());
    for (var k=0; k<10; k++) {
    if (this.getField("LinkT."+ind+"."+k).buttonGetCaption()=="...") break;
    }
    if (k==10) app.alert("Tous les boutons renvoient à une URL.",3);
    lesElements=[0,1,2,3,4,5,6,7,8,9];
    var laListe="- Indices -";
    var listeElements="var listeElements \= \{\""+laListe+"\": "+(lesElements.length+1)+",";
    for (var i=0; i<lesElements.length; i++) {
    if (i!=k) var par=-1;
    else var par=1;
    listeElements+="\""+lesElements+"\": "+(par*(i+1)).toString()+",";
    }
    var listeElements=listeElements.substring(0, listeElements.length-1);
    listeElements+="\}";
    eval(listeElements);
    //
    var bDialogue={
    initialize: function(bDialogue) {
    this.cbInit=true;
    bDialogue.enable({url0: true});
    this.loadDefaults(bDialogue);
    },
    loadDefaults: function(bDialogue) {
    bDialogue.load({
    cb00: false,
    rd00: true,
    url0: "http://www.",
    menu: listeElements,
    });
    },
    cb00: function(bDialogue) {
    this.cbInit=!this.cbInit;
    bDialogue.enable({init: this.cbInit});
    },
    quelBtRd: function (oRslt) {
    for (var i=0; i<=1; i++) {
    if (oRslt["rd0"+i]) {
    switch (i) {
    case 0:
    resBtRd="Non";
    break;
    case 1:
    resBtRd="Oui";
    }
    }
    };
    return resBtRd;
    },
    validate: function(bDialogue) {
    var oRslt=bDialogue.store();
    var elements=bDialogue.store()["menu"];
    for (var i in elements) {
    if (elements>0) indice=i;
    }
    if (indice=="- Indices -") {
    app.alert("Veuillez sélectionner l'indice d'un champ;.",3);
    return false;
    } else {
    initialiser=oRslt["cb00"];
    if (initialiser) {
    texteBouton="...";
    texteURL="";
    return true;
    } else {
    texteBouton=oRslt["nmbt"];
    var testOK0=true;
    if (!/^(\w|\W)+( (\w|\W)+)*$/.test(texteBouton)) var testOK0=false;
    var testOK1=true;
    texteURL=oRslt["url0"];
    if (!/^(https?:\/\/)?([\w-]+(\.[\w-]+)+)(:\d+)?(\/[^\s]*)?$/i.test(texteURL)) var testOK1=false;
    cAc=this.quelBtRd(oRslt);
    if (nomBoutons[indice]!="...") {
    if (cAc=="Non") {
    app.alert("Le bouton \"LinkT."+ind+"."+indice+"\" est déjà renseigné.",3);
    return false;
    } else {
    var reponse=app.alert("Le bouton \"LinkT."+ind+"."+indice+"\" est déjà renseigné.\rSouhaitez-vous réellement le modifier ?",3,2);
    if (reponse==3) return false;
    }
    }
    if (!testOK0) app.alert("Veuillez indiquer un nom pour le bouton.",3);
    else if (!testOK1) app.alert("Veuillez renseigner une URL correcte.",3);
    var testOK=testOK0 && testOK1;
    return testOK;
    }
    }
    },
    description: {
    name: "Bouton vers URL",
    first_tab: "cb00",
    elements: [
    {
    type: "cluster", //
    elements: [
    {
    type: "static_text",
    name: "Indice du bouton",
    font: "dialog",
    bold: true,
    },
    {
    type: "popup",
    item_id: "menu",
    alignment: "align_fill",
    //width: 150,
    },
    {
    type: "check_box",
    alignment: "align_center",
    item_id: "cb00",
    name: " Réinitialiser le bouton",
    },
    {
    type: "gap",
    height: 5
    },
    {
    type: "cluster",
    item_id: "init",

    elements: [
    {
    type: "static_text",
    name: "Texte pour le bouton",
    font: "dialog",
    bold: true,
    },
    {
    type: "edit_text",
    item_id: "nmbt",
    alignment: "align_fill",
    },
    {
    type: "gap",
    height: 5
    },
    {
    type: "static_text",
    name: "URL à atteindre",
    font: "dialog",
    bold: true,
    },
    {
    type: "edit_text",
    item_id: "url0",
    alignment: "align_fill",
    },
    {
    type: "gap",
    height: 5
    },
    {
    type: "static_text",
    name: "Modifier le bouton si renseigné ?",
    font: "dialog",
    bold: true,
    },
    {
    type: "view",
    alignment: "align_center",
    align_children: "align_row",
    elements: [
    {
    type: "radio",
    group_id: "gr00",
    item_id: "rd00",
    name: " Non",
    },
    {
    type: "radio",
    group_id: "gr00",
    item_id: "rd01",
    name: " Oui",
    },
    ]
    },
    ]
    },
    {
    type: "gap",
    height: 5
    },
    {
    type: "ok_cancel",
    },
    ]
    },
    ]
    }
    };
    if("ok"==app.execDialog(bDialogue)){
    if (initialiser) {
    this.getField("LinkT."+ind+"."+indice).setAction("MouseUp","//");
    this.getField("LinkT."+ind+"."+indice).buttonSetCaption("...");
    this.getField("LinkT."+ind+"."+indice).fillColor=color.ltGray;
    } else {
    this.getField("LinkT."+ind+"."+indice).setAction("MouseUp","app.launchURL(\""+texteURL+"\");");
    this.getField("LinkT."+ind+"."+indice).buttonSetCaption(texteBouton);
    this.getField("LinkT."+ind+"."+indice).fillColor=color.green;
    }
    }

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Action pour ouvrir une page web par script #75844
    bebarth
    Maître des clés

    J’ai fait une version qui fonctionne apparemment avec PDF Expert !
    A vérifier quand même…

    Il y avait une erreur que j’ai modifié (dans les 2 fichiers);

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Action pour ouvrir une page web par script #75839
    bebarth
    Maître des clés

    PDF Expert gère nativement les boites de dialogue (AcroDialog).

    Je n’avais pas vérifié avec PDF Expert et effectivement :

    1. Il ne trouve pas le premier indice disponible
    2. Il ne comprend pas « insertSeparatorEntryInList »

    @+
    😎

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

    Voici ton fichier corrigé.
    Normalement ça fonctionne !!!

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Action pour ouvrir une page web par script #75833
    bebarth
    Maître des clés

    bonjour,

    c’est plus complexe que je ne le pensais

    C’est pas le plus simple dans le Javascript Acrobat… Il y a quelques exemples dans l’API Reference (https://opensource.adobe.com/dc-acrobat-sdk-docs/library/jsapiref/JS_API_AcroJS.html#execdialog) ou sur ce fichier de Thom Parker (page : https://www.pdfscripting.com/public/ACRODIALOGS-OVERVIEW.cfm, fichier : http://www.windjack.com/resources/Examples/DialogUses.pdf).
    Si cela t’intéresse de créer des boites de dialogue je peu de donner quelques exemples simples.

    Voilà ce que j’ai fait. Je pense l’avoir testé, mais dis-moi s’il y a des erreurs.
    J’en ai profité pour faire un peu de pub à ma fille !!!

    Voici le script :

    var nomBoutons=[];
    for (var k=0; k<10; k++) nomBoutons.push(this.getField("LinkT.1."+k).buttonGetCaption());
    for (var k=0; k<10; k++) {
    if (this.getField("LinkT.1."+k).buttonGetCaption()=="...") break;
    }
    if (k==10) app.alert("Tous les boutons renvoient à une URL.",3);
    //
    var bDialogue={
    initialize: function(bDialogue) {
    this.cbInit=true;
    bDialogue.enable({url0: true});
    this.loadDefaults(bDialogue);
    },
    loadDefaults: function(bDialogue) {
    bDialogue.load({
    cb00: false,
    rd00: true,
    url0: "http://www.",
    });
    bDialogue.insertEntryInList({"menu":{"- Indices -": 0}});
    bDialogue.insertSeparatorEntryInList("menu");
    for (var i=0; i<10; i++) {
    if (i!=k) var par=-1;
    else var par=1;
    eval("bDialogue.insertEntryInList({\"menu\":{\""+i+"\": "+(par*(i+1))+"}});");
    }
    },
    cb00: function(bDialogue) {
    this.cbInit=!this.cbInit;
    bDialogue.enable({init: this.cbInit});
    },
    quelBtRd: function (oRslt) {
    for (var i=0; i<=1; i++) { if (oRslt["rd0"+i]) { switch (i) { case 0: resBtRd="Non"; break; case 1: resBtRd="Oui"; } } }; return resBtRd; }, validate: function(bDialogue) { var oRslt=bDialogue.store(); var elements=bDialogue.store()["menu"]; for (var i in elements) { if (elements>0) indice=i;
    }
    if (indice=="- Indices -") {
    app.alert("Veuillez sélectionner l'indice d'un champ;.",3);
    return false;
    } else {
    initialiser=oRslt["cb00"];
    if (initialiser) {
    texteBouton="...";
    texteURL="";
    return true;
    } else {
    texteBouton=oRslt["nmbt"];
    var testOK0=true;
    if (!/^(\w|\W)+( (\w|\W)+)*$/.test(texteBouton)) var testOK0=false;
    if (!testOK0) app.alert("Veuillez indiquer un nom pour le bouton.",3);
    var testOK1=true;
    texteURL=oRslt["url0"];
    if (!/^(https?:\/\/)?([\w-]+(\.[\w-]+)+)(:\d+)?(\/[^\s]*)?$/i.test(texteURL)) var testOK1=false;
    if (!testOK1) app.alert("Veuillez renseigner une URL correcte.",3);
    cAc=this.quelBtRd(oRslt);
    if (nomBoutons[indice]!="...") {
    if (cAc=="Non") {
    app.alert("Le bouton d'indice \""+indice+"\" est déjà renseigné.",3);
    return false;
    } else {
    var reponse=app.alert("Le bouton d'indice \""+indice+"\" est déjà renseigné.\rSouhaitez-vous réellement le modifier ?",3,2);
    if (reponse==3) return false;
    }
    }
    var testOK=testOK0 && testOK1;
    return testOK;
    }
    }
    },
    description: {
    name: "Bouton vers URL",
    first_tab: "cb00",
    elements: [
    {
    type: "cluster", //
    elements: [
    {
    type: "static_text",
    name: "Indice du bouton",
    font: "dialog",
    bold: true,
    },
    {
    type: "popup",
    item_id: "menu",
    alignment: "align_fill",
    //width: 150,
    },
    {
    type: "check_box",
    alignment: "align_center",
    item_id: "cb00",
    name: " Réinitialiser le bouton",
    },
    {
    type: "gap",
    height: 5
    },
    {
    type: "cluster",
    item_id: "init",

    elements: [
    {
    type: "static_text",
    name: "Texte pour le bouton",
    font: "dialog",
    bold: true,
    },
    {
    type: "edit_text",
    item_id: "nmbt",
    alignment: "align_fill",
    },
    {
    type: "gap",
    height: 5
    },
    {
    type: "static_text",
    name: "URL à atteindre",
    font: "dialog",
    bold: true,
    },
    {
    type: "edit_text",
    item_id: "url0",
    alignment: "align_fill",
    },
    {
    type: "gap",
    height: 5
    },
    {
    type: "static_text",
    name: "Modifier le bouton si renseigné ?",
    font: "dialog",
    bold: true,
    },
    {
    type: "view",
    alignment: "align_center",
    align_children: "align_row",
    elements: [
    {
    type: "radio",
    group_id: "gr00",
    item_id: "rd00",
    name: " Non",
    },
    {
    type: "radio",
    group_id: "gr00",
    item_id: "rd01",
    name: " Oui",
    },
    ]
    },
    ]
    },
    {
    type: "gap",
    height: 5
    },
    {
    type: "ok_cancel",
    },
    ]
    },
    ]
    }
    };
    if("ok"==app.execDialog(bDialogue)){
    if (initialiser) {
    this.getField("LinkT.1."+indice).setAction("MouseUp","//");
    this.getField("LinkT.1."+indice).buttonSetCaption("...");
    this.getField("LinkT.1."+indice).fillColor=color.ltGray;
    } else {
    this.getField("LinkT.1."+indice).setAction("MouseUp","app.launchURL(\""+texteURL+"\");");
    this.getField("LinkT.1."+indice).buttonSetCaption(texteBouton);
    this.getField("LinkT.1."+indice).fillColor=color.green;
    }
    }

    …et le fichier où j’ai rajouté une ligne pour en avoir 10 (de 0 à 9).

    @+
    😎

    • Cette réponse a été modifiée le il y a 1 année par bebarth.
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Calcul filetages #75830
    bebarth
    Maître des clés

    bonjour,
    Je regarde rapidement…

    @+
    😎

    en réponse à : Action pour ouvrir une page web par script #75829
    bebarth
    Maître des clés

    bonjour,

    D’ici là je vais chercher pour voir si j’y arrive.

    As-tu réussi à faire quelque chose ?
    Je m’y attelle dès ce soir. « Normalement » ça ne devrait pas être trop long. la boite de dialogue n’est pas très compliquée, mais lorsqu’on n’en fait pas depuis un certain temps il faut se remettre dans le bain.
    Je te tiens au courant…

    @+
    😎

    en réponse à : Calcul filetages #75824
    bebarth
    Maître des clés

    bonjour,
    L’expression régulière vérifie les chaines de caractères strictement !
    UNEF 1.11/16 – – 32 – Pas 1.720 n’est donc pas la même chose que UNEF 1 11/16 – 32 – Pas 1.720 (sans point et avec un simple tiret). La première chaine testée est donc fausse alors que la seconde est vraie.

    @+
    😎

    en réponse à : Calcul filetages #75817
    bebarth
    Maître des clés

    il y a 2 valeurs que je ne sais pas entrer ( 1.11/16-18 Pas 1,720 Perage 44,45 — 2″-18 Pas 1,971 Perçage 50.8)

    C’est compliqué de modifier toujours l’énoncé du problème. Il faut réadapter à chaque fois l’expression régulière… Maintenant elle en est à :
    var filetageRegEx=/^UNE?(C|F)[ ]*(\d{0,2}["]?[ ]*(\d+[/]\d+)?)[ ]*-[ ]*(\d{1,2})[ ]*-[ ]*\w*[ ]*(\d{1,2}[.,]\d{1,3})$/;

    Tu devrais maintenant pouvoir entrer tes nouvelles valeurs.

    @+
    😎

    • Cette réponse a été modifiée le il y a 1 année et 1 mois par bebarth.
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Calcul filetages #75814
    bebarth
    Maître des clés

    Et sur une page que j’ai recréé “UNEF”

    Il ne faut pas écrire :
    var filetageRegEx=/^UN(C|EF)[ ]*(\d?["]?[ ]*(\d[/]\d+)?)[ ]*-[ ]*(\d{1,2})[ ]*-[ ]*\w*[ ]*(\d{1,2}[.,]\d{1,3})$/;
    mais
    var filetageRegEx=/^UNE?(C|F)[ ]*(\d?["]?[ ]*(\d[/]\d+)?)[ ]*-[ ]*(\d{1,2})[ ]*-[ ]*\w*[ ]*(\d{1,2}[.,]\d{1,3})$/;

    @+
    😎

    en réponse à : Calcul filetages #75812
    bebarth
    Maître des clés

    bonjour,

    la page PG Beug, pourquoi aucune idée §

    Tout le monde aura remarqué (lol) qu’avec cette expression régulière :
    var filetageRegEx=/^(W|(BSF)|(PG)|(NPT))[ ]*(\d?["]?[ ]*(\d[/]\d+)?)[ ]*-[ ]*\w*[ ]*(\d{1,2}[.,]\d{1,3})$/;
    il n’est possible d’indiquer qu’un seul chiffre pour le diamètre. pour qu’il soit possible d’en indiquer 2, il faut écrire :
    var filetageRegEx=/^(W|(BSF)|(PG)|(NPT))[ ]*(\d{1,2}["]?[ ]*(\d[/]\d+)?)[ ]*-[ ]*\w*[ ]*(\d{1,2}[.,]\d{1,3})$/;
    et comme je viens de m’apercevoir de la possibilité d’une décimale, l’expression régulière devient :
    var filetageRegEx=/^(W|(BSF)|(PG)|(NPT))[ ]*(\d{1,2}[.]?\d?["]?[ ]*(\d[/]\d+)?)[ ]*-[ ]*\w*[ ]*(\d{1,2}[.,]\d{1,3})$/;

    Dans mon fichier de retour j’ai mis en fonction une parie du script ce qui permet de ne l’écrire qu’une seule fois dans le fichier et juste d’appeler cette fonction avec le menu déroulant.
    // Script de document
    function filetages() {
    for (var i=0; i<event.target.numItems; i++) {
    if (event.changeEx==event.target.getItemAt(i,true)) break;
    }
    var lesValeurs=event.target.getItemAt(i,false);
    //
    var vis="";
    var pas="";
    var filetageRegEx=/^M[ ]*(\d{1,2})[ ]*-[ ]*\w*[ ]*(\d{1,2}[.,]\d{1,3})$/;
    if (filetageRegEx.test(lesValeurs)) {
    var visPas=lesValeurs.replace(filetageRegEx,"$1-$2".replace(/,/g,"."));
    var vis=visPas.split("-")[0];
    var pas=visPas.split("-")[1];
    } else {
    var filetageRegEx=/^(W|(BSF)|(PG)|(NPT))[ ]*(\d{1,2}[.]?\d?["]?[ ]*(\d[/]\d+)?)[ ]*-[ ]*\w*[ ]*(\d{1,2}[.,]\d{1,3})$/;
    if (filetageRegEx.test(lesValeurs)) {
    var visPas=lesValeurs.replace("\""," ").replace(/[ ]+/g," ").replace(filetageRegEx,"$5-$7".replace(/,/g,"."));
    var laVis=visPas.split("-")[0].split(/[ ]/);
    if (laVis.length==1) {
    var vis=(Number(laVis[0].split("/")[0])/Number(laVis[0].split("/")[1]))*25.4;
    } else {
    if (laVis[1]) var vis=(Number(laVis[0])+(Number(laVis[1].split("/")[0])/Number(laVis[1].split("/")[1])))*25.4;
    else var vis=Number(laVis[0])*25.4;
    }
    var pas=visPas.split("-")[1];
    } else {
    var filetageRegEx=/^UN(C|F)[ ]*(\d{1,2}["]?[ ]*(\d[/]\d+)?)[ ]*-[ ]*(\d{1,2})[ ]*-[ ]*\w*[ ]*(\d{1,2}[.,]\d{1,3})$/;
    if (filetageRegEx.test(lesValeurs)) {
    var visPas=lesValeurs.replace("\""," ").replace(/[ ]+/g," ").replace(filetageRegEx,"$2-$4-$5".replace(/,/g,"."));
    var laVis=visPas.split("-")[0].split(/[ ]/);
    if (Number(visPas.split("-")[1])>=28 && /[^"]/.test(lesValeurs) && Number(visPas.split("-")[0])<=12) {
    var UN=[1.524,1.854,2.184,2.515,2.845,3.175,3.505,"-",4.166,"-",4.826,"-",5,486];
    var vis=UN[Number(visPas.split("-")[0])];
    } else if (laVis.length==1) {
    var vis=(Number(laVis[0].split("/")[0])/Number(laVis[0].split("/")[1]))*25.4;
    } else {
    var vis=(Number(laVis[0])+(Number(laVis[1].split("/")[0])/Number(laVis[1].split("/")[1])))*25.4;
    }
    var pas=visPas.split("-")[2];
    } else {
    var filetageRegEx=/^G[ ]*(\d{1,2}["]?[ ]*(\d[/]\d+)?)[ ]*-[ ]*\w*[ ]*(\d{1,2}[.,]\d{1,3})$/;
    if (filetageRegEx.test(lesValeurs)) {
    var visPas=lesValeurs.replace("\""," ").replace(/[ ]+/g," ").replace(filetageRegEx,"$1-$3".replace(/,/g,"."));
    var laVis=visPas.split("-")[0].split(/[ ]/);
    var filetageGaz=[["1/16",7.723],["1/8",9.728],["1/4",13.157],["3/8",16.662],["1/2",20.955],["5/8",22.911],["3/4",26.441],["7/8",30.201],["1",33.249],["1 1/8",37.897],["1 1/4",41.91],["1 1/2",47.803],["1 3/4",53.746],["2",59.614],["2 1/4",65.71],["2 1/2",75.184],["2 3/4",81.534],["3",87.884],["3 1/2",100.33],["4",125.73],["4 1/2",125.73],["5",138.43],["5 1/2",151.13],["6",163,83]];
    if (laVis.length>1 && laVis[1]) var filetage=laVis[0]+" "+laVis[1];
    else var filetage=laVis[0];
    for (var j=0; j<filetageGaz.length; j++) {
    if (filetageGaz[j][0]==filetage) {
    var vis=filetageGaz[j][1];
    break;
    }
    }
    if (j==filetageGaz.length) app.alert("Filetage incorrect",3);
    else var pas=visPas.split("-")[1];
    } else app.alert("Filetage incorrect",3);
    }
    }
    }
    return [vis, pas]
    }
    // Script de touches personnalisé
    if (!event.willCommit) {
    var visETpas=filetages();
    try {
    /*
    console.println("vis : "+vis);
    console.println("pas : "+pas);
    this.getField("Text5").value=vis;
    this.getField("Text6").value=pas;
    */
    this.getField("FiltagePGR").value=visETpas[0];
    this.getField("PasPGconv").value=visETpas[1];
    } catch(e) {
    app.alert("Filetage incorrect",3);
    }
    }

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Action pour ouvrir une page web par script #75811
    bebarth
    Maître des clés

    bonjour,

    Je n’arrive pas à savoir comment faire pour avoir tout ceci dans la même boite de dialogue…

    C’est un petit boulot, mais si tu n’es pas trop pressé je te fais ça en fin de semaine…

    @+
    😎

    en réponse à : Calcul filetages #75790
    bebarth
    Maître des clés

    J’ai voulu modifier le script car j’ai vu ou etait les diametres, je les mis mais le script sonne, je ne vois pas l’erreur

    Je regarderai lundi car ce ne sera pas possible ce weekend !

    Quelles sont les lignes modifiées ? Ça m’évitera de chercher trop longtemps…

    @+
    😎

    • Cette réponse a été modifiée le il y a 1 année et 1 mois par bebarth.
    en réponse à : Calcul filetages #75787
    bebarth
    Maître des clés

    Cette ligne correspond a quoi ? : var UN=[1.524,1.854,2.184,2.515,2.845,3.175,3.505,”-“,4.166,”-“,4.826,”-“,5,486];

    Cette ligne est une table de correspondance des petites vis UNC/UNF dont le numéro de 0 à 12 n’indique pas le diamètre.

    Attention, le dernier élément de la table doit être 5.486 (avec un point).

    @+
    😎

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

    Et juste pour savoir, c’est normal que l’exportation de valeurs perçage ne se fait plus ?

    Il faut cocher la case du menu déroulant « Valider la valeur sélectionnée immédiatement ».

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Action pour ouvrir une page web par script #75782
    bebarth
    Maître des clés

    bonjour,
    Voici ma proposition qui devrait correspondre à ce que tu demandes :
    var i=event.target.name.substr(6);
    var j=this.getField("NoLieT."+i).value;
    if (this.getField("LinkT."+i+"."+j).buttonGetCaption()!="....") {
    app.alert("Ce bouton renvoie déjà à une url.",3);
    } else {
    var leLien=this.getField("LaT."+i).value;
    if (j!="-" && /^(https?:\/\/)?([\w-]+(\.[\w-]+)+)(:\d+)?(\/[^\s]*)?$/i.test(leLien)) {
    this.getField("LinkT."+i+"."+j).setAction("MouseUp","app.launchURL(\""+leLien+"\");");
    var texteBouton="";
    while ((!/^(\w|\W)+( (\w|\W)+)*$/.test(texteBouton) && texteBouton!=null) || texteBouton=="Exemple") {
    var texteBouton=app.response({
    cQuestion: "Quel nom souhaitez-vous attribuer à ce bouton ?",
    cTitle: "Nom du bouton",
    cLabel: "Nom :",
    cDefault: "Exemple"
    });
    }
    if (texteBouton!=null) {
    this.getField("LinkT."+i+"."+j).buttonSetCaption(texteBouton);;
    this.getField("LinkT."+i+"."+j).fillColor=color.green;
    this.getField("LaT."+i).value="";
    for (var k=0; k<10; k++) {
    if (this.getField("LinkT."+i+"."+k).buttonGetCaption()=="....") {
    this.getField("NoLieT."+i).value=k;
    break;
    }
    }
    if (k==10) app.alert("Tous les boutons renvoient à une url",3);
    }
    }
    else if (j=="-") app.alert("Veuillez choisir un numéro d'indice",3);
    else app.alert("L'url indiquée n'est pas correcte",3);
    }

    @+
    😎

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

    bonjour,
    Voici un nouveau script ou les diamètres pour les filetages gaz sont indiqués dans une table.
    Pour info, j’ai retiré de ta liste le modèle 1″3/8 qui n’existe pas et que je prenais en exemple… ce qui m’a perturbé un moment car bien entendu il n’était pas dans la table !
    if (!event.willCommit) {
    for (var i=0; i<event.target.numItems; i++) { if (event.changeEx==event.target.getItemAt(i,true)) break; } var lesValeurs=event.target.getItemAt(i,false); // var vis=""; var pas=""; var filetageRegEx=/^M[ ]*(\d{1,2})[ ]*-[ ]*\w*[ ]*(\d{1,2}[.,]\d{1,3})$/; if (filetageRegEx.test(lesValeurs)) { var visPas=lesValeurs.replace(filetageRegEx,"$1-$2".replace(/,/g,".")); var vis=visPas.split("-")[0]; var pas=visPas.split("-")[1]; } else { var filetageRegEx=/^(W|(BSF)|(PG)|(NPT))[ ]*(\d?["]?[ ]*(\d[/]\d+)?)[ ]*-[ ]*\w*[ ]*(\d{1,2}[.,]\d{1,3})$/; if (filetageRegEx.test(lesValeurs)) { var visPas=lesValeurs.replace("\""," ").replace(/[ ]+/g," ").replace(filetageRegEx,"$5-$7".replace(/,/g,".")); var laVis=visPas.split("-")[0].split(/[ ]/); if (laVis.length==1) { var vis=(Number(laVis[0].split("/")[0])/Number(laVis[0].split("/")[1]))*25.4; } else { if (laVis[1]) var vis=(Number(laVis[0])+(Number(laVis[1].split("/")[0])/Number(laVis[1].split("/")[1])))*25.4; else var vis=Number(laVis[0])*25.4; } var pas=visPas.split("-")[1]; } else { var filetageRegEx=/^UN(C|F)[ ]*(\d?["]?[ ]*(\d[/]\d+)?)[ ]*-[ ]*(\d{1,2})[ ]*-[ ]*\w*[ ]*(\d{1,2}[.,]\d{1,3})$/; if (filetageRegEx.test(lesValeurs)) { var visPas=lesValeurs.replace("\""," ").replace(/[ ]+/g," ").replace(filetageRegEx,"$2-$4-$5".replace(/,/g,".")); var laVis=visPas.split("-")[0].split(/[ ]/); if (Number(visPas.split("-")[1])>=28 && /[^"]/.test(lesValeurs) && Number(visPas.split("-")[0])<=12) { var UN=[1.524,1.854,2.184,2.515,2.845,3.175,3.505,"-",4.166,"-",4.826,"-",5.486]; var vis=UN[Number(visPas.split("-")[0])]; } else if (laVis.length==1) { var vis=(Number(laVis[0].split("/")[0])/Number(laVis[0].split("/")[1]))*25.4; } else { var vis=(Number(laVis[0])+(Number(laVis[1].split("/")[0])/Number(laVis[1].split("/")[1])))*25.4; } var pas=visPas.split("-")[2]; } else { var filetageRegEx=/^G[ ]*(\d?["]?[ ]*(\d[/]\d+)?)[ ]*-[ ]*\w*[ ]*(\d{1,2}[.,]\d{1,3})$/; if (filetageRegEx.test(lesValeurs)) { var visPas=lesValeurs.replace("\""," ").replace(/[ ]+/g," ").replace(filetageRegEx,"$1-$3".replace(/,/g,".")); var laVis=visPas.split("-")[0].split(/[ ]/); var filetageGaz=[["1/16",7.723],["1/8",9.728],["1/4",13.157],["3/8",16.662],["1/2",20.955],["5/8",22.911],["3/4",26.441],["7/8",30.201],["1",33.249],["1 1/8",37.897],["1 1/4",41.91],["1 1/2",47.803],["1 3/4",53.746],["2",59.614],["2 1/4",65.71],["2 1/2",75.184],["2 3/4",81.534],["3",87.884],["3 1/2",100.33],["4",125.73],["4 1/2",125.73],["5",138.43],["5 1/2",151.13],["6",163.83]]; if (laVis.length>1 && laVis[1]) var filetage=laVis[0]+" "+laVis[1];
    else var filetage=laVis[0];
    for (var j=0; j<filetageGaz.length; j++) {
    if (filetageGaz[j][0]==filetage) {
    var vis=filetageGaz[j][1];
    break;
    }
    }
    if (j==filetageGaz.length) app.alert("Filetage incorrect",3);
    else var pas=visPas.split("-")[1];
    } else app.alert("Filetage incorrect",3);
    }
    }
    }
    try {
    console.println("vis : "+vis);
    console.println("pas : "+pas);
    this.getField("Text5").value=vis;
    this.getField("Text6").value=pas;
    } catch(e) {
    app.alert("Filetage incorrect",3);
    }
    }

    Attention, le dernier élément de la table filetageGaz doit être [« 6 »,163.83] (avec un point).

    @+
    😎

    • Cette réponse a été modifiée le il y a 1 année et 1 mois par bebarth.
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Calcul filetages #75765
    bebarth
    Maître des clés

    Comme indiqué sur la page « la lettre G suivi de la taille (qui, pour rappel, n’a aucun rapport avec le diamètre)« .
    Il me semble que pour le gaz la taille indiquée correspond au diamètre intérieur du tube, alors que le diamètre correspondant est son diamètre extérieur.
    Il faudra donc utiliser une table pour indiquer ces diamètres car le rapport intérieur/extérieur n’est pas constant. Je regarde plus tard…

    @+
    😎

    • Cette réponse a été modifiée le il y a 1 année et 1 mois par bebarth.
    • Cette réponse a été modifiée le il y a 1 année et 1 mois par bebarth.
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Calcul filetages #75758
    bebarth
    Maître des clés

    <p style= »text-align: left; »>bonjour,
    J’ai fait une petite modification du script :
    if (!event.willCommit) {
    for (var i=0; i<event.target.numItems; i++) { if (event.changeEx==event.target.getItemAt(i,true)) break; } var lesValeurs=event.target.getItemAt(i,false); // var filetageRegEx=/^M[ ]*(\d{1,2})[ ]*-[ ]*\w*[ ]*(\d{1,2}[.,]\d{1,3})$/; if (filetageRegEx.test(lesValeurs)) { var visPas=lesValeurs.replace(filetageRegEx,"$1-$2".replace(/,/g,".")); var vis=visPas.split("-")[0]; var pas=visPas.split("-")[1]; } else { var filetageRegEx=/^(W|(BSF)|G|(PG)|(NPT))[ ]*(\d?["]?[ ]*(\d[/]\d+)?)[ ]*-[ ]*\w*[ ]*(\d{1,2}[.,]\d{1,3})$/; if (filetageRegEx.test(lesValeurs)) { var visPas=lesValeurs.replace("\""," ").replace(/[ ]+/g," ").replace(filetageRegEx,"$5-$7".replace(/,/g,".")); var laVis=visPas.split("-")[0].split(/[ ]/); if (laVis.length==1) { var vis=(Number(laVis[0].split("/")[0])/Number(laVis[0].split("/")[1]))*25.4; } else { if (laVis[1]) var vis=(Number(laVis[0])+(Number(laVis[1].split("/")[0])/Number(laVis[1].split("/")[1])))*25.4; else var vis=Number(laVis[0])*25.4; } var pas=visPas.split("-")[1]; } else { var filetageRegEx=/^UN(C|F)[ ]*(\d?["]?[ ]*(\d[/]\d+)?)[ ]*-[ ]*(\d{1,2})[ ]*-[ ]*\w*[ ]*(\d{1,2}[.,]\d{1,3})$/; if (filetageRegEx.test(lesValeurs)) { var visPas=lesValeurs.replace("\""," ").replace(/[ ]+/g," ").replace(filetageRegEx,"$2-$4-$5".replace(/,/g,".")); var laVis=visPas.split("-")[0].split(/[ ]/); if (Number(visPas.split("-")[1])>=28 && /[^"]/.test(lesValeurs) && Number(visPas.split("-")[0])<=12) {
    var UN=[1.524,1.854,2.184,2.515,2.845,3.175,3.505,"-",4.166,"-",4.826,"-",5.486];
    var vis=UN[Number(visPas.split("-")[0])];
    } else if (laVis.length==1) {
    var vis=(Number(laVis[0].split("/")[0])/Number(laVis[0].split("/")[1]))*25.4;
    } else {
    var vis=(Number(laVis[0])+(Number(laVis[1].split("/")[0])/Number(laVis[1].split("/")[1])))*25.4;
    }
    var pas=visPas.split("-")[2];
    } else app.alert("Filetage incorrect",3);
    }
    }
    try {
    console.println("vis : "+vis);
    console.println("pas : "+pas);
    this.getField("Text5").value=vis;
    this.getField("Text6").value=pas;
    } catch(e) {
    app.alert("Filetage incorrect",3);
    }
    }</p>
    @+
    😎

    • Cette réponse a été modifiée le il y a 1 année et 1 mois par bebarth.
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Calcul filetages #75751
    bebarth
    Maître des clés

    Je te propose ce script valable (sauf erreur) pour toutes tes formes d’écritures.
    Si tu as un fichier terminé avec tous les différents filetages, Je te conseille de mettre ce script en fonction et de l’appeler par tous les menus déroulants.
    if (!event.willCommit) {
    for (var i=0; i<event.target.numItems; i++) { if (event.changeEx==event.target.getItemAt(i,true)) break; } var lesValeurs=event.target.getItemAt(i,false); // var filetageRegEx=/^M[ ]*(\d{1,2})[ ]*-[ ]*\w*[ ]*(\d{1,2}[.,]\d{1,3})$/; if (filetageRegEx.test(lesValeurs)) { var visPas=lesValeurs.replace(filetageRegEx,"$1-$2".replace(/,/g,".")); var vis=visPas.split("-")[0]; var pas=visPas.split("-")[1]; } else { var filetageRegEx=/^(W|(BSF)|G|(PG)|(NPT))[ ]*(\d?["]?[ ]*(\d[/]\d+)?)[ ]*-[ ]*\w*[ ]*(\d{1,2}[.,]\d{1,3})$/; if (filetageRegEx.test(lesValeurs)) { var visPas=lesValeurs.replace(filetageRegEx,"$5-$7".replace(/,/g,".")); var laVis=visPas.split("-")[0].split(/[ "]/); if (laVis.length==1) { var vis=(Number(laVis[0].split("/")[0])/Number(laVis[0].split("/")[1]))*25.4; } else { var vis=(Number(laVis[0])+(Number(laVis[1].split("/")[0])/Number(laVis[1].split("/")[1])))*25.4; } var pas=visPas.split("-")[1]; } else { var filetageRegEx=/^UN(C|F)[ ]*(\d?["]?[ ]*(\d[/]\d+)?)[ ]*-[ ]*(\d{1,2})[ ]*-[ ]*\w*[ ]*(\d{1,2}[.,]\d{1,3})$/; if (filetageRegEx.test(lesValeurs)) { var visPas=lesValeurs.replace(filetageRegEx,"$2-$4-$5".replace(/,/g,".")); var laVis=visPas.split("-")[0].split(/[ "]/); if (Number(visPas.split("-")[1])>=28 && /[^"]/.test(lesValeurs) && Number(visPas.split("-")[0])<=12) {
    var UN=[1.524,1.854,2.184,2.515,2.845,3.175,3.505,"-",4.166,"-",4.826,"-",5.486];
    var vis=UN[Number(visPas.split("-")[0])];
    } else if (laVis.length==1) {
    var vis=(Number(laVis[0].split("/")[0])/Number(laVis[0].split("/")[1]))*25.4;
    } else {
    var vis=(Number(laVis[0])+(Number(laVis[1].split("/")[0])/Number(laVis[1].split("/")[1])))*25.4;
    }
    var pas=visPas.split("-")[2];
    } else app.alert("Filetage incorrect",3);
    }
    }
    try {
    console.println("vis : "+vis);
    console.println("pas : "+pas);
    this.getField("Text5").value=vis;
    this.getField("Text6").value=pas;
    } catch(e) {
    app.alert("Filetage incorrect",3);
    }
    }

    @+
    😎

    • Cette réponse a été modifiée le il y a 1 année et 1 mois par bebarth.
    en réponse à : Calcul filetages #75735
    bebarth
    Maître des clés

    bonjour,
    Pour passer de pouces à millimètres il faut multiplier par 25,4.
    Exemple 5/8″ =  5*25.4/8 = 15.875 mm

    @+
    😎

    PS : Je n’avais pas vu sur ton fichier : 1″1/4 = 1.25″ = 1.25*25.4 = 31.75 mm

    • Cette réponse a été modifiée le il y a 1 année et 1 mois par bebarth.
    en réponse à : Calcul filetages #75730
    bebarth
    Maître des clés

    bonjour,
    Ça a l’air de fonctionner !

    @+
    😎

    en réponse à : Action pour ouvrir une page web par script #75724
    bebarth
    Maître des clés

    bonjour,
    Voici un script pour ajouter un lien aux boutons :
    var i=event.target.name.substr(6);
    var j=this.getField("NoLien."+i).value;
    var leLien=this.getField("LaC."+i).value;
    if (j!="-" && /^(https?:\/\/)?([\w-]+(\.[\w-]+)+)(:\d+)?(\/[^\s]*)?$/i.test(leLien)) {
    this.getField("Links."+i+"."+j).setAction("MouseUp","app.launchURL(\""+leLien+"\");");
    this.getField("LaC."+i).value="";

    }
    else if (j=="-") app.alert("Veuillez choisir un numéro d'indice",3);
    else app.alert("L'url indiquée n'est pas correcte",3);
    On trouve différentes expressions régulières sur internet qui correspondent à une url, celle-ci en est une !

    Pour la proposition de Merlin, on peut comme dans un post précédent lancer directement le lien depuis le menu déroulant en utilisant un script de touches personnalisé :
    if (!event.willCommit) {
    try {
    app.launchURL(event.changeEx);
    } catch(e) {}
    }
    On met le « try » au cas où la valeur d’exportation ne soit pas une url…

    @+
    😎

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

    …reste a trouver les autres !

    On doit bien trouver les formules sur internet !

    @+
    😎

    https://www.h7g6.fr/data/article/37/memento-des-types-filetages (Par exemple – A vérifier).

    • Cette réponse a été modifiée le il y a 1 année et 1 mois par bebarth.
    • Cette réponse a été modifiée le il y a 1 année et 1 mois par bebarth.
    en réponse à : Calcul filetages #75710
    bebarth
    Maître des clés

    Oui mais je n’ai trouvé que les formules pour le pas métrique pour l’instant (je cherche les autres, a moins que cela fonction sur d’autre filetage ?

    Dire que j’avais tout ça et que je m’en suis séparé il n’y a pas très longtemps…

    @+
    😎

    en réponse à : Calcul filetages #75709
    bebarth
    Maître des clés

    ça affichait la valeur précédemment sélectionnée dans le tableau

    Le premier fichier que j’ai partagé n’était pas le bon… mais le script est correct.
    J’ai maintenant remplacé le fichier. Ça évite d’avoir un bouton !

    @+
    😎

    en réponse à : Calcul filetages #75701
    bebarth
    Maître des clés

    bonjour,
    Je te propose un script de touches personnalisé :
    if (!event.willCommit) {
    for (var i=0; i<event.target.numItems; i++) {
    if (event.changeEx==event.target.getItemAt(i,true)) break;
    }
    var lesValeurs=event.target.getItemAt(i,false).split(" - Pas ");
    this.getField("Text5").value=lesValeurs[0];
    this.getField("Text6").value=lesValeurs[1];
    }

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Ajout d’un code #75694
    bebarth
    Maître des clés

    …et si tu veux écrire sur tous tes champs « Vol. » en script de calcul, tu exécutes :
    for (var i=0; i<126; i++) {
    this.getField("Vol."+i).setAction("Calculate", "var INDICE=event.target.name.substr(4);\revent.value=this.getField(\"JSerie.\"+INDICE).value*this.getField(\"JReps.\"+INDICE).value*this.getField(\"JCharge.\"+INDICE).value;");
    }

    @+
    😎

    en réponse à : Ajout d’un code #75693
    bebarth
    Maître des clés

    bonjour,
    Dans un premier temps il faut récupérer l’indice :
    var INDICE=event.target.name.substr(4);
    puis il faut écrire :
    this.getField("Vol."+INDICE).value=this.getField("JSerie."+INDICE).value*this.getField("JReps."+INDICE).value*this.getField("JCharge."+INDICE).value;

    @+
    😎

    en réponse à : Sauvegarde prefixe date #75670
    bebarth
    Maître des clés

    bonjour,

    Il est important de noter que l’exécution d’un tel script n’est pas permise sur un bouton.

    Ce n’est pas tout à fait vrai. C’est possible en plaçant une partie en script d’application pour élargir les privilèges. Mais c’est donc compliqué car il faut placer ce script en local dans le répertoire JavaScript d’Acrobat (ou Reader) de chaque ordinateur. Si ça t’intéresse tu me dis et je te fais un exemple.

    Pour les tablettes, tu oublies…

    @+
    😎

    • Cette réponse a été modifiée le il y a 1 année et 1 mois par bebarth.
    en réponse à : Générer des nombres se trouvant dans une table commune #75651
    bebarth
    Maître des clés

    Avec event.change (en script de touches personnalisé) on peut détecter la plupart des touches appuyées sauf pour les tabulations, les flèches, …

    @+
    😎

    en réponse à : Générer des nombres se trouvant dans une table commune #75650
    bebarth
    Maître des clés

    bonjour,
    Les valeurs retournées sont de 0 à 2 :
    0 — La valeur n’a pas été validée (par exemple, la touche Échap a été enfoncée).
    1 — La valeur a été validée en raison d’un clic en dehors du champ à l’aide de la souris.
    2 — La valeur a été validée en raison d’un appui sur la touche Entrée.
    3 — La valeur a été validée en appuyant sur la touche Tab pour accéder à un nouveau champ.

    @+
    😎

    en réponse à : Générer des nombres se trouvant dans une table commune #75641
    bebarth
    Maître des clés

    La discussion a été très rapide !

    @+
    😎

    en réponse à : Script pour changer de Helvetica à Courier ? #75640
    bebarth
    Maître des clés

    Ah oui, c’est vrai… mais mois je suis toujours retourné directement à l’interface « classique ».

    @+
    😎

    en réponse à : Script pour changer de Helvetica à Courier ? #75638
    bebarth
    Maître des clés

    Ça donne envie !
    Et c’est prévu pour quand ?

    @+
    😎

    en réponse à : Script pour changer de Helvetica à Courier ? #75636
    bebarth
    Maître des clés

    ils ne sont pas compatibles avec la “nouvelle expérience” de l’interface d’Acrobat.

    C’est quoi cette nouvelle expérience ?

    @+
    😎

    en réponse à : Script pour changer de Helvetica à Courier ? #75627
    bebarth
    Maître des clés

    bonjour,
    Si tu utilises mon utilitaire « Propriétés d’un champs » dans les abracadabraTools de Merlin, tu peux voir toutes les propriétés d’un champ spécifique, y compris le nom de la police de caractères utilisée.
    Si tu n’as pas les abracadabraTools, je te conseille de les télécharger. Ils sont très utiles.
    Il faudrait d’ailleurs que je pense à le mettre à jour…

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Générer des nombres se trouvant dans une table commune #75626
    bebarth
    Maître des clés

    Je fais évoquer le sujet sur le forum Adobe (plus tard) on verra si on a une réponse…

    Si vous voulez suivre la discussion :
    https://community.adobe.com/t5/acrobat-discussions/event-commitkey-values/m-p/15197726#M499460

    @+
    😎

    en réponse à : Script pour corriger une date #75623
    bebarth
    Maître des clés

    bonjour,
    J’ai légèrement modifié l’expression régulière car on pouvait écrire « 00 » pour les jours et mois lors d’une modification de date.
    La nouvelle expression régulière contrôlant la frappe est :
    var modeleRegEx=/^((0[1-9]?|[1-2][0-9]?|3[0-1]?)([\.]((0[1-9]?|1[0-2]?)([\.]([2]([0]\d{0,2})?)?)?)?)?)?$/;
    Maintenant, ce n’est plus possible… De plus, le 20 de l’année est automatiquement indiqué après le second point.

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Script pour changer de Helvetica à Courier ? #75621
    bebarth
    Maître des clés

    bonjour,
    Bêtement, j’utilise toujours les noms des polices standard données par l’api reference (font.Helv, font.Cour,…).
    https://opensource.adobe.com/dc-acrobat-sdk-docs/library/jsapiref/JS_API_AcroJS.html#id615
    Existe-t-il une différence ???

    @+
    😎

    en réponse à : Générer des nombres se trouvant dans une table commune #75608
    bebarth
    Maître des clés

    Je fais évoquer le sujet sur le forum Adobe (plus tard) on verra si on a une réponse…

    @+
    😎

    en réponse à : Générer des nombres se trouvant dans une table commune #75606
    bebarth
    Maître des clés

    Valeur 13 : Ce nombre correspond au code ASCII/Unicode de la touche Entrée (Enter).

    C’est bien ce que j’avais cru comprendre, mais pourquoi un simple signe « = » ? Si on en met 2 « == » ça ne fonctionne plus !
    Et ça n’a l’air de fonctionner qu’avec event.commitKey = 13;.

    @+
    😎

    en réponse à : Générer des nombres se trouvant dans une table commune #75603
    bebarth
    Maître des clés

    bonjour,
    Du coup, si PDF-XChange Editor comprend “event.commitKey”, je ne comprends pas pourquoi ça ne fonctionne pas avec ton fichier, et surtout pourquoi ça fonctionne avec l’autre ! Il ne l’interprète peut-être pas correctement. Il faut dire que “commitKey” est assez mal documenté.

    @+
    😎

    en réponse à : Générer des nombres se trouvant dans une table commune #75592
    bebarth
    Maître des clés

    … j’ai trouvé, mais j’ai fait quelques tests et apparemment PDF-XChange Editor ne connait pas « event.commitKey » !!!

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Générer des nombres se trouvant dans une table commune #75588
    bebarth
    Maître des clés

    Voici le script de touches personnalisé commenté :
    // Si aucun évènement ne sera exécuté, c’est à dire en cours de frappe
    if(!event.willCommit) {
    // La valeur du champ en table ou chaque élément est un caractère
    var aTester=event.value.split(«  »);
    // Dans cette table, avec « splice », on place le caractère frappé
    // entre la position de départ du curseur : event.selStart
    // et le nombre de caractères sélectionnés : event.selEnd-event.selStart
    // Si aucun caractère n’est sélectionné event.selEnd-event.selStart==0, on ajoute donc un caractère
    aTester.splice(event.selStart, event.selEnd-event.selStart, event.change);
    // testeChaine est la chaine de caractère à tester de la valeur du champ avec modification du caractère frappé
    var testeChaine=aTester.join(«  »);
    // Expression régulière pour valider la frappe en cours
    // Chaque nouveau caractère doit être validé sans tenir compte des caractères à venir
    // D’où l’ajout de « ? » qui signifie 0 ou 1
    // cf. explication de l’expression régulière ci-dessous
    var fractionRegEx=/^([1-9]\d*(\/([1-9]\d*)?)?)?$/;
    // La frappe est validée si le teste de la chaine avec l’expression régulière est vrai
    event.rc=fractionRegEx.test(testeChaine);
    // Sinon « if(event.willCommit) » : Si un évènement sera exécuté
    // Si on colle une valeur ou si on quitte le champ de quelque façon que ce soit
    } else {
    // Expression régulière pour valider l’entrée globale
    var fractionRegEx=/^[1-9]\d*(\/[1-9]\d*)?$/;
    // /^…$/ Teste la chaine de catactères du début jusqu’à la fin
    // [1-9] Le premier caractère doit être un chiffre de 1 à 9
    // \d* 0 ou plusieurs caractères numériques
    // (\/…)? Une barre de fraction et la suite, le tout facultatif
    // [1-9] Si il y a une barre de fraction, le premier caractère doit être un chiffre de 1 à 9
    // \d* suivi de 0 ou plusieurs caractères numériques
    // L’entrée est validée si le teste de la chaine avec l’expression régulière est vrai ou si le champ est vide
    event.rc=event.value== » » || fractionRegEx.test(event.value);
    }
    J’espère que c’est un peu plus clair pour toi !
    Ça ne fonctionne effectivement pas avec PDF-XChange Editor, mais je ne sais pas où trouver les scripts du champ…

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Générer des nombres se trouvant dans une table commune #75582
    bebarth
    Maître des clés

    bonjour,
    Je commente plus tard !
    Qu’est-ce qui ne fonctionne pas avec pdf XChange editor ? La validation avec la touche Enter ou l’expression régulière ?

    @+
    😎

    en réponse à : Exportation des données #75577
    bebarth
    Maître des clés

    bonjour,
    Non, je ne crois pas qu’il soit possible d’exporter directement en .xlsx, mais par contre on peut exporter au format .csv ! On doit pouvoir ensuite convertir le format avec une macro VBA.

    @+
    😎

    PS : Perso je ne sais pas écrire de macro VBA mais c’est la spécialité de mon frère… si ça t’intéresse je peux lui demander !

    • Cette réponse a été modifiée le il y a 1 année et 1 mois par bebarth.
    en réponse à : Générer des nombres se trouvant dans une table commune #75574
    bebarth
    Maître des clés

    bonjour,

    J’ai donc tenté de mettre en script sur le champ Result le code suivant : if (event.commitKey = 13) Verif();

    Pourquoi 13 ??? Si tu penses au caractère ASCII du retour ligne, ce n’est pas comme cela que fonctionne « event.commitKey ».
    https://opensource.adobe.com/dc-acrobat-sdk-docs/library/jsapiref/JS_API_AcroJS.html#commitkey
    Du coup, en script de format personnalisé tu écris :
    if (event.commitKey==2) Verif();
    Il faut également changer 2 lignes de la fonction Verif() car this.getField("Result").value = ""; provoque une erreur. Il faut donc remplacer (2 fois) cette ligne par this.resetForm(["Result"]);.

    Dans mon exemple, j’ai également ajouté un script de touches personnalisé pour ne pouvoir taper que les caractères utilisés pour écrire une fraction (ou juste un nombre).
    if (!event.willCommit) {
    var aTester=event.value.split("");
    aTester.splice(event.selStart, event.selEnd-event.selStart, event.change);
    var testeChaine=aTester.join("");
    var fractionRegEx=/^([1-9]\d*(\/([1-9]\d*)?)?)?$/;
    event.rc=fractionRegEx.test(testeChaine);
    } else {
    var fractionRegEx=/^[1-9]\d*(\/[1-9]\d*)?$/;
    event.rc=event.value=="" || fractionRegEx.test(event.value);
    }
    Demande si tu souhaites que je commente !

    Voici un lien pour télécharger ton fichier modifié : https://we.tl/t-RlWyRLbGyD

    @+
    😎

    • Cette réponse a été modifiée le il y a 1 année et 1 mois par bebarth.
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Générer des nombres se trouvant dans une table commune #75557
    bebarth
    Maître des clés

    bonjour,

    il y a par contre parfois le numérateur = au dénominateur

    Du coup, il faut écrire :
    ...
    while (a==b || PGCD(a,b)==1) hasard();
    ...

    Mon script va au plus simple en reprenant les valeurs des champs « Var.1.3 » et « Var.2.3 ». Je pense qu’on pourrait faire la même chose avant d’attribuer une valeur à ces champs, mais il faudrait revoir le script en entier ! Ça fonctionne comme ça…

    @+
    😎

    en réponse à : Générer des nombres se trouvant dans une table commune #75550
    bebarth
    Maître des clés

    Voici pour ton script de document « hasard ». La première fonction « function aleatoire (indice) » ne change pas, puis :

    function aleatoire (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);

    }
    function PGCD(a,b) {
    if (b) return PGCD(b,a%b);
    else return Math.abs(a);
    }
    function hasard () {
    for (i=1; i<=2; i++) {
    try {
    aleatoire (i);
    } catch(e) {
    this.getField("Var."+i+".3").value="";
    }
    }
    a=Math.abs(this.getField("Var.1.3").value);
    b=Math.abs(this.getField("Var.2.3").value);
    while (PGCD(a,b)==1) hasard();
    }

    @+
    😎

    PS : Bon, le fichier ne passe pas, je te laisse donc faire la modification.

    • Cette réponse a été modifiée le il y a 1 année et 1 mois par bebarth.
    en réponse à : Générer des nombres se trouvant dans une table commune #75545
    bebarth
    Maître des clés

    Voici une autre version avec moins de problèmes…

    Elle est où cette version ???

    @+
    😎

    en réponse à : Générer des nombres se trouvant dans une table commune #75544
    bebarth
    Maître des clés

    Le PGCD et le PPCM, mes cauchemars de collégien !

    Je crois même qu’on apprend ça en fin de primaire…

    @+
    😎

    en réponse à : Changement de couleur dans champ #75538
    bebarth
    Maître des clés

    bonjour,
    Il faut écrire :
    if (event.value>10) event.target.textColor=color.red;
    else event.target.textColor=color.black;

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Générer des nombres se trouvant dans une table commune #75536
    bebarth
    Maître des clés

    bonjour,
    En fait je n’arrive pas bien à comprendre comment ça fonctionne (Comment on génère les nombres aléatoires). Quand on clique sur « CLIQUE ICI » on a toujours un message… de plus il me semble qu’il y a une inversion quelque part entre le numérateur et le dénominateur (cf. copie d’écran).

    Sinon dans le principe il faudrait calculer le PGCD et faire une boucle (while) tant qu’il est égal à 1.
    Si tu m’éclaire un peu, je te fais ça (je l’ai déjà fait).

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Raccourcir un script #75528
    bebarth
    Maître des clés

    bonjour,

    Par contre ce qui est interdit partout, y compris sur les plaques d’immatriculation c’est “SS”.

    Je ne vais pas commenter la liste des noms partis à bannir, mais j’ai une info très intéressante à vous partager.
    Ma première voiture, une 4L, était immatriculée « 2200 SS 77 » et c’est la seule immatriculation que je me souvienne…
    Même l’immatriculation de ma voiture actuelle est notée sur mon téléphone. Intéressant, non ???

    @+
    😎

    en réponse à : Script pour corriger une date #75526
    bebarth
    Maître des clés

    bonjour,
    C’est possible si tu n’utilise pas un champ date mais un champ texte en forçant l’utilisation des caractère.
    Il y a 2 possibilités : Soit tu obliges l’utilisateur à taper tous les chiffres et dans ce cas tu peux insérer automatiquement les points de séparation ou l’utilisateur peut ne taper qu’un seul chiffres pour les jours et mois et 2 chiffres pour l’année et un script de format personnalisé se charge de remettre ça en forme.
    Voici les scripts utilisés dans mon document exemple qui vérifie les mois de 30 et 31 jours ainsi que le 29 février des année bissextiles :

    // script de document
    function verifDate(laDate) {
    var jour=Number(laDate.substr(0,2));
    var mois=Number(laDate.substr(3,2));
    var annee=Number(laDate.substr(6));
    var bissextile=annee%4==0 && (annee%100!=0 || annee%400==0)?"OUI":"NON";
    if (mois==2) {
    var leMois="FEVRIER";
    } else if (mois==4 || mois==6 || mois==9 || mois==11) {
    var leMois="30 JOURS";
    } else {
    var leMois="31 JOURS";
    }
    if (laDate.length==6) return (leMois=="30 JOURS" && jour<=30) || leMois=="31 JOURS" || (leMois=="FEVRIER" && jour<=29);
    else return (leMois=="30 JOURS" && jour<=30) || leMois=="31 JOURS" || (leMois=="FEVRIER" && jour<=28) || (bissextile=="OUI" && jour<=29);
    }

    // Script de touches personnalisé pour date entrée 01.02.2025
    if(!event.willCommit) {
    if (event.change==",") event.change=".";
    if ((/^0$/.test(event.value) || /^\d{2}\.0$/.test(event.value)) && event.change==0) var dateOK=false;
    else {
    var aTester=event.value.split("");
    if (event.value.length==1 && event.change!="") event.change=event.change+"\.";
    if (event.value.length==4 && event.change!="") event.change=event.change+"\.";
    aTester.splice(event.selStart, event.selEnd-event.selStart, event.change);
    var testeChaine=aTester.join("");
    if (testeChaine.length==6 || testeChaine.length==10) var dateOK=verifDate(testeChaine);
    else var dateOK=true;
    }
    var modeleRegEx=/^(([0-2][0-9]?|(3)[0-1]?)([\.](((0)[0-9]?|(1)[0-2]?)([\.]([2]([0]\d{0,2})?)?)?)?)?)?$/;
    event.rc=modeleRegEx.test(testeChaine) && dateOK;
    } else {
    var modeleRegEx=/^(\d{2}\.\d{2}\.\d{4})?$/;
    event.rc=event.value=="" || modeleRegEx.test(event.value);
    }

    // Script de touches personnalisé pour date entrée 1.2.25
    if(!event.willCommit) {
    if (event.change==",") event.change=".";
    if ((/^0$/.test(event.value) || /^\d{1,2}\.0$/.test(event.value) || /^\d{1,2}\.\d{1,2}\.0?$/.test(event.value)) && event.change==0) var dateOK=false;
    else {
    var aTester=event.value.split("");
    aTester.splice(event.selStart, event.selEnd-event.selStart, event.change);
    var testeChaine=aTester.join("");
    var aRetester=testeChaine.split(".");
    for (var i=0; i<aRetester.length; i++) {
    if (i==0 || i==1) {
    if (aRetester.length==1) aRetester="0"+aRetester+".";
    else aRetester=aRetester.toString()+".";
    } else if (i==3 && aRetester.length==2) aRetester="20"+aRetester;
    }
    var testeChaine=aRetester.join("");
    if (testeChaine.length==6 || testeChaine.length==10) var dateOK=verifDate(testeChaine);
    else var dateOK=true;
    }
    var modeleRegEx=/^(([0-2]?[0-9]?|(3)[0-1]?)([\.](((0)?[0-9]?|(1)[0-2]?)([\.](([2][0]?)?\d{0,2})?)?)?)?)?$/;
    event.rc=modeleRegEx.test(testeChaine) && dateOK;
    } else {
    var modeleRegEx=/^(\d{1,2}\.\d{1,2}\.\d{2,4})?$/;
    event.rc=event.value=="" || modeleRegEx.test(event.value);
    }

    // Script de format personnalisé
    var cetteDate=event.target.value.split(".");
    if (cetteDate[0].length==1) cetteDate[0]="0"+cetteDate[0];
    if (cetteDate[1].length==1) cetteDate[1]="0"+cetteDate[1];
    if (cetteDate[2].length==2) cetteDate[2]="20"+cetteDate[2];
    event.value=cetteDate[0]+"."+cetteDate[1]+"."+cetteDate[2];

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Raccourcir un script #75499
    bebarth
    Maître des clés

    Concrètement ça veut dire que :

    • si la variable pointA == “P” alors les variables pointB et pointC doivent être différentes de S et de C
    • si pointB == “P” alors pointC doit être différente de S et de C
    • si (pointA == “F”|| pointA == “R”) alors les variables pointB et pointC doivent être différentes de N
    • si (pointB == “F”|| pointB == “R”) alors la variables pointC doit être différente de N

    …ça va encore !

    On peut modifier la seconde expression régulière en /P.?(S|C|D|Q|T)|(F|R).?N|F.?O|L.?R|W.?C|GPT/, ce qui donne :

    var pointsABC="";
    while (pointsABC.length<3) {
    pointsABC+=String.fromCharCode(65+Math.floor(Math.random()*26));
    if (/^(?=.*(.).*\1)[A-Z]{1,3}$/.test(pointsABC) || /P.?(S|C|D|Q|T)|(F|R).?N|F.?O|L.?R|W.?C|GPT/.test(pointsABC)) var pointsABC=pointsABC.slice(0,-1);
    }

    @+
    😎

    • Cette réponse a été modifiée le il y a 1 année et 1 mois par bebarth.
    en réponse à : Ajout de lignes de code avec JavaScript #75496
    bebarth
    Maître des clés

    bonjour,
    Attention aux scripts « Souris relâchée » pour les menus déroulants qui s’exécutent avant de relâcher réellement.
    Je pense qu’il vaut mieux utiliser un script de touches personnalisé tel que :
    if (!event.willCommit) fillDropdown();

    Donc pour placer cette ligne en Script de touches personnalisé de tous les menus déroulants il faut exécuter :
    for (var i=0; i<this.numFields; i++) {
    var f=this.getField(this.getNthFieldName(i));
    if (f.type=="combobox") f.setAction("Keystroke", "if (!event.willCommit) fillDropdown();");
    }

    Pour ajouter une petite précision, on peut utiliser if (event.willCommit)... si on est certain que la case « Valider la valeur sélectionnée immédiatement » est cochée, mais pour être certain que celà fonctionne j’ai l’habitude d’utiliser if (!event.willCommit)...

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Raccourcir un script #75488
    bebarth
    Maître des clés

    bonjour,
    J’ai eu le temps de réfléchir à « comment réduire le script » hier pendant que je conduisais sur mon chemin du retour…
    Voici donc le résultat de ma réflexion après l’avoir testé ce matin :
    var pointsABC="";
    while (pointsABC.length<3) {
    pointsABC+=String.fromCharCode(65+Math.floor(Math.random()*26))
    if (/^(?=.*(.).*\1)[A-Z]{1,3}$/.test(pointsABC) || /PS|PC|FN|RN|FO|LR|PD|PQ|WC|GPT|PT/.test(pointsABC)) var pointsABC=pointsABC.slice(0,-1);
    }
    console.println(pointsABC);

    On peut donc récupérer chaque point si nécessaire en « splitant » la chaine pointsABC.

    Une autre réflexion m’en est ensuite venue : les couples/trios de lettres interdits le sont ici pour des points consécutifs et dans l’ordre (AB et BC) mais doivent-ils également l’être dans un autre ordre (BA, CB ou AC et CA) ??? Ça risque de compliquer un peu l’expression régulière…

    @+
    😎

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