Apps script mettre à jour un tableau en fonction d'un autre

Bonjour,

J'ai un tableau de ce genre, avec plusieurs lignes contenant un champ id et un champ date qui peut être vide
tableau1 = [[  1, b01, c01, d01 ],
            [  2, b02,    , d01 ],
            [  3, b03,    , d03 ],
            [  4, b04,    , d04 ],
            [  5, b05,    , d05 ],
            [  6, b06,    , d06 ],
            [  7, b07, c07, d07 ],
            [  8, b08,    , d08 ],
            [  9, b09,    , d09 ],
            [ 10, b10, c10, d10 ] ]

Et j'ai un autre tableau avec juste id et 1 autre colonne, et avec moins de lignes, mais donc, les lignes des 2 tableaux ont des id en commun :

tableau2 = [[2, X03],
            [3, X03],
            [6, X03],
            [9, X03] ]

J'aimerais pouvoir mettre à jour le tableau 1 avec les valeurs du tableau 2, et donc obtenir ceci:

tableau1 = [ [1, b01, c01, d01],
             [2, b02, X03, d01],
             [3, b03, X03, d03],
             [4, b04,    , d04],
             [5, b05,    , d05],
             [6, b06, X03,d06 ],
             [7, b07, c07, d07],
             [8, b08,    , d08],
             [9, b09, X03, d09],
            [10, b10, c10, d10] ]

Comment faire ?

J'ai bien essayé une boucle du style

for (li=0; li<nbLignesTableau1; i++)
 {
  If (tableau1[li][0] = tableau2[li][0])
   {
    tableau1[li][2] = tableau2[li][1]
   }
 }

Seulement bien sûr, ça me met une erreur parce que les de tableaux n'ont pas le même nombre de ligne, si bien que par exemple tableau2[5][0] n'existe pas et paf :
cannot read properties of undefined (reading '0')

Je précise que j'arrive à faire cela en ayant les tableaux chacun sur une feuille et en mettant à jour chaque cellule du tableau 1 à chaque itération de la boucle, ce qui fait beaucoup d'aller et venues , et donc cela prend du temps.

Je pensais gagner du temps en créant un nouveau tableau mis à jour dans le script et en faisant ensuite un setValues(nouveauTableau[2]) dans la colonne de ma feuille où se trouve le tableau1...

Bref je piétine...

Est-ce seulement possible ?

Bonsoir,

Une solution sans script.

https://docs.google.com/spreadsheets/d/1WHeVhKeVobQRLZT3qZlUfu4-F4P1qOjzi9rX2PzA6ts/edit?usp=sharing

Ajouter une colonne vide en G et la formule en J2 :

={query(A2:B11)\byrow($A$2:$A$11;lambda(n;SIERREUR(transpose(query(sort(vstack($A$2:$D$11;F$2:$H$11));"select Col3 where Col3 is not null and Col1= "&n&"  ")))))\query(D2:D11)}

Cordialement,

Fil.

merci pour la réponse

,je me colle cette solution derrière l'oreille, ça pourra sans doute me servir un jour (quand j'aurais compris exactement comment ça fonctionne, parce que là c'est un peu costaud pour moi : je ne suis pas un as des formules )

mais en fait j'ai besoin d'une solution qui se fasse avec Apps Script...et sans rajouter de colonne

Bonjour,

Je pense que tu peux t'aider de .map() ou .indexOf()

Bonjour,

Une solution :

for (let i = 0; i < tableau2.length; i++) {
  for (let j = 0; j < tableau1.length; j++) {
    if (tableau1[j][0] === tableau2[i][0]) {
      tableau1[j][2] = tableau2[i][1];
      break; 'Pour optimiser
    }
  }
}

Cordialement,

Merci !

le break, je suppose que c'est pour que la boucle ne continue pas quand toutes les valeurs de tableau2 ont été trouvées ?

maintenant que je lis ta solution, je me dis que c'était l'évidence même... c'est toujours comme ça quand on a la trop tête dans le guidon

le break, je suppose que c'est pour que la boucle ne continue pas quand toutes les valeurs de tableau2 ont été trouvées ?

C'est pour éviter de parcourir le tableau 1 lorsque la correspondance a été trouvée (exécuté pour chaque id trouvé de tableau 2)

Rechercher des sujets similaires à "apps script mettre jour tableau fonction"