Apps Script condition multiples (résolu)

gaston gaston
1 618 contributions
Membre depuis le 01/03/2001
Envoyé le 14/11/2023 à 00:42 Modifié par gaston


Bonjour,

Dans un onglet de Google Sheets, j'ai fait un formulaire, avec une liste déroulante à deux choix: A et B
Chaque choix fait apparaître chacun 2 cases à cocher (avec un format conditionnel)
Pour A , on aura les choix 1a et 2a
Pour B, on aura les choix 1b et 2b

Pour faire fonctionner ce formulaire, et faire mes enregistrements, j'ai fait une macro.
Comme on peut s'en douter, chaque choix différent donne une variation de la macro, mais ça ce n'est pas un problème.

Par contre, aussi bien pour A que pour B, on ne doit cocher qu'une seule des 2 cases, et donc si deux cases sont cochées ou si aucune n'est coché, ce n'est pas bon.
J'aurais pu utiliser une macro pour faire en sorte qu'on ne puisse cocher qu'une seule case à la fois, mais elle est assez longue à agir, et donc, j'ai préféré mettre des conditions if et else if, comme ceci:


if (FType.getValue() == "A")
{
if (1A == true && 2A == true)
{
Browser.msgBox('Vous ne devez cocher qu\'une seule case !')
}
else if (1A == false && 2A == false)
{
Browser.msgBox('Vous devez cocher une case ! (et une seule)')
}
else if (1A == true)
{
instructions
}
else if (2A == true)
{
instructions
}
}
else // (donc si FType.getValue() == "B")
{
if
{
Browser.msgBox('Vous ne devez cocher qu\'une seule case !')
}
else if (1B == false && 2B == false)
{
Browser.msgBox('Vous devez cocher une case ! (et une seule)')
}
else if (1B == true)
{
instructions
}
else if (2B == true)
{
instructions
}
instruction finales
}

le petit souci que je rencontre, d'abord, c'est que je trouve que ça fait beaucoup de if et je m'y perd vite, et ensuite tel que c'est là, si par exemple 2 cases sont cochées au lieu d'une, ça me met bien le message voulu, mais après clic sur ok, la macro continue à se dérouler ensuite jusqu'au bout et ne revient pas au formulaire (ce n'est pas prévu dans ma macro, qui va ouvrir une feuille de liste afin de vérifier la saisie). bref, ce n'est pas pratique, surtout si en plus j'active une macro d'effacement de formulaire à la fin !

Alors, dans mes souvenirs de php, il me semble que j'utilisais des switch case dans le cas de conditions multiples, du genre:

switch(expression) {
case 1:
instructions
break;
case 2:
instructions
case 3:
instructions
break;
default:
instructions
}


mais je ne vois pas bien la syntaxe pour l'adapter à mon cas et je n'ai pas trouvé de doc qui m'aide vraiment... [:o]
carpe diem

Répondre à ce message

Bipbipcoyote Bipbipcoyote
4 287 contributions
Membre depuis le 06/03/2001
Envoyé le 14/11/2023 à 14:32 Modifié par Bipbipcoyote


Bonjour,
un petit exemple, en concaténant le résultat dans l'expression
je n'ai pas placé tous les cas
On admet que les listes déroulantes sont dans les cellules C3, D3 sans utiliser de cases à cocher, sinon tu vas devoir chipoter avec des true et des false
Dans les listes déroulantes :
En C3... A1, A2
En D3...B1, B2

function myFunction() {
// référence https://www.youtube.com/watch?v=0H-11VdilM0
var app = SpreadsheetApp; // Objet Application
var classeur = app.getActiveSpreadsheet(); // le classeur en cours d'utilisation, attention aux parenthèse:
var feuille_source = classeur.getSheetByName('Source'); // attention aux majuscules
// var feuille_cible = classeur.getSheetByName('Cible');
var cellule_C3 = feuille_source.getRange(3,3).getValue();
var cellule_D3 = feuille_source.getRange(3,4).getValue();

switch(cellule_C3+cellule_D3){

case ('B1'):
Logger.log ('Vous avez sélectionné uniquement B1')
break;
case ('A2'):
Logger.log ('Vous avez sélectionné uniquement A2')
break;
case ('A1B1'):
Logger.log ('Vous avez sélectionné les valeurs 1')
break;
case ('A1B2'):
Logger.log ('Vous avez sélectionné les valeurs 1 et 2')
break;
// ....... etc

case(''): // si rien n'est sélectionné
Logger.log('Vous n\'avez rien sélectionné');
}


}
Visitez mon Site Google est mon ami, il répond mieux que moi, posez lui d'abord vos questions
Bipbipcoyote Bipbipcoyote
4 287 contributions
Membre depuis le 06/03/2001
Envoyé le 14/11/2023 à 15:00


Bonjour,
Pareil avec tous les cas et un bouton sur la feuille pour lancer l'exécution
function myFunction() {
// référence https://www.youtube.com/watch?v=0H-11VdilM0
var app = SpreadsheetApp; // Objet Application
var classeur = app.getActiveSpreadsheet(); // le classeur en cours d'utilisation, attention aux parenthèses
var feuille_source = classeur.getSheetByName('Source'); // attention aux majuscules
// var feuille_cible = classeur.getSheetByName('Cible');
var cellule_C3 = feuille_source.getRange(3,3).getValue();
var cellule_D3 = feuille_source.getRange(3,4).getValue();

switch(cellule_C3+cellule_D3){
case ('A1'):
Browser.msgBox('Vous avez sélectionné uniquement A1')
break;
case ('A2'):
Browser.msgBox('Vous avez sélectionné uniquement A2')
break;
case ('B1'):
Browser.msgBox('Vous avez sélectionné uniquement B1')
break;
case ('B2'):
Browser.msgBox('Vous avez sélectionné uniquement B2')
break;
case ('A1B1'):
Browser.msgBox('Vous avez sélectionné les valeurs A1B1')
break;
case ('A1B2'):
Browser.msgBox('Vous avez sélectionné les valeurs A1B2')
break;
case ('A2B1'):
Browser.msgBox('Vous avez sélectionné les valeurs A2B1')
break;
case ('A2B2'):
Browser.msgBox('Vous avez sélectionné les valeurs A2B2')
break;
case(''):
Browser.msgBox('Vous n\'avez rien sélectionné');
}
}
Visitez mon Site Google est mon ami, il répond mieux que moi, posez lui d'abord vos questions
gaston gaston
1 618 contributions
Membre depuis le 01/03/2001
Envoyé le 15/11/2023 à 10:25


Bonjour,
Super (+) Merci

J'ai réalisé en te lisant, qu'au lieu de mettre une liste déroulante à deux choix qui fait apparaître pour chacune, deux cases à cocher, ce sera beaucoup plus simple si je mets directement 4 choix dans une liste déroulante !!!
Mais j'ai, alors utilisé les switch et case pour les quatre variations possibles de la macro:

switch(celluleD3)
{
case ="choix1":
Code 1
break;
case ="choix2":
Code2
break;
case ="choix3":
Code3
break;
case ="choix4":
Code4
break;
}

Ça fonctionne impec, et en plus je gagne quelques secondes.
Encore merci pour ton aide précieuse (+)


carpe diem

Participer à cette discussion

« Retour sur la liste des messages de ce forum