IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

APIs Google Discussion :

Signification de formule.match(/\((.*)\;/).pop() [Google Sheets]


Sujet :

APIs Google

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 41
    Points : 17
    Points
    17
    Par défaut Signification de formule.match(/\((.*)\;/).pop()
    Bonjour,
    J'ai trouvé, sur internet (forum Google+), un script écrit en JavaScript pour compter, dans une feuille de calcul, le nombre de cellules d'une couleur donnée dans une plage donnée. Je déteste faire du copier-coller sans comprendre (mon langage habituel étant Delphi). Voici cette fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    function CompteCouleurs(plage,couleur) {
      var activeRange = SpreadsheetApp.getActiveRange();
      var activeSheet = activeRange.getSheet();
      var formule = activeRange.getFormula();
     
     
      var laplage = formule.match(/\((.*)\;/).pop();
      var range = activeSheet.getRange(laplage);
      var bg = range.getBackgrounds();
      var values = range.getValues();
     
      var lacouleur = formule.match(/\;(.*)\)/).pop();
      var colorCell = activeSheet.getRange(lacouleur);
      var color = colorCell.getBackground();
     
     var count = 0;
     
     
      for(var i=0;i<bg.length;i++)
        for(var j=0;j<bg[0].length;j++)
          if( bg[i][j] == color )
          count=count+1;
          return count;
    };
    J'ai 2 ou 3 questions sur cette fonction :
    1) Pourquoi les variables "plage" et "couleur", transmis en paramètre, ne sont-ils jamais utilisé dans le code de la fonction ?
    2) Que signifie précisément le passage formule.match(/\((.*)\;/).pop() ? Je sais que la méthode "match" s'applique sur une chaîne de caractères pour chercher une occurrence dans une expression régulière, mais là, je n'y comprends rien !
    3) La variables tableau "values" est sans doute inutile ici, n'est-ce pas ?


    Merci de m'éclairer.
    Sine qua non : un traceur de courbes gratuit
    http://www.patrice-rabiller.fr/SineQuaNon/menusqn.htm
    Patrice Rabiller

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 41
    Points : 17
    Points
    17
    Par défaut
    J'ai commencé à trouver des réponses à mes questions :
    1) Les paramètres "plage" et "couleur" ne servent à rien ! On peut les supprimer sans dommage pour le fonctionnement de la fonction. Leur seule utilité est de rappeler à l'utilisateur qu'il doit rentrer 2 paramètres, comme par exemple =SommeCouleurs(A1:C7;A9) où A1:C7 est la plage de cellules diversement colorées et A9 est la cellule dont le fond correspond à la couleur cherchée. Je trouve très étonnant qu'un langage puisse autoriser de telles imprécisions...
    2) La ligne 6 qui contient var laplage = formule.match(/\((.*)\;/).pop(); m'a donné beaucoup plus de fil à retordre. La chaîne passée en paramètre de la méthode match contient une série de caractères encadrés par 2 slashs. Cette méthode match, appliquée à la chaîne de caractères formule, produit un tableau de 2 chaînes, dans l'ordre "(A1:C7;" et "A1:C7". Je crois comprendre que les caractères \( et \; servent de délimiteurs et que les caractères (.*) indiquent "texte quelconque entre les délimiteurs". La méthode pop() retire alors la dernière des 2 chaînes, soit la référence de la plage à explorer A1:C7.
    Je ne comprend pas pourquoi on ne pourrait pas tout simplement remplacer cette ligne 6 par "laplage = plage" en utilisant le premier paramètre de la fonction !

    Je marque "résolu" mais j'aimerais bien que quelqu'un me confirme si j'ai bien compris ou si j'ai loupé quelque chose.
    Sine qua non : un traceur de courbes gratuit
    http://www.patrice-rabiller.fr/SineQuaNon/menusqn.htm
    Patrice Rabiller

  3. #3
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    1 616
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 616
    Points : 3 965
    Points
    3 965
    Par défaut
    je sais pas trop ce que te renvoie getFormula() mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var laplage = formule.match(/\((.*)\;/).pop();
    teste dans la string une expression régulière (ou rationnelle) constituée d'une parenthèse, puis de n'importe quels caractères et enfin se terminant par ";". match() te renvoie un tableau des correspondances, il retire du tableau la dernière (de toute façon il n'y en a qu'une, la recherche n'est pas globale) avec pop()et te la retourne, et donc cette chaine de caractère est ensuite stockée dans la variable laplage

    un peu le même principe avec lacouleur, sauf qu'il va chercher la valeur après le ";"

    A mon sens, effectivement de toute façon, les paramètres de la fonction ne servent à rien, mais en réalité le script va chercher ces paramètres directement dans ton "SpreadsheetApp.getActiveRange()", donc les cases sélectionnées je présume.

    Tu as compris la suite ?

    Quel est ce tableur que l'on peut programmer en javascript stp ?
    Émotion
    Infantilisation
    Culpabilisation

    Christophe Alévèque - 18 Mars 2021

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 41
    Points : 17
    Points
    17
    Par défaut
    Quel est ce tableur que l'on peut programmer en javascript stp ?
    Il s'agit de Google sheets. J'avais déjà utilisé VBA sur Excel mais, pour le tableur Google Sheets, la programmation se fait en Javascript. J'ai du mal à m'habituer à ce langage, mais c'est normal quand on débute. L'intérêt principal de ce tableur c'est qu'il s'agit d'une application où les documents sont partageables par plusieurs utilisateurs distants. Les documents sont donc enregistrés dans le cloud de Google.

    Tu as compris la suite ?
    Oui à peu près. Cependant, dans la double itération "for", qui parcourt la plage de cellules, le nombre bg.length doit retourner la taille du tableau bg. Or bg est un tableau de cellules (par exemple la plage A1:C7) et, la taille doit être de 21 (dans mon exemple) je suppose. Ensuite, combien vaut bg[0].length ? La longueur longueur de la ligne 0 (3 dans mon exemple). Donc l'instruction intérieure va être exécutée 63 fois ? C'est curieux ...
    Enfin, dans la ligne total = total+(values[i][j]*1), je suppose que la multiplication par 1 permet d'obliger javascript à considérer qu'il s'agit d'un nombre (les variables ne sont pas typées au moment de leur déclaration).
    Sine qua non : un traceur de courbes gratuit
    http://www.patrice-rabiller.fr/SineQuaNon/menusqn.htm
    Patrice Rabiller

  5. #5
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    1 616
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 616
    Points : 3 965
    Points
    3 965
    Par défaut
    oui le "*1" doit obliger à une conversion en nombre

    Visiblement getBackgrounds() te renvoie un tableau à 2 dimensions des codes de couleurs, d'où cette double boucle pour parcourir ce tableau. bg.length ne te renvoie que la longueur de la 1ère dimension du tableau, bg[0].length la seconde. Pour ton exemple 3 et 7 ou inversement
    Émotion
    Infantilisation
    Culpabilisation

    Christophe Alévèque - 18 Mars 2021

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 41
    Points : 17
    Points
    17
    Par défaut
    Bon j'ai maintenant à peu près tout compris.
    Je trouve quand même que c'est bien compliqué, le Javascript. Le passage des paramètres dans une fonction est vraiment très compliqué, pour ne pas dire imbuvable : ce qu'on gagne en souplesse (une même fonction peut avoir un nombre variable de paramètres, une variable n'a de type qu'au moment où on l'utilise, les noms des paramètres qui ne servent à rien) on le perd en complexité ... Mais bon, je ne suis pas forcément impartial
    Merci pour l'aide apportée.
    Sine qua non : un traceur de courbes gratuit
    http://www.patrice-rabiller.fr/SineQuaNon/menusqn.htm
    Patrice Rabiller

  7. #7
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    une variable n'a de type qu'au moment où on l'utilise
    Pas vraiment, les variables ont un type déterminé par l'affectation (donc une nouvelle affectation peut changer le type), mais avec les langages à typage faible, un transtypage de la valeur de la variable peut se produire en fonction du contexte (de l'opérateur qui l'utilise), par contre le type de la variable reste le même; il faut juste devenir familier avec ces mécanismes. Par exemple: 1+'a' renverra la chaîne '1a', 2*'3' donnera 6, 'toto'*1 donnera NaN et ![] (négation d'un tableau vide ou pas) renverra false.

    les noms des paramètres qui ne servent à rien
    Là, je ne vois pas à quoi tu fais allusion.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 41
    Points : 17
    Points
    17
    Par défaut
    Là, je ne vois pas à quoi tu fais allusion.
    Les paramètres "plage" et "couleur" qui figurent dans la première ligne de la fonction (ligne de déclaration), ne sont jamais utilisés ensuite dans le code. J'ai essayé de les supprimer ... et la fonction marche exactement de la même façon !
    C'est ce qui me faisait dire que les variables passées en paramètre ne servent à rien. J'aurais dû dire "ne sont pas définies".
    Dans les langages que je connais un peu mieux, lors de l'appel de la fonction SommeCouleurs(A1:C7;A9), les valeurs A1:C7 et A9 sont transmises dans les variables locales "plage" et "couleur".

    Par exemple, en VBA, on déclarerait la fonction comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function SommeCouleurs(var plage as range, var couleur as range) as double
    Sine qua non : un traceur de courbes gratuit
    http://www.patrice-rabiller.fr/SineQuaNon/menusqn.htm
    Patrice Rabiller

  9. #9
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Donc c'est plus une remarque sur le code auquel tu as été confronté (qui visiblement est soit pas fini, soit pas nettoyé), que sur le javascript.

    Je pense que l'idée de départ était de pouvoir utiliser la fonction avec ou sans paramètres. Quelque chose comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    function SommeCouleurs(plage, couleur) {
        const activeRange = SpreadsheetApp.getActiveRange(),
              activeSheet = activeRange.getSheet(),
              formule = activeRange.getFormula();
     
        const plage = plage || formule.match(/\(([^;]*);/)[1],
              range = activeSheet.getRange(plage),
              backgrounds = range.getBackgrounds(),
              values = range.getValues();
     
        const couleur = couleur || formule.match(/;(.*)\)/)[1],
              backgroundColor = activeSheet.getRange(couleur)
                                           .getBackground();
     
        let total = 0;
     
        for (let i = 0, imax = background.length; i < imax; i++) {
            for (let j = 0, jmax = background[0].length; j < jmax; j++) {
                if ( background[i][j] == backgroundColor )
                    total += parseFloat(values[i][j]);
            }
        }
     
        return total;
    }
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 41
    Points : 17
    Points
    17
    Par défaut
    Ton code est en effet un peu plus simple : on n'a pas besoin d'utiliser pop(), mais on récupère directement le 2e élément (de rang 1) du tableau formule.match(...). Cependant, la syntaxe de la méthode match est quand même absconse.
    De même la fonction parseFloat pour forcer le typage en un nombre, me paraît plus logique que la multiplication par 1.

    Par contre, en examinant pas à pas le déroulement de ma fonction, je vois que les variables plage et couleur restent indéfinies tout au long du parcours, donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    plage = plage || formule.match(/\(([^;]*);/)[1]
    va donner quoi comme résultat si l'un des opérandes du "ou" est "undefined" ?

    Par ailleurs, getFormula() n'est pas une méthode de l'objet sheet (donc activeSheet.getFormula() ne marche pas) mais c'est une méthode de l'objet range, mais c'est un détail. Il faut écrire activeSheet.getActiveRange().getFormula().

    Merci pour toutes tes explications.
    Sine qua non : un traceur de courbes gratuit
    http://www.patrice-rabiller.fr/SineQuaNon/menusqn.htm
    Patrice Rabiller

  11. #11
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    1 616
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 616
    Points : 3 965
    Points
    3 965
    Par défaut
    ce 2e élément de rang 1 ne devrait-il pas plutôt être le premier, de rang 0 ?
    vu que la recherche n'est pas globale (absence du flag g), tu peux utiliser exec à la place de match

    si la première opérande est undefined, alors il passera à la 2e, sinon ce sera forcément la 1ère, donc priorité au paramètre passé à la fonction

    c'est l'évaluation en court-circuit : https://developer.mozilla.org/fr/doc..._court-circuit
    Émotion
    Infantilisation
    Culpabilisation

    Christophe Alévèque - 18 Mars 2021

  12. #12
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    ce 2e élément de rang 1 ne devrait-il pas plutôt être le premier, de rang 0 ?
    Non, parce qu'on veut juste récupérer le contenu du groupe de capture qui est à l'index 1 mais pas toute la correspondance qui est en 0.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 41
    Points : 17
    Points
    17
    Par défaut
    priorité au paramètre passé à la fonction
    Il y a quelque chose que je ne comprends pas dans le fonctionnement de javascript pour google sheets. Pourquoi ne peut-on pas utiliser directement les paramètres passés à la fonction comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    function SommeCouleurs(plage, couleur) {
        const activeSheet = SpreadsheetApp.getActiveRange()
                                          .getSheet(),
              formule = activeSheet.getActiveRange().getFormula();   //cette ligne deviendrait inutile
     
        const range = activeSheet.getRange(plage),
              backgrounds = range.getBackgrounds(),
              values = range.getValues();
     
        const backgroundColor = activeSheet.getRange(couleur)
                                           .getBackground();
     
        let total = 0;
     
        for (let i = 0, imax = background.length; i < imax; i++) {
            for (let j = 0, jmax = background[0].length; j < jmax; j++) {
                if ( background[i][j] == backgroundColor )
                    total += parseFloat(values[i][j]);
            }
        }
     
        return total;
    }
    Ça ne marche pas car "plage" et "couleur", passés en paramètres, sont undefined. Pourtant, la formule écrite dans la cellule C9 est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SommeCouleurs(A1:C7;A9)
    .
    Pour moi, d'habitude (avec VBA notamment), le premier élément (A1:C7) est passé dans la fonction SommeCouleurs et est affecté à la variable "plage" et le second élément (A9) est affecté à la variable couleur. Qu'est-ce qui m'échappe ?
    Sine qua non : un traceur de courbes gratuit
    http://www.patrice-rabiller.fr/SineQuaNon/menusqn.htm
    Patrice Rabiller

  14. #14
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    plage = plage || formule.match(/\(([^;]*);/)[1]
    Si plage est défini (donc passer en paramètre à la fonction), il reste inchangé. Par contre si plage est undefined alors le résultat du match lui est affecté.



    Citation Envoyé par Patrice Rabiller
    Par ailleurs, getFormula() n'est pas une méthode de l'objet sheet ...
    Exact, j'ai cru qu'on pouvait se passer de la variable activeRange mais j'ai lu trop vite, c'est corrigé.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  15. #15
    Membre actif
    Inscrit en
    Août 2006
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 191
    Points : 263
    Points
    263
    Par défaut
    Salut,

    Je dirais que le bout de code trouvé est en cours de développement et donc incomplet et donc pas adapté à tes besoins.

    Je te propose donc plutôt de nous décrire tes besoins et nous te guiderons dans la réalisations de ton script.

    Mais si tu veux rapidement comprendre.

    1) aucune raison de les laissé là. le code n'est pas optimisé.
    2) en gros on prend une formule on en extrait tous les blocs entre une parenthèse et un point virgule et on garde la dernière occurrence trouvé. (EX: "DEBUT(1;(2;(3;(4;(5;(6;);FIN" le tableau d élément retournera ceci
    1 => "(1;(2;(3;(4;(5;(6;);" La chaine correspondant à l'intégralité de la regexp
    2 => "1;(2;(3;(4;(5;(6;)" La valeur correspondant à la capture (si tu as besoin d'explication sur la regexp n hésite pas à demander )

    la fonction retournera "1;(2;(3;(4;(5;(6;)"

    3) tu as entièrement raison, ça ne sert a rien (Sans doute la même explication que la première question)

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 41
    Points : 17
    Points
    17
    Par défaut
    Merci Showie

    Au bout de quelque jours, je me suis aperçu que je n'avais peut-être pas posé ma question dans le bon forum. Je l'avais donc reposée dans le sous-forum API Google car il s'agit d'une question concernant Google Apps Script qui est un sur ensemble de javascript adapté aux applications Google (notamment Google Maps, Google Sheets, Google Docs). Dans ce sous-forum, j'ai eu plusieurs réponses qui m'ont permis de comprendre presque tout. Il n'y a qu'une seule chose que je n'ai pas compris :

    Mon but était de mettre dans la cellule C9 du tableur la formule suivante : =CompteCouleurs(A1:C7;A9) où le décompte se ferait sur la plage A1:C7 et la couleur de référence serait la couleur de fond de la cellule A9. Naïvement, j'avais pensé qu'en invoquant cette formule (avec le code que j'avais trouvé), je pourrais obtenir un résultat plus simplement. Malheureusement, en examinant le debugger de Google Sheets, j'ai vu que les 2 plages A1:C7 et A9 n'étaient pas transmises dans les variables plage et couleur indiquées dans la définition de la fonction : ces variables restent "undefined" tout au long de l'exécution. C'est la raison pour laquelle on ne retrouve pas ces variables dans le code et que celui-ci les recalcule avec l'utilisation de la méthode "match" appliquée à la chaîne de caractères "formule" (correspondant à la formule récupérée dans la cellule active). Mon incompréhension vient évidemment du fait que je suis novice en javascript en ce qui concerne la transmission de valeurs aux paramètres d'une fonction. Quand j'utilisais Excel, j'étais beaucoup plus à l'aise avec le langage VBA pour lequel je retrouvais mes automatisme habituels (variables typées avant d'être affectées, transmissions des paramètres par valeur ou par variable ...)

    Encore merci pour tes explications sur les expressions régulières, mais ça, on me l'avait bien expliqué dans l'autre forum
    Sine qua non : un traceur de courbes gratuit
    http://www.patrice-rabiller.fr/SineQuaNon/menusqn.htm
    Patrice Rabiller

  17. #17
    Candidat au Club
    Homme Profil pro
    Photographe
    Inscrit en
    Novembre 2020
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Photographe
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2020
    Messages : 1
    Points : 3
    Points
    3
    Par défaut
    Bonjour Patrice,

    je suis à la recherche du même script que vous pour compter les couleurs dans le tableur Google Doc, j' ai trouvé multiple script sur le web mais aucun ne fonctionne, avez-vous trouvé une solution?

    Cordialement.

    Phil

    Citation Envoyé par Showie Voir le message
    Salut,

    Je dirais que le bout de code trouvé est en cours de développement et donc incomplet et donc pas adapté à tes besoins.

    Je te propose donc plutôt de nous décrire tes besoins et nous te guiderons dans la réalisations de ton script.
    "bonjour
    je suis à la recherche de ce script, je ne suis pas Dev, mais un photographe qui a besoin de cette fonction pour faire un tableau de suivi de shoot.
    Pouvez vous m'aider.
    Merci


    Mais si tu veux rapidement comprendre.

    1) aucune raison de les laissé là. le code n'est pas optimisé.
    2) en gros on prend une formule on en extrait tous les blocs entre une parenthèse et un point virgule et on garde la dernière occurrence trouvé. (EX: "DEBUT(1;(2;(3;(4;(5;(6;);FIN" le tableau d élément retournera ceci
    1 => "(1;(2;(3;(4;(5;(6;);" La chaine correspondant à l'intégralité de la regexp
    2 => "1;(2;(3;(4;(5;(6;)" La valeur correspondant à la capture (si tu as besoin d'explication sur la regexp n hésite pas à demander )

    la fonction retournera "1;(2;(3;(4;(5;(6;)"

    3) tu as entièrement raison, ça ne sert a rien (Sans doute la même explication que la première question)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 05/05/2020, 03h16
  2. [XL-2010] Formule "Match" pour creer une matrice de couverture
    Par tofoo dans le forum Excel
    Réponses: 4
    Dernier message: 26/07/2017, 10h50
  3. [Toutes versions] Problème avec Formule MATCH/EQUIV multicritères
    Par joel.drigo dans le forum Excel
    Réponses: 2
    Dernier message: 30/12/2016, 19h21
  4. [XL-2010] Formule "Match" (Equiv)
    Par toftaf dans le forum Excel
    Réponses: 3
    Dernier message: 03/08/2011, 11h01
  5. Signification ="";""; dans formule Excel
    Par vérokit dans le forum Excel
    Réponses: 4
    Dernier message: 04/02/2008, 12h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo