[GScript] - Recherche d'une référence dans une Sheet depuis un SideBar (JS)
Bonjour à tous,
Le titre n'est sûrement pas le plus adéquat mais je ne savais pas vraiment comment le formuler simplement.
Pour commencer voici le lien du fichier en question :
https://docs.google.com/spreadsheets/d/1SEg4inHnL_qyfWitZTd_MWvQkKnollRF4i1yhaLNelE/edit?usp=sharing
Ce nouveau sujet survient à la suite d'un de mes précédents sujets :
https://forum.excel-pratique.com/sheets/liste-deroulante-dans-sidebar-163563
Aujourd'hui ma problématique est la suivante, lors de l'utilisation du Sidebar :
J'aimerais qu'après avoir rempli l'ensemble des champs libres (sinon message erreur),
je vérifie que l'information renseignée dans le champ "Référence du Projet :" ne soit pas déjà présente dans la colonne A de la sheet "Planning".
Sans quoi un message d'erreur viendrait s'afficher ("Attention projet déjà existant..") et me renvoi au Sidebar sans le fermer.
Si cela restait uniquement dans une macro, je saurais me débrouiller.
Mais vu que le Sidebar est en JavaScript, pour moi c'est une autre paire de manche.
J'espère vous avoir décris suffisamment ma problématique, si jamais n'hésitez pas à poser vos questions.
Merci du coup de main !
Bonjour,
entre JS et GS, il n'y a pas beaucoup de différences ... je te donne donc juste la marche à suivre :
code GS :
fais la liste des projets
function projets() {
var fData = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Planning")
return fData.getRange('A8:A'+fData.getLastRow()).getValues().join().split(',').filter(onlyUnique)
}
function onlyUnique(value, index, self) {
return self.indexOf(value) === index;
}code HTML :
ramène la liste unique des projets
<script>
<?
var data = importation();
var liste = projets();
?>
</script>et teste dans la fonction valider la présence du projet qui se trouve dans la liste
<?= liste ?>.split(',')Tu peux ajouter ceci en début de fonction valider
function ajouter() {
var donnees = document.forms[0]
<?= liste ?>.split(',').forEach(function(item){
if( donnees[0].value == item ){
alert('projet déjà présent !')
return
}
})
...Hola,
Merci pour toutes ces informations.
Je viens de rajouter les différentes lignes de code à la macro ainsi qu'au form avec le JS.
La recherche fonctionne, le message aussi, mais le return non
J'ai essayé différentes choses, mais je n'ai pas encore réussi à trouver la cause..
Une idée ?
J'imagine que ce n'est pas grand chose, mais pas moyen de trouver jusqu'à présent
La recherche fonctionne, le message aussi, mais le return non
J'ai essayé différentes choses, mais je n'ai pas encore réussi à trouver la cause..
- qu'est-ce qui ne fonctionne pas ?
- quel est le message d'erreur ?
- et est-ce que cela fonctionnait avant ce contrôle sur le projet ? car j'ai l'impression que cela n'a rien à voir ... (il faudrait dans ce cas retourner au post initial et demander à celui qui t'a aidé !)
- si cela fonctionnait avant , qu'est-ce qui a changé ?
edit : en tous cas, ceci fonctionne mais cela met toujours les données en ligne 3, je ne sais pas ce que tu veux faire en figeant derL
function ajouterLigne(tab) {
var derL = 3
var col = 8
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Data").getRange(derL, col, 1, tab.length).setValues([tab])
}donc le retour fonctionne ! répond au 4 questions ci-dessus
La recherche de la référence fonctionne.
Si elle existe, le message "Projet déjà existant !" s'affiche.
Néanmoins, lors de la validation de celui-ci, le Sidebar disparaît et les données sont ensuite exportées dans la Sheet "Data".
Ces informations me servent par la création d'un GANTT mais ça je m'en débrouille.
Mon soucis est que, j'aimerai que lorsque la macro détecte un projet déjà existant, le message s'affiche (jusque là c'est OK) et à la validation de celui-ci je retourne sur le Sidebar sans que celui ne supprime les informations déjà remplies.
C'est déjà le cas lors du check de l'ensemble des champs pour savoir s'ils contiennent une information. D'où mon évocation du "return", qui j'imagine permet cette fonction..
Effectivement ça n'a rien à voir, j'avais oublié de précisé cette fonction dans ma demande initiale.
Lo siento
Mon soucis est que, j'aimerai que lorsque la macro détecte un projet déjà existant, le message s'affiche (jusque là c'est OK) et à la validation de celui-ci je retourne sur le Sidebar sans que celui ne supprime les informations déjà remplies.
est-ce que ceci répond à ta question ?
<script>
function ajouter() {
var donnees = document.forms[0]
var drapeau = true
<?= liste ?>.split(',').forEach(function(item){
if( donnees[0].value == item ){
alert('Projet déjà présent !')
drapeau = false
}
})
if (drapeau == true) {
var tab = []
for (var i=0;i<donnees.length;i++){
if (donnees[i].type != "button"){tab.push(donnees[i].value)}
if (donnees[i].value ==''){
alert('Il manque une information !');
return;
}
}
if (tab.join('') == '') {
alert('Le formulaire est vide !');
return;
}
google.script.run.ajouterLigne(tab);
document.forms[0].reset()
// Fermeture de la boîte de dialogue
google.script.host.close();
}
}
</script>C'est effectivement ce que je recherchais.
Merci à vous deux