Dupliquer valeur d'une cellule (Une formule) a chaque nouvelle Ligne

Bonjour à tous,

après 2/3 jours de recherches, je me tourne vers vous en espérant que vous puissiez m'éclairer un peu.

Je suis en train de créer une application via l'outils Glide, un outils qui permets de créer une application via google sheet (Le futur!).

Sur l'application, je rajoute des établissements(avec Adresse, Nom, Horaires, etc), à chaque nouvelle établissement, cela rajoute une ligne dans mon fichier gsheet.

Avec ces informations, j'ai une cellule qui exécute une fonction, (Sur la même ligne que l'établissement). Je voudrais qu'a chaque nouvel ajout d'établissement (Donc une ligne en +), la formule s'applique sur la cellule en question de cette nouvelle ligne.

Pour info, je ne peux pas juste étirer cette cellule sur 1000 lignes car sinon (ce qui marche en soit),car quand je rajouterais un nouvel établissement depuis l'application, il me le rajoutera à la prochaine ligne vide, donc la 1001ene.

j'ai cherché un peu partout, je ne suis pas du tout familier avec les macros et fonction, donc ca se trouve on doit pouvoir faire cela ultra facilement.

Merci d'avance pour votre aide ! :)

Thomas

Bonjour, et bienvenue,

Quelle est ta formule aujourd'hui ?

Il faut l'encadrer avec ARRAYFORMULA, mais avec certaines précautions parfois. En ajoutant en plus une condition d'existence de donnée, on évite les erreurs. Il n'est pas toujours indispensable de spécifier la dernière ligne.

https://support.google.com/docs/answer/3093275?hl=fr

Salut !

merci beaucoup,

Alors j'ai 2 requêtes, mais je souhaite le même fonctionnement pour les 2 :

Place_id :

image

Une fois que j'ai mon place_id, je lance la fonction suivante :

OpenNow

image

Le but étant :

- Depuis mon app, je mets l'adresse et le nom du lieu

- Ca me rajoute une ligne dans mon fichier

- Je concat le nom et l'adresse

- Je fais ma premiere fonction

- Je recup le place_ID

- Je fais ma deuxieme fonction

Mais faut que ces 2 fonctions se fassent uniquement quand une ligne est rajoutée !

Merci pour ton aide :)

image

je e sais pas si cela peut fonctionner dans ton cas, essaie ceci en U2 en effaçant toutes les valeurs en dessous

=arrayformula(if(T2:T="";;importapi(________________&T2:T)))

Salut !

merci pour ta réponse,

Cela me genere une erreur :

image image

Mais par contre cela me rajoute bien la formule quand je rajoute une ligne !

Cordialement,

Thomas

Le principe de ARRAYFORMULA est bien celui-là : de propager une formule jusqu'au bout. Mais je craignais effectivement que cele ne puiss pas fnctionner avec ta formule ! Donc je n'ai pas la solution ... sauf si quelqu'un d'autre avait une idée.

Néanmoins, on pourrait peut-être générer par un script les formules pour toute nouvelle adresse :

  1. soit les adresses sont mises manuellement dans le fichier > dans ce cas, une fonction onEdit(e) ferait l'affaire
  2. soit les adresses sont importées, dans ce cas, on pourrait compléter le menu de ta feuille pour effectuer ce complément, mais bon c'est presque aussi simple de tirer la formule dans ce cas
  3. dernière solution : que ton application n'ajoute pas au-delà de la dernière ligne, mais au-delà de la dernière valeur trouvée en colonne T, par exemple en utilisant un script de ce type :
    function getLastDataRow(sheet) {
      var lastRow = sheet.getLastRow();
      var range = sheet.getRange("T" + lastRow);
      if (range.getValue() !== "") {
        return lastRow;
      } else {
        return range.getNextDataCell(SpreadsheetApp.Direction.UP).getRow();
      }              
    }

Yes, bien compris

Alors sur ces 3 options :

1 : C'est l'application qui les rajoutes, mais pour Gsheet, c'est comme si elles étaient mises manuellement

2 : Pas applicable, ce n'est pas importé

3 : L'outils que j'utilise ne permets pas de faire ça :(

Je me disais bien qu'il fallait passer par un script, mais la, ca atteint mes limites :(

Alors après, peut etre que ma fonction est à revoir, elle permet de retirer des infos d'une requete API, j'utilise APICONNECTOR pour ça, mais peut être qu'il y a plus simple et que le ARRAYFORMULA fonctionnera !!

(Je n'en ai aucune idée x) )

merci en tout cas pour ton aide !!

Thomas

si c'est bien le cas

1 : C'est l'application qui les rajoutes, mais pour Gsheet, c'est comme si elles étaient mises manuellement

alors, essaie ceci

function onEdit(event){
  var f = event.source.getActiveSheet();
  var cel = event.source.getActiveRange();
  if (f.getName()=='Feuille 1' && cel.getColumn()==1){
    r = cel.getRow()
    f.getRange('U'+r).setFormula('=importapi(________________&T'+r)
  }
}

complète la formule par la tienne

mais j'ai un doute sur le déclenchement si l'action n'est pas réellement manuelle, donc si cela ne fonctionne pas, rentre une valeur à la main dans A

Hello,

du coup il se passe rien, mais j'ai juste crée un script avec ton code + ma fonction, dois-je faire autre chose ?

(Même si je rajoute des infos à la main, nada ! )

Re, j'ai du nouveau.

Je me suis amusé à rejouer avec le arrayformula et le if, ca me donne ça maintenant :

=arrayformula(if(B2:B="";;ImportAPI("place_id";"monurl?key=maclé"&T)))

Tu identifies un soucis dans ma formule ?

image

Avec arrayformula, tu dois mettre T2:T au bout (en supposant que ta formule soit en ligne 2), sinon elle ne trouve pas le paramètre en colonne T !

Hello,

du coup il se passe rien, mais j'ai juste crée un script avec ton code + ma fonction, dois-je faire autre chose ?

(Même si je rajoute des infos à la main, nada ! )

ça c'est pas normal ! si tu ajoutes en A une info, tu dois avoir en U quelque chose

quel est le nom de ta feuille ? il faut le mettre à la place de Feuille 1 (désolé j'aurais dû le mentionner)

essaie aussi cette version simplifiée et mets à la main une info en A après avoir mis le nom de ta feuille

function onEdit(event){
  var f = event.source.getActiveSheet();
  var cel = event.source.getActiveRange();
  if (f.getName()=='Feuille 1' && cel.getColumn()==1){
    r = cel.getRow()
    f.getRange('U'+r).setFormula('=A'+r)
  }
}

Avec arrayformula, tu dois mettre T2:T au bout (en supposant que ta formule soit en ligne 2), sinon elle ne trouve pas le paramètre en colonne T !

Alors, oui, mais du coup, j'ai une erreur en réponse, dans chaque ligne, il va me faire la requête pour chaque établissement, chelou non ?

Voilàa la formule :

=arrayformula(if(B2:B="";;ImportAPI("place_id";"monurl?key=macléAPI&input="&T2:T)))

Tout ça, dans la même cellule:

Request failed: Cannot find function split in object monurl?key=macléAPI&input=Barabaar, 4 bd des brotteaux Lyon 69006,monurl?key=macléAPI&input=Hopstore, 27 Rue de la Martinière Lyon 69001,monurl?key=macléAPI&input=Kelly's, 12 quai romain rolland Lyon 69005,monurl?key=macléAPI&input=Bieristan, 14 Rue Paul Lafargue Villeurbanne 69100,monurl?key=macléAPI&input=Volle Petrol, 2 Quai Victor Augagneur Lyon 69003,monurl?key=macléAPI&input=MRoc Part-Dieu, 86 Rue du Pensionnat Lyon 69003,monurl?key=macléAPI&input=Paddys Corner, 4 Rue de la Terrasse Lyon 69004,monurl?key=macléAPI&input=AFK Bar, 52 Rue de l'Université Lyon 69007,monurl?key=macléAPI&input=Ninkasi Guillotire, 2 Place Antonin Jutard Lyon 69003,monurl?key=macléAPI&input=L'Absinthe, 22 Rue de Flesselles Lyon 69001,monurl?key=macléAPI&input=Basement, 44 rue Salomon Reinach Lyon 69007,monurl?key=macléAPI&input=Wallace, 2 rue Octavio Mey Lyon 69005,monurl?key=macléAPI&input=Dam's Pub, 4 Pl. Sathonay Lyon 69001,monurl?key=macléAPI&input=,monurl?key=macléAPI&input=,monurl?key=macléAPI&input=,monurl?key=macléAPI&input=,monurl?key=macléAPI&input=,monurl?key=macléAPI&input=,monurl?key=macléAPI&input=,monurl?key=macléAPI&input=,monurl?key=macléAPI&input=,monurl?key=macléAPI&input=,monurl?key=macléAPI&input=,monurl?key=macléAPI&input=,monurl?key=macléAPI&input=,monurl?key=macléAPI&input=,monurl?key=macléAPI&input=,monurl?key=macléAPI&input=,monurl?key=macléAPI&input=,monurl?key=macléAPI&input=,monurl?key=macléAPI&input=,monurl?key=macléAPI&input=,monurl?key=macléAPI&input=,monurl?key=macléAPI&input=,monurl?key=macléAPI&input=,monurl?key=macléAPI&input=,monurl?key=macléAPI&input=,monurl?key=macléAPI&input=,monurl?key=macléAPI&input=,monurl?key=macléAPI&input=,monurl?key=macléAPI&input=,monurl?key=macléAPI&input=,monurl?key=macléAPI&input=,monurl?key=macléAPI&input=,monurl?key=macléAPI&input=,monurl?key=macléAPI&input=,monurl?key=macléAPI&input=.

Si jamais, je peux te donner accès à mon Gsheet, si tu veux y voir plus clair ?

Et oui, pour ton script simplifié cela fonctionne;

mais lorsque que je remets ton script d'avant :

function onEdit(event){
  var f = event.source.getActiveSheet();
  var cel = event.source.getActiveRange();
  if (f.getName()=='bar' && cel.getColumn()==1){
    r = cel.getRow()
    f.getRange('U'+r).setFormula('=ImportAPI("place_id";"monurl?key=macléapi&input=&T'+r)
  }
}

J'ai une erreur lorsque j'execute le script

13:14:55    Avis    Exécution démarrée
13:14:55    Erreur    
TypeError: Cannot read property 'source' of undefined
onEdit    @ NewPlaceAPI.gs:2

Et dans mon gsheet, il ne se passe rien quand j'ajoute une valeur en A

Si jamais, je peux te donner accès à mon Gsheet, si tu veux y voir plus clair ?

ben je pense que je ne pourrai pas le faire fonctionner car je n'ai pas API Connector add-on

J'ai une erreur lorsque j'execute le script

13:14:55    Avis    Exécution démarrée
13:14:55    Erreur    
TypeError: Cannot read property 'source' of undefined
onEdit    @ NewPlaceAPI.gs:2

Et dans mon gsheet, il ne se passe rien quand j'ajoute une valeur en A

L'erreur est dûe au fait que tu as lancé ce script à partir de l'éditeur de script ... cela ne fonctionne pas, il faut juste laisser les choses se faire naturellement à partir de la feuille.

Quand tu ajoutes en A une info manuellement, que vois-tu en U de la même ligne ?

Rien :(

image
function onEdit(event){
  var f = event.source.getActiveSheet();
  var cel = event.source.getActiveRange();
  if (f.getName()=='bar' && cel.getColumn()==1){
    r = cel.getRow()
    f.getRange('U'+r).setFormula('=ImportAPI("place_id";"monlien/json?key=macléapi&input=&T'+r)
  }
}

Autant pour moi, c'est un poil plus complexe avec les parenthèses !!

Essaie

f.getRange('U'+r).setFormula('=ImportAPI("place_id";"monurl?key=macléapi&input=&T'+r+')')

Salut !

Alors du coup le script fonctionne, mais il reste un soucis :

dans la cellule il y a ça : =IMPORTAPI("place_id";"monurl?key=maclé&input=T17)

au lieu de : =IMPORTAPI("place_id";"monurl?key=maclé&input=valeurdeT17)

est-ce normal ? :(

Exemple :

avec ton script :

image

Et en remplaçant =T2) par ="&T2) :

image

et du coup, si je modifie ton script pour rectifier ça :

f.getRange('U'+r).setFormula('=IMPORTAPI("place_id";"monurl/json?key=maclé&input='&T +r+')')

ca fonctionne !

je suis sur la bonne voie !!

Merci

je suis surpris, mais si cela fonctionne c'est parfait !

désolé, mais c'est difficile de mettre au point quand on ne peut pas jouer avec la vraie formule, j'avais essayé avec une formule bien plus simple qui était =A2^2

Rechercher des sujets similaires à "dupliquer valeur formule chaque nouvelle ligne"