Boîte à boutons à bascule ou quelque chose de similaireBonjour la communauté JMP,
J'essaie de mettre en place une fenêtre dans laquelle les utilisateurs peuvent sélectionner différents mois, trimestres ou l'ensemble de l'année en cours, qui fournit également des informations sur les cases à boutons qui ont été sélectionnées (ou même désélectionnées). Mon intention est d'utiliser la sélection mois/trimestre/YTD comme moyen de créer un sous-ensemble d'une table de données basée sur le mois (l'année est toujours définie sur l'année en cours pour le moment).
Voici un aperçu de ce à quoi je pense :

Chaque fois qu'un mois est sélectionné, le code définira une variable comme "01" pour Jan, "05" pour May, ou "1" pour Q1, etc. Ce que j'aimerais, c'est que le bouton ait l'air d'être "cliqué" en apparaissant enfoncé, ou mieux, devienne d'une couleur en surbrillance, comme le bleu. Quelque chose de similaire à ce qui se passe dans la plate-forme Data Filter, comme lors de l'utilisation de Big Class et de l'ajout d'un filtre de données local par :name, où le nom est mis en surbrillance et plusieurs sélections peuvent être effectuées à la fois. En plus d'indiquer que le bouton a été sélectionné, j'aimerais qu'il indique si le bouton a été désélectionné - un peu comme une case à cocher indiquant qu'il est marqué ou non - mais je ne veux pas utiliser de cases à cocher car c'est moins attrayant visuellement.

Le code de la fenêtre que j'ai créée ressemble à (voir ci-dessous), et bien sûr, lorsque l'utilisateur clique sur "OK", le code crée alors la table de données du sous-ensemble, puis ferme également la fenêtre de sélection. En définissant la variable pour le mois sélectionné "mo#", existe-t-il un moyen moins fastidieux de lui attribuer la valeur 01Jan2024 que le code AsDate(Date DMY(dd,mm,yyyy)) ? cela fonctionne très bien, c'est juste un peu fastidieux.
Names Default To Here( 1 );
yr = Year( Today() );
subwin = New Window( "Select Subset",
<<TYPE></TYPE>
<P>Toute aide est grandement appréciée !</P>
<P> </P>
<P>Merci!,</P>
<P>DS</P><LINGO-LABS id="lingo-labs-809673" slang="en-US" mode="CREATE"><LINGO-LABEL>Automatisation et scripts</LINGO-LABEL><LINGO-LABEL>Fusion et nettoyage des données</LINGO-LABEL><LINGO-LABEL>Personnalisation de masse</LINGO-LABEL><LINGO-LABEL>Fenêtres</LINGO-LABEL></LINGO-LABS>Re: Boîte à boutons à bascule ou quelque chose de similaireSalut @jthi et @txnelson ,
Merci à vous deux pour vos précieux commentaires. Toutes vos suggestions m'ont donné des idées sur ce sur quoi travailler et comment modifier le code existant pour obtenir ce dont j'avais besoin. J'ai aimé l'idée de @txnelson concernant la date de début et la date de fin, mais malheureusement, elle ne permet pas une sélection non continue des mois et/ou des trimestres. Par exemple, un utilisateur peut sélectionner Jan et Sep comme mois ou Q1 et Q4 comme trimestres pour ensuite récupérer le sous-ensemble. J'ai donc dû réécrire cela pour autoriser les dates non continues. J'ai même ajouté une vérification si l'utilisateur sélectionnait des mois et des trimestres ou YTD et n'importe quel mélange afin qu'il doive revenir en arrière et sélectionner juste un groupe ou un autre.
Ma solution à ce problème a été d'utiliser des tableaux associatifs, et j'ai été satisfait du résultat ainsi que de l'utilisation des AA puisque je n'ai pas vraiment beaucoup travaillé avec eux. Le code que j'ai trouvé est ci-dessous. Je sais que ce n'est pas très élégant ou compact, mais cela fonctionne et fait le travail, ce qui est parfois tout ce dont on a besoin, n'est-ce pas ?!;)
Merci pour toute l'aide et les retours rapides. J'adore pouvoir poser un problème sur ce forum et, moins de 24 heures plus tard, avoir un script fonctionnel qui résout tous les problèmes dont j'avais besoin. Voici le code que j'ai fini par écrire :
Names Default To Here( 1 );
dt = Current Data Table();
yr = Year( Today() );
MonthAA = Associative Array( {"M1", "M2", "M3", "M4", "M5", "M6", "M7", "M8", "M9", "M10", "M11", "M12"}, {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12} );
QAA = Associative Array( {"Q1", "Q2", "Q3", "Q4"}, {1, 2, 3, 4} );
YTDAA = Associative Array( {"YTD"}, {12} );
MonthList = {};
QList = {};
QMonths = {};
YTDList = {};
ClearExpr = Expr(
dt << Clear Select;
MonthList = {};
QList = {};
QMonths = {};
YTDList = {};
BB1 << Set( 0 );
BB2 << Set( 0 );
BB3 << Set( 0 );
BB4 << Set( 0 );
BB5 << Set( 0 );
BB6 << Set( 0 );
BB7 << Set( 0 );
BB8 << Set( 0 );
BB9 << Set( 0 );
BB10 << Set( 0 );
BB11 << Set( 0 );
BB12 << Set( 0 );
BB13 << Set( 0 );
BB14 << Set( 0 );
BB15 << Set( 0 );
BB16 << Set( 0 );
BB17 << Set( 0 );
);
OKExpr = Expr(
dt << Clear Select;
MonthList = {};
QList = {};
QMonths = {};
YTDList = {};
For( i = 1, i <= 17, i++,
tempBB = Eval( Parse( "BB" || Char( i ) ) ) << Get;
If( tempBB == 1,
If(
Substr( Eval( Parse( "Sel" || Char( i ) ) ), 1, 1 ) == "M", Insert Into( MonthList, Eval( Parse( "Sel" || Char( i ) ) ) ),
Substr( Eval( Parse( "Sel" || Char( i ) ) ), 1, 1 ) == "Q", Insert Into( QList, Eval( Parse( "Sel" || Char( i ) ) ) ),
Substr( Eval( Parse( "Sel" || Char( i ) ) ), 1, 1 ) == "Y", Insert Into( YTDList, Eval( Parse( "Sel" || Char( i ) ) ) )
)
);
);
If(
N Items( MonthList ) != 0 & N Items( QList ) != 0 | N Items( MonthList ) != 0 & N Items( YTDList ) != 0 | N Items( QList ) != 0 &
N Items( YTDList ) != 0,
ErrorWin = New Window( "Error Window",
<<TYPE></TYPE>
<P>Merci!,</P>
<P>DS</P>
<P> </P>Re: Boîte à boutons à bascule ou quelque chose de similaireJe ne sais pas à quoi ressemblent vos données ou comment vous souhaitez effectuer les sélections, mais je séparerais l'interface utilisateur et la logique. J'ai apporté des modifications à votre interface utilisateur, mais ce n'est pas nécessaire, cela facilite simplement un peu la collecte des boutons. Cela montrera simplement comment vous pouvez créer les dates à partir des mois, cela ne le fera pas pour YTD ou les trimestres, car je ne sais pas comment vous les utiliserez
Names Default To Here(1);
get_dates = Expr(
months = Loc(m_buttons << get, 1);
qs = Loc(q_buttons << get, 1);
ys = Loc(y_buttons << get, 1);
// loop over as necessary to create the combinations
dates_to_find = Transform Each({month}, months,
Date DMY(01, month, yr);
);
);
yr = Year(Today());
subwin = New Window("Select Subset",
<<TYPE></TYPE>Re: Boîte à boutons à bascule ou quelque chose de similaireVoici une refonte de votre JSL... il n'est pas vraiment testé, mais il devrait être suffisamment proche pour que vous puissiez l'utiliser pour compléter votre demande
Names Default To Here( 1 );
dt=current data table();
theYear = Year( Today() );
resetbb = Expr(
For( i = 1, i <= 17, i++,
Eval( Parse( "bb" || Char( i ) || "<< enable(1);" ) )
)
);
subwin = New Window( "Select Subset",
<<TYPE>= :Date < endDate );
dtSubset = dt << subset( selected columns( 0 ), selected rows( 1 ) );
subwin << Close Window;
),
Button Box( "Cancel/Exit", subwin << Close Window )
)
)
);
</TYPE>
Re: Boîte à boutons à bascule ou quelque chose de similaireSalut @jthi ,
Cela a définitivement résolu le problème de basculement que je recherchais. Maintenant, le seul défi est de savoir comment configurer la structure logique lorsque quelqu'un clique sur « OK » afin qu'elle sélectionne uniquement les lignes mm/aaaa dans la table de données pour toutes les combinaisons possibles de mois sélectionnés ou de trimestres, etc. J'essaie de penser à un moyen pour que cela ne devienne pas trop gros très vite. Des idées ?
Merci!,
DS
Re: Boîte à boutons à bascule ou quelque chose de similaireVous pouvez également regrouper des cases radio afin qu'une seule soit active à un moment donné :
Names Default To Here( 1 );
r1 = Radio Box( {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"} );
r2 = Radio Box( {"Q1", "Q2", "Q3", "Q4"} );
New Window( "Example", H List Box( r1, r2 ) );
r2 << Group( r1 );Re: Boîte à boutons à bascule ou quelque chose de similaireLa boîte à boutons prend en charge le style Toggle
Names Default To Here(1);
New Window("Toggle Button Example",
ex = Button Box("Start",
If(ex << Get,
ex << Set Button Name("Stop"),
ex << Set Button Name("Start")
)
)
);
ex << Style("Toggle");


Re: Boîte à boutons à bascule ou quelque chose de similaireVous pouvez utiliser des boutons radio à cet effet. Vous pouvez utiliser un ensemble pour définir si la période est en mois ou en trimestres. Vous pouvez avoir un autre ensemble dynamique pour proposer soit les douze mois, soit les quatre trimestres. Les deux options peuvent être créées à l'ouverture de la fenêtre, mais un ensemble (pas celui par défaut) peut être invisible. Le premier ensemble de boutons radio gère la visibilité du deuxième ensemble ainsi que la logique.