Récupération d'un numéro de colonne par un paramètre fonction en script

Bonjour ,

J'ai tente d'écrire une fonction qui prend deux paramètres comme tel : myfonctionCAL( myFreePara, myNumberCol).

J'aimerais passer en paramètre d'entrée le numéro de colonne via la variable "myNumberCol", mais à l'exécution du programme suivant j'ai une erreur qui me bloque

function myfonctionCAL( myFreePara,mynumberCol)
{
  const sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Hist");
  var data = sheet2.getRange(1,mynumberCol,sheet2.getLastRow(),1).getValues();

    }

le but est de collé cette fonction pour effectuer des calculs de manière indépendamment de position des données.

pouvez s'il vous plait m'aidez sur cette problématique.

merci d'avance;

Bonjour,

  • quelle est l'erreur ?
  • à quoi sert myFreePara ?
  • que fait la fonction (je vois juste qu'elle capte des données de la colonne mynumberCol mais sans rien en faire en retour

à quoi sert myFreePara ?

Bonjour,

quelle est l'erreur ?

capture d ecran 2022 06 03 a 07 13 04

à quoi sert myFreePara ?

Il sert d'indicateur de repérage du tableau de donnée constituée de 4 colonnes .

que fait la fonction (je vois juste qu'elle capte des données de la colonne mynumberCol mais sans rien en faire en retour

La fonction doit renvoyer un tableau de donnée suite à un calcul effectué en fonction de la valeur de "mynumberCol" . la fonction est collé dans plusieurs colonnes distincts d'une même page. J'ai mise à jour le programme mais reste des choses à rajouter. Je veux juste que le paramètre "mynumberCol"soit prise en compte au niveau du getRange.

function myfonctionCAL( myFreePara,mynumberCol)
{

  const start = new Date();
  const sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Hist");
  var data = sheet2.getRange(1,mynumberCol,sheet2.getLastRow(),1).getValues();
 var multip=0.3425363;
 var data_New=[0];
  for (let j=0;j<data.length-3;j++) 
    {
      if(myFreePara=="Pomme" || myFreePara=="Fraise")
      { 
        console.log(data[j]);
        data_New[j] =data[j]*multip;
      }
    }
  const current = new Date();
  const elapsedTime = current.getTime() - start.getTime();
  console.log("Il a fallu "+elapsedTime+" ms pour lire les valeurs de la première colonne");

return (data_New);
}

Merci d'avance

quelle est l'erreur ?

capture d ecran 2022 06 03 a 07 13 04

donc

SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Hist");

n'existe pas ! vérifie le nom exact de ta feuille, majuscules/minuscules/espace final ?

bonjour

J'ai cette nouvelle erreur lors de la compilation :

capture d ecran 2022 06 03 a 12 40 56

C'est à cause du parametre " mynumberCol",je ne comprends pas pourquoi cela ne marche pa

SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Hist");

n'existe pas ! vérifie le nom exact de ta feuille, majuscules/minuscules/espace final ?

j'ai bien vérifié le nom du fichier.

le mieux est de partager ton fichier, ou a minima une version représentative de l'erreur

mais effectivement le paramètre mynumberCol est null

Bonjour,

J'ai réussi à résoudre le problème en faisant une initialisation de mon paramètre mynumberCol , maintenant le programme s'exécute sans erreur.

J'ai une nouvelle question :

Dans mon programme, j'ai une boucle qui prend la longueur de data avec data.length pour la condition de fin, mais il prend la valeur de la colonne la plus longue du sheet ou la longueur de la première colonne.

J'aimerais savoir s'il existe une manière pour fité en fonction de la longueur de la colonne où sont les données?

exemple colonne A à une longueur de 20

exemple colonne D à une longueur de 15

exemple colonne G à une longueur de 10

exemple colonne J à une longueur de 20

si je place ma fonction en B, les données calculées à partie de la colonne A font une longueur de 20, c'est normal.

si je place ma fonction en E, les données calculées à partie de la colonne D font une longueur de 20, c'est pas normal, on devrait avoir une longueur de donnée de 15

Je croyais en ayant l'information du numéro de la colonne qui contient les données , j'aurai pu ajuster la condition de fin de la boucle à partir de sa longueur.

Comment puisse-je récupérer la longueur dans la colonne active dans mon script?

Il y a plusieurs façons de le faire, cla dépend aussi de l'environnement du script.

Exemple, en partant de la cellule B1, on peut faire à condition qu'il n'y ait pas de blanc dans la colonne B jusqu'à la dernière valeur

var longueur = mafeuille.Range('B:B').getValues().filter(r => r[0] != '').length

sinon, on peut aussi partir du bas et remonter jusqu'à trouver une donnée ne colonne B pour mon exemple

var derniereLigne = mafeuille.getRange('B'+mafeuille.getMaxRows()).getNextDataCell(SpreadsheetApp.Direction.UP).getRow()

Bonjour,

Avec la formule envoyée, puis-je automatiser lorsque je colle ma fonction au niveau des colonnes?

je souhaite récupérer automatiquement la longueur de la colonne.

Si j'ai 20 colonnes, je dois pouvoir faire le calcul sur la plage correspondant à chaque colonne de donnée.

C'est possible?

Je n'ai pas bien compris ce que tu veux. Cela mériterait que tu partages un fichier.

Tu peux mettre en ligne 1 une formule de type

=COUNTIF(A2:A,"<>")

que tu tires à droite, qui est une méthode que je n'avais pas citée ci-dessus

image
Rechercher des sujets similaires à "recuperation numero colonne parametre fonction script"