Créer une ligne supplémentaire après choix dans un liste déroulante

Bonjour,

Je souhaiterais créer une ligne automatiquement dans un onglet donné après avoir sélectionné dans la liste déroulante d'un autre onglet un mot bien précis.

Est-ce que vous sauriez m'aider pour réaliser cette fonction?

Merci d'avance

Bonjour,

à adapter ...

function onEdit(event){ 
  var f = event.source.getActiveSheet();
  var r = event.source.getActiveRange();
  var f1 = "XXXXXXXXXXXXX";
  var f2 = "YYYYYYYYYYYYY";
  var col= 26; // colonne Z par exemple
  if (r.getColumn() == col && f.getName() == f1){ 
    if(r.getValue() == 'Terminé'){ 
      var destination = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(f2);
      destination.insertRowBefore(2);
      var plage = f.getRange('A' + r.getRow() + ':Z' +  r.getRow()); 
      plage.copyTo(destination.getRange('A2'), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);  
    }
  } 
}

ici, quand quelqu'un porte la mention Terminé en colonne 26 (Z), les données A à Z sont recopiées de la feuille XXX à la feuille YYY

Merci pour ta réponse.

J'ai essayé d'adapter le script à mon fichier

function onEdit(event){ 
  var f = event.source.getActiveSheet();
  var r = event.source.getActiveRange();
  var f1 = "BtoC_FR";
  var f2 = "Réinscription";
  var col= 1; // colonne Z par exemple
  if (r.getColumn() == col && f.getName() == f1){ 
    if(r.getValue() == 'gagné'){ 
      var destination = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(f2);
      destination.insertRowBefore(2);
      var plage = f.getRange('D' + r.getRow() + ':G' +  r.getRow()); 
      plage.copyTo(destination.getRange('A2'), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);  
    }
  } 
}

Je souhaite copier les informations des colonnes D à G de la feuille BtoC_Fr vers la feuille Réinscription lorsque je sélectionne "gagné" dans la liste déroulante de la colonne B de la feuille BtoC_FR.

Est-ce que ça te semble bon comme adaptation?

plutôt

var col= 2 // colonne B

et elles seront collées à partir de la colonne A de la feuille de destination, sinon il faut que tu changes

plage.copyTo(destination.getRange('A2'), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);

à tester néanmoins, as-tu des formules entre D et G ?

D'accord. Je croyais que la première colonne était numérotée 0

Fantastique. Ca marche. Merci beaucoup une fois de plus.

Remarque pertinente du reste ! Les arrays en javascript commencent à 0, les feuilles commencent à 1. Mais en effet, c'est déroutant !

Il reste un petit détail à régler. En fait, c'est quand je modifie le formulaire que l'état passe à "gagné". Je ne le fais plus directement dans la feuille BtoC_FR.

Il faudrait donc que la ligne soit créée dans la feuille réinscription au moment où je valide la mofication dans le formulaire pour passer l'état à "gagné".

Je pensais que le changement dans le formulaire qui modifie la feuille BtoC_FR serait considéré comme un évènement et donc serait pris en compte par le script mais ce n'est pas le cas.

Est-ce que tu saurais comment faire?

Non, c'est un événement manuel seul qui peut déclencher onEdit

Il faut donc juste le rajouter dans la fonction de récupération des données du formulaire ... je regarde demain, c'est a priori assez simple !

function modifierLigne(tab) {
  var ligne = numLigne()
  bdd.getRange(ligne,col,1,tab.length).setValues([tab])
  if (tab[0]=='gagné'){   
    Browser.msgBox('Ajout de ' + tab[3] + ' ' + tab[2] + ' en réinscription')
    var f=SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Réinscription')
    f.insertRowBefore(3)
    for (var i=2;i<=5;i++){
      f.getRange(3,i+2).setValue(tab[i])
    }
  }
}

C'est parfait. Ca marche.

Bravo!

Je mets ici une solution à ta demande en mp pour la partager ...

Si tu veux le n° de téléphone au format CH ou FR, voici les modifications :

1- crée un fichier tel.html par exemple

<script type="text/javascript">
function format(obj){
var pays = document.getElementById("indicatif").value;
var str=obj.value.replace(/-|\.| /g,'')
if (pays=="+33"){
switch(true){
 case (str.length<2) : break;
 case (str.length==2):
  tel=str.replace(/^(\d{1})(\d{1})$/,"$1 $2")
  obj.value=tel
  break;
 case (str.length==3):
  tel=str.replace(/^(\d{1})(\d{2})$/,"$1 $2")
  obj.value=tel
  break;
 case (str.length==4):
  tel=str.replace(/^(\d{1})(\d{2})(\d{1})$/,"$1 $2 $3")
  obj.value=tel
  break;
 case (str.length==5):
  tel=str.replace(/^(\d{1})(\d{2})(\d{2})$/,"$1 $2 $3")
  obj.value=tel
  break;
 case (str.length==6):
  tel=str.replace(/^(\d{1})(\d{2})(\d{2})(\d{1})$/,"$1 $2 $3 $4")
  obj.value=tel
  break;
 case (str.length==7):
  tel=str.replace(/^(\d{1})(\d{2})(\d{2})(\d{2})$/,"$1 $2 $3 $4")
  obj.value=tel
  break;
 case (str.length==8):
  tel=str.replace(/^(\d{1})(\d{2})(\d{2})(\d{2})(\d{1})$/,"$1 $2 $3 $4 $5")
  obj.value=tel
  break;
 case (str.length==9):
  tel=str.replace(/^(\d{1})(\d{2})(\d{2})(\d{2})(\d{2})$/,"$1 $2 $3 $4 $5")
  obj.value=tel
  break;
 case (str.length>9) :
  obj.value=str.substr(str.length-9,str.length).replace(/^(\d{1})(\d{2})(\d{2})(\d{2})(\d{2})$/,"$1 $2 $3 $4 $5")
  }
 }
if (pays=="+41"){
switch(true){
 case (str.length<2) : break;
 case (str.length==3):
  tel=str.replace(/^(\d{2})(\d{1})$/,"$1 $2")
  obj.value=tel
  break;
 case (str.length==4):
  tel=str.replace(/^(\d{2})(\d{2})$/,"$1 $2")
  obj.value=tel
  break;
 case (str.length==5):
  tel=str.replace(/^(\d{2})(\d{3})$/,"$1 $2")
  obj.value=tel
  break;
 case (str.length==6):
  tel=str.replace(/^(\d{2})(\d{3})(\d{1})$/,"$1 $2 $3")
  obj.value=tel
  break;
 case (str.length==7):
  tel=str.replace(/^(\d{2})(\d{3})(\d{2})$/,"$1 $2 $3")
  obj.value=tel
  break;
 case (str.length==8):
  tel=str.replace(/^(\d{2})(\d{3})(\d{2})(\d{1})$/,"$1 $2 $3 $4")
  obj.value=tel
  break;
 case (str.length==9):
  tel=str.replace(/^(\d{2})(\d{3})(\d{2})(\d{2})$/,"$1 $2 $3 $4")
  obj.value=tel
  break;
 case (str.length>9) :
  obj.value=str.substr(str.length-9,str.length).replace(/^(\d{2})(\d{3})(\d{2})(\d{2})$/,"$1 $2 $3 $4")
  }
 }
}
</script>

2- ajoute une colonne avant le n° de tel dans tes onglets pour y mettre l'indicatif

3- passe bien les colonnes tel et indicatif en format texte

4- ajoute cette instruction au niveau des inputs de téléphone

onkeyup="format(this)"

exemple en création

<input type="text" name="tel" value="" placeholder="Tel" onkeyup="format(this)">

5- ajoute l'importation du fichier tel.html dans les fichiers html création et modification

  <head>
    <?!= rapatrier('css') ?>
    <?!= rapatrier('tel') ?>
  </head>

6- modifie comme suit les fichiers html création et modification

    <select name="indicatif" id="indicatif">
          <option value="" disabled selected >indicatif ...</option>
      <option value="+33" >+33</option>
          <option value="+41" >+41</option>
    </select>
    <input type="text" name="tel" value="" placeholder="Tel" onkeyup="format(this)">

et

    <select name="indicatif" id="indicatif">
          <option value="" disabled selected >indicatif ...</option>
      <option value="+33" <?= ((data[0][2]=='+33')?'selected':'') ?> >+33</option>
          <option value="+41" <?= ((data[0][2]=='+41')?'selected':'') ?> >+41</option>
    </select>
    <input type="text" name="tel"    value="<?= data[0][3] ?>" placeholder="Tel" onkeyup="format(this)">

attention, la numérotation des data n'est sans doute pas la même que sur mon fichier

7- renumérote bien les data en tenant compte qu'il y a une zone supplémentaire

8- tiens en compte aussi au niveau des query

J'espère ne rien avoir oublié !

Bref, fais une copie de ton fichier avant de commencer ce chantier de modifications ...

Rechercher des sujets similaires à "creer ligne supplementaire choix liste deroulante"