[Script] Affiche sur une feuille des données en fonction d'un texte
Bonjour à tous, voici le principe que je souhaiterais établir sur ce Gdoc :
SI : Un joueur remplit dans l'onglet "COMMANDES JOUEURS" la colonne "CRAFTEUR" alors la ligne s'affiche dans la feuille qui porte le nom du crafteur ET si le crafteur clique sur la ligne "Commande terminé" alors cette ligne se retire de sa feuille.
Voici un exemple pour mieux comprendre :
Puisque j'ai rempli "SCAFFOU" dans la colonne CRAFTEUR, je souhaiterais que sur la page du joueur "SCAFFOU" apparaisse toute cette ligne comme suit :
Et donc, si "Scaffou" clique sur "Commande terminée" la ligne de la commande disparait
Est-ce possible ou est-ce trop technique ?
Bonne soirée à tous et merci à ceux qui pourront m'aider :)
EDIT : Voici le lien du fichier test : https://docs.google.com/spreadsheets/d/1ZzgKxkt5T2Pk04mPshPPSjqzd7vXf8EpbhQvLZAhziE/edit?usp=sharing
Bonjour,
Bonjour à tous,
Est-ce possible ou est-ce trop technique ?
Bonne soirée à tous et merci à ceux qui pourront m'aider :)
EDIT : Voici le lien du fichier test : https://docs.google.com/spreadsheets/d/1ZzgKxkt5T2Pk04mPshPPSjqzd7vXf8EpbhQvLZAhziE/edit?usp=sharing
ce n'est pas trop complexe, la difficulté vient plutôt de la mise en page ... du coup je te laisse la mise en page et je regarde le script dans la journée
- est-ce que le cartouche G16:S17 sera présent sur toutes les feuilles ?
- y a t'il une liste d'onglets de noms de façon à traiter l'aspect "commande terminée" ?
Bonjour, c'est super sympa !
1 : Le cartouche sera donc présent sur toutes les feuilles des joueurs en effet, pas sur les feuilles "généralistes"
2 : Je ne suis malheureusement pas sûr de savoir à quoi ça correspond, mais je serais tenté de te dire que non, sachant que la liste des feuilles (donc des joueurs) est exhaustive, je crée les fiches joueurs au fur et à mesure des arrivées. Mais je pense que pour gérer la "Commande terminée" le plus simple serait de faire quelque chose comme : "Si ma commande n'est pas terminée alors j'affiche la ligne correspondante de la feuille "COMMANDES JOUEURS" et si le crafteur coche la case "Commande terminée" alors je désaffiche et je la laisse que sur l'autre doc. Qu'en penses-tu ?
3 : J'ai donc modifié la mise en page sur la feuille "SCAFFOU" pour passer le cartouche en B30:J31 (La ligne en dessous étant juste une ligne exemple je ne la compte pas dans mon cartouche)
Je me suis dit que si le cartouche étant en dessous, ce serait moins pénible que s'il y avait d'autres infos sur la même ligne (qui elles sont fixes)
Bonne journée !
projet
var doc=SpreadsheetApp.getActiveSpreadsheet()
var origines = 'BFHIKLMNP'
var destinations = 'BCDEFGHIJ'
function membres() {
return doc.getSheetByName('LES RÔLES').getRange('B4:B'+doc.getSheetByName('LES RÔLES').getLastRow()).getValues().join().split(',')
}
function toProper(str) {
return str.replace(
/\w\S*/g,
function(txt) {
return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
}
);
}
function onEdit(event){
// onEdit s'active lors d'une modification
var feuille = event.source.getActiveSheet();
var cellule = event.source.getActiveRange();
// on teste ici la feuille concernée, la colonne de la cellule modifiée et on regarde si elle vaut VRAI (TRUE)
if (membres().indexOf(toProper(feuille.getName().toLowerCase()))!=-1 && cellule.getColumn()==10 && cellule.getValue()=='VRAI') {
feuille.deleteRow(cellule.getRow())
}
// on teste ici la feuille, la colonne et le nom du crafteur
if (feuille.getName()=='COMMANDES JOUEURS' && cellule.getColumn()==4 && cellule.getValue()!=''){
var dest = doc.getSheetByName(cellule.getValue().toUpperCase())
var depuis = origines.split('')
var vers = destinations.split('')
var ligne = dest.getLastRow()
dest.insertRowAfter(ligne)
ligne+=1
for (var i=0; i<vers.length; i++){
feuille.getRange(depuis[i]+cellule.getRow()).copyTo(dest.getRange(vers[i]+ligne))
}
}
}mais il y a un soucis ... je transfère les infos quand j'écris le nom du crafteur, mais si rien n'est inscrit encore dans les autres cases, la recopie se fait trop tôt
donc ce n'est pas quand j'écris le crafteur que je transfère mais quand ? quand toute la ligne est renseignée y compris le crafteur ?
Bonjour,
Désolé pour ma réponse un peu tardive ...
En effet, dans la logique il faut envoyer le tout une fois que tout est renseigné sinon le crafteur n'auras pas toute les infos nécessaire :/
Questions ...
1-
En effet, dans la logique il faut envoyer le tout une fois que tout est renseigné sinon le crafteur n'auras pas toute les infos nécessaire :/
TOUT c'est quoi ? car il est aussi indiqué
Si votre item est un stuff remplir cette partie
2-
Plutôt qu'un script, je pense alors qu'il faut passer par une formule de type query ... cela permet de gérer les modifications de crafteurs. Est-ce que commande terminée efface aussi la ligne dans l'onglet COMMANDES_JOUEURS ?
Pour reporter les données ... je te propose (voir onglet Scaffou)
en B1
le nom du crafteuren A32
=iferror(query({arrayformula(row(COMMANDES_JOUEURS!B5:B))\COMMANDES_JOUEURS!B5:Q};"select Col1,Col2,Col6,Col8,Col9, Col11,Col12,Col13,Col14 where Col4='"&B1&"' and Col16='FAUX' ";0);"Ø")et un script plus allégé
var doc=SpreadsheetApp.getActiveSpreadsheet()
function membres() {
return doc.getSheetByName('LES RÔLES').getRange('B4:B'+doc.getSheetByName('LES RÔLES').getLastRow()).getValues().join().split(',')
}
function toProper(str) {
return str.replace(
/\w\S*/g,
function(txt) {
return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
}
);
}
function onEdit(event){
// onEdit s'active lors d'une modification
var feuille = event.source.getActiveSheet();
var cellule = event.source.getActiveRange();
// on teste ici la feuille concernée, la colonne de la cellule modifiée et on regarde si elle vaut VRAI (TRUE)
if (membres().indexOf(toProper(feuille.getName().toLowerCase()))!=-1 && cellule.getColumn()==10 && cellule.getValue()=='VRAI') {
var chk = doc.getSheetByName('COMMANDES_JOUEURS').getRange('P'+feuille.getRange('A'+cellule.getRow()).getValue())
chk.setValue('VRAI')
cellule.setValue('FAUX')
}
}1 : En gros il faudrait reporter les cases suivantes : "Demandeur" | "Items demandés" | "Tiers de l'item" | "Quantité demandé" | "Gemme" | "Perk N°1" | "Perk N°2" | "Perk N°3" | "Commande terminée"
2 : Pour le coup je suppose que tu as raison ! Si tu penses que c'est préférable et mieux d'utiliser ça, je te fais confiance :)
Je viens donc de regarder ce que tu as fait sur le fichier test, c'est SUPER ! C'est exactement ce qu'il me fallait ! :o
Simple petite question, à quoi sert le numéro devant la ligne de la commande ? Le "Si Erreur"
SInon c'est super, merci beaucoup pour l'aide !
Simple petite question, à quoi sert le numéro devant la ligne de la commande ? Le "Si Erreur"
le sierreur va affiche un 0 barré (ensemble vide) q'il n'y a rien à afficher
le n° à reporter dans l'onglet des commandes sur la bonne ligne (il me fallait un repère) le fait que la commande soit soldée et qu'elle disparaisse de l'onglet du crafteur puisque j'ai ajouté dans la query and Col16='FAUX'
si tout est ok, tu peux solder le fil de discussion en cliquant sur
Merci pour les explications complémentaires et bonne journée à toi ! Encore merci :D