[R] Poser des conditions sur le résultat d'une combobox

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
lerin57
Niveau 4
Niveau 4
Messages : 97
Enregistré le : mer. 30 sept. 2009 12:50
Status : Hors ligne

[R] Poser des conditions sur le résultat d'une combobox

#1

Message par lerin57 »

Bonjour,

Je reviens vers vous pour une nouvelle problematique.

Dans le cadre de mon travail, il nous arrive parfois d'envoyer des mails type, pour demander une intervention externe, ou faire intervenir un prestataire.

Mon but ici est de simplifier le travail rébarbatif du copier/coller des donnés dans les mails type que nous utilisons

Ce type de routage de mails concerne par exemple des référence type de matériel.
J'ai hésité entre l'utilisation de boutons radio et une combobox.
J'ai finalement opté pour la combobox.

voici un debut de code :
► Afficher le texte
Il me faudrait poser la condition suivante :

- Si les deux combobox contiennent les champs "aucun", je génére un message inputbox "Veuillez choisir un matériel
- Si les deux combobox Contienent une valeur propre aux variables $nSRVCMB1 et $nSRVCMB2
je génère un message inputbox "Veuillez ne choisir qu'un seul matériel"
- Si je choisie une valeur pour la première combox et aucune pour la deuxième, je déclenche une focntion apropriée
- Si je ne met aucune valeur dans la première combobox et que je renseigne la deuxième, je déclenche une autre fonction.

J'ai épluché tous les sujets concernant les combobox sur ce site, sans trouver ce que je cherche, et le choix de fonction proposé dans l'aide de AUTOIT est très (trop) vaste.

Quelqu'un peut il m'orienter ?

Je vous en remercie par avance
Modifié en dernier par lerin57 le mer. 23 déc. 2009 11:43, modifié 1 fois.
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..]Poser des conditions sur le résultat d'une combobox

#2

Message par Iste »

► Afficher le texte
Voici un exemple.
Quand on clic sur l'un ou l'autre des deux combo (Case $nMsg[0] = $Srv_Cmb_L Or $nMsg[0] = $combo2) on lance la fonction bouton()
Cette fonction lit les deux combo ('GUICtrlRead($Srv_Cmb_L), GUICtrlRead($combo2)") et applique les condition.
C'est plus qu'un jeux de IF OR AND, la j'ai appliqué ce que vous disiez dans votre message.
Ensuite, suivant, on GUICtrlSetData() le bouton pour le texte et on le GUICtrlSetData() pour le griser ou non
Signez ici
lerin57
Niveau 4
Niveau 4
Messages : 97
Enregistré le : mer. 30 sept. 2009 12:50
Status : Hors ligne

Re: [..]Poser des conditions sur le résultat d'une combobox

#3

Message par lerin57 »

Bonjour,

Désolé pour le retard.

Tout d'abord, merci Iste pour ta suggestion, l'idée de créer un évènement sur la combobox plutôt que sur le bouton d'exécution m'intéresse beaucoup.
Je rencontre toutefois un probleme :

Après avoir exécuté le script, les messages d'avertissement n'apparaissent pas.
Peut on utiliser une msgbox à la place de l'argument GUICtrlSetData($Btn_wizard,"Veuillez ne choisir qu'un seul matériel").
J'ai vérifié si il manquait une parenthèse, mais le détail ne me saute pas aux yeux.

Puis je également te demander des détails sur le code suivant :

Code : Tout sélectionner

(GUICtrlRead($Srv_Cmb_L) = $nSRVCMB1 Or GUICtrlRead($Srv_Cmb_L) = $nSRVCMB2 )And GUICtrlRead($combo2) <> "(aucun)"
Je sais à quoi sert la fonction GUICtrlRead, mais j'ai encore de serieuse lacune sur la sysntaxe <> "(aucun)"

En te remerciant par avance
lerin57
Niveau 4
Niveau 4
Messages : 97
Enregistré le : mer. 30 sept. 2009 12:50
Status : Hors ligne

Re: [..]Poser des conditions sur le résultat d'une combobox

#4

Message par lerin57 »

Toutes mes excuses.
Je viens de me rendre compte du résultat sur la désactivation du bouton.
toutefois, dans le cas du remplissage des deux combobox, il n'y a pas le retour "Veuillez ne choisir qu'un seul matériel".

Je me permet de reposer ma question précédente, à savoir si je pouvais avoir des détails sur la syntaxe (GUICtrlRead($Srv_Cmb_L) = $nSRVCMB1 Or GUICtrlRead($Srv_Cmb_L) = $nSRVCMB2 )And GUICtrlRead($combo2) <> "(aucun)"?

Une autre question me vient alors, à quel instant dans le script, ou du moins, quelle commande je peut implémenter pour passer à l'action suivante.

Par exemple, dans quelle zone je peut ajouter une msgbox(1, "","") pour indiquer que l'ensemble des conditions sont remplis.

En vous remerciant
lerin57
Niveau 4
Niveau 4
Messages : 97
Enregistré le : mer. 30 sept. 2009 12:50
Status : Hors ligne

Re: [..] Poser des conditions sur le résultat d'une combobox

#5

Message par lerin57 »

Bonjour,

Je me permet de revenir sur le sujet.

Les indications de Iste m'ont apporté une piste non negligeable.

mais je ne parvient pas au résultat escompté.

J'ai donc décomposé le code sous la forme suivante, en remplaçant la variable $combo2 par $Srv_Cmb_P (pour printers, histoire de m'y retrouver) :
► Afficher le texte
Dans la fonction bouton(), J'ai un resultat sur la première condition.
Par contre je n'ai rien sur la deuxieme, la troisieme et la quatrieme.

Il est fort possible que j'ai oublié un détail, mais je bloque a nouveau.

En résumé , A L'AIDE !!!

Si quelqu'un à la gentillesse d'étudier le probleme ...
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] Poser des conditions sur le résultat d'une combobox

#6

Message par Iste »

Bon, pour reprendre vos poste a l'envers, C'est normal que les trois derniere condition ne se lance jamais, puisque dans la 1er on a
GUICtrlRead($Srv_Cmb_L) = $nSRVCMB1 and GUICtrlRead($Srv_Cmb_P) = $nSRVCMB2
, dans la deuxième
GUICtrlRead($Srv_Cmb_L) = $nSRVCMB1
et dans la 3em
GUICtrlRead($Srv_Cmb_P) = $nSRVCMB2

Or, comment la lecture d'un des combo peut renvoyer $nSRVCMB1 ou $nSRVCMB2 vu que ces variable ne valent rien ?

Je pense que vous maitrisai bien au3 pour le reste, mais il vous faut revoir les condition.
Petit cours rapide en expliquant mon (GUICtrlRead($Srv_Cmb_L) = $nSRVCMB1 Or GUICtrlRead($Srv_Cmb_L) = $nSRVCMB2 )And GUICtrlRead($combo2) <> "(aucun)" ;)

Code : Tout sélectionner

[b][color=#0000BF]([/color][/b]GUICtrlRead($Srv_Cmb_L) = $nSRVCMB1 [color=#00BF00]Or [/color]GUICtrlRead($Srv_Cmb_L) = $nSRVCMB2 [b][color=#0000BF])[/color][/b] [color=#FF0000]And [/color]GUICtrlRead($combo2) <> "(aucun)"
Je découpe ;
GUICtrlRead($Srv_Cmb_L) = $nSRVCMB1 = A
GUICtrlRead($Srv_Cmb_L) = $nSRVCMB2 = B
GUICtrlRead($combo2) <> "(aucun)" = C

On a donc :
(A Or B) And C

La condition est vrai si A ou B ou les deux sont vrai, et si C est vrai.

Pour que la condition soit vrai, il faut donc que
GUICtrlRead($Srv_Cmb_L) Renvoi $nSRVCMB1 sinon,
GUICtrlRead($Srv_Cmb_L) Renvoi $nSRVCMB2, et que en plus
GUICtrlRead($combo2) Ne renvoi pas "(aucun)"


Bref voila, pour plus d'info, je vous renvoi vers la doc chapitre Language Reference - Operators et Language Reference - Conditional Statements
Signez ici
lerin57
Niveau 4
Niveau 4
Messages : 97
Enregistré le : mer. 30 sept. 2009 12:50
Status : Hors ligne

Re: [..] Poser des conditions sur le résultat d'une combobox

#7

Message par lerin57 »

Bonjour,
Merci pour ses explications

J'ai finit par poser les conditions sous une autre forme :

Code : Tout sélectionner

Func bouton()
    If (GUICtrlRead($Srv_Cmb_L) = "(aucun)") And (GUICtrlRead($Srv_Cmb_P) = "(aucun)") Then
            MsgBox(1, "Erreur", "Veuillez choisir un matériel")
        ElseIf  (GUICtrlRead($Srv_Cmb_L) <> "(aucun)") And (GUICtrlRead($Srv_Cmb_P) <> "(aucun)") Then
            MsgBox(1, "Erreur", "Veuillez choisir un seul matériel")
        ElseIf (GUICtrlRead($Srv_Cmb_L) <> "(aucun)") And (GUICtrlRead($Srv_Cmb_P) = "(aucun)") Then
            MsgBox(1, "ok","ok pour la suite" & GUICtrlRead($Srv_Cmb_L))
                ElseIf (GUICtrlRead($Srv_Cmb_L) = "(aucun)") And (GUICtrlRead($Srv_Cmb_P) <> "(aucun)") Then
            MsgBox(1, "ok","ok pour la suite" & GUICtrlRead($Srv_Cmb_P))

    EndIf

EndFunc
 
Ce qui corrige mon probleme
Toutefois, si je reprend ton diagnostic, le fait de définir la variable $nSRVCMB1 = GUICtrlSetData(-1, "portable 1|portable 2|portable 3|portable 4") ne consiste pas à un résultat

Eventuellement, y aurait il une autre façon d'interpréter le résultat en question ?

En te remerciant de ton retour.
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] Poser des conditions sur le résultat d'une combobox

#8

Message par Iste »

lerin57 a écrit :$nSRVCMB1 = GUICtrlSetData(-1, "portable 1|portable 2|portable 3|portable 4")
???

Le plus simple serait de me donner toute les données de l'équation, affin que je puisse y répondre d'un coup.
Si vous ne voulez pas tout dire (pour cause de données perso etc), prenez des alias, que vous pourrez remplacer ensuite
De cette facon je pourrai vous donner un exemple complet et fonctionel, que je prendrais soin d'expliquer :wink:
Signez ici
lerin57
Niveau 4
Niveau 4
Messages : 97
Enregistré le : mer. 30 sept. 2009 12:50
Status : Hors ligne

Re: [..] Poser des conditions sur le résultat d'une combobox

#9

Message par lerin57 »

Bonjour,
Encore désolé de ne pas t'avoir répondu plus tôt (je suis un peu chargé en ce moment).

Je vais essayer de decrire le probleme autrement.

Dans notre environnement de travail, nous utilisons une base de donnés qui ne permet pas de générer de mail automatique (en cas de renvoie vers une autre prestation).
Nous avons donc des mails types, que nous remplissons à coup de copier coller.
Un exemple de mail type consiste à envoyer, pour un même client, une demande d'intervention sur 2 modeles de portable différent avec une prestation supplémentaire suivant le cas, ou sur 6 modeles d'imprimantes.

Pour les mail type, et les information telles que les coordonné d'intervention et tout le reste, aucun probleme, j'ai déja préparé le code sous autoit.

Vient le probleme du type d'intervention
Remplaçons ma liste de choix de cette façons :

Code : Tout sélectionner

GUICtrlSetData(-1, "portable 1|portable 2|portable 3|portable 4")
à la place je met :

Code : Tout sélectionner

GUICtrlSetData(-1, "portable 1 sans prestation|portable 1 avec prestation supplémentaire|portable 2 sans prestation|portable 2 avec prestation supplémentaire")
Ce qui nous donne toujours une liste de quatre choix

Par contre, la liste concernant les imprimantes reste intacte.

La condition première est qu'un seul matériel doit être choisi (portable ou imprimante), avant de passer à la suite.

C'est pour çà que je suis partis dans le sens inverse, en indiquant comme critére de référence le terme "(aucun)".

Ce que je voulais savoir, c'est si je crée deux variables Locales de type :

Code : Tout sélectionner

Local $nSRVCMB1, $nSRVCMB2

Puis je alors l'attribuer de la façon suivante :

Code : Tout sélectionner

[i][b]$nSRVCMB1 = GUICtrlSetData[/b](-1, "portable 1 sans prestation|portable 1 avec prestation supplémentaire|portable 2 sans prestation|portable 2 avec prestation supplémentaire")[/i]
et

Code : Tout sélectionner

[i]$nSRVCMB2 = GUICtrlSetData(-1, "Imprimante 1|Imprimante 2|imprimante 3|imprimante 4|imprimante 5|imprimante 6")[/i]
Et poser mes conditions dans la fonction suivante :

Code : Tout sélectionner

    If GUICtrlRead($Srv_Cmb_L) = "(aucun)" And GUICtrlRead($Srv_Cmb_P) = "(aucun)" Then
            MsgBox(1, "Erreur", "Veuillez choisir un matériel")
        ElseIf  GUICtrlRead($Srv_Cmb_L) = $nSRVCMB1 And GUICtrlRead($Srv_Cmb_P) = $nSRVCMB2 Then
            MsgBox(1, "Erreur", "Veuillez choisir un seul matériel")
        ElseIf GUICtrlRead($Srv_Cmb_L) = $nSRVCMB1 And GUICtrlRead($Srv_Cmb_P) = "aucun" Then
            MsgBox(1, "ok","ok pour la suite")
        ElseIf GUICtrlRead($Srv_Cmb_L) = "aucun" And GUICtrlRead($Srv_Cmb_P) = $nSRVCMB2 Then
            MsgBox(1, "ok","ok pour la suite")
    EndIf
Comme cela semble impossible, dois je remplacer le critère de Variable Local par Global ?

J'espère que cela sera suffisamment clair.

Si une solution existe, ce serait super.

Sinon, je te remercie encore pour l'aide que tu m'a déja apporté.

Bien cordialement.
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] Poser des conditions sur le résultat d'une combobox

#10

Message par Iste »

lerin57 a écrit :

Code : Tout sélectionner

[i][b]$nSRVCMB1 = GUICtrlSetData[/b](-1, "portable 1 sans prestation|portable 1 avec prestation supplémentaire|portable 2 sans prestation|portable 2 avec prestation supplémentaire")[/i]
Dans cette exemple, la variable $nSRVCMB1 prendra la valeur renvoyé par la fonction GUICtrlSetData(), aussi, jamais une combo ne pourra avoir ces valeurs. (!!!)

Je suppose que vous cherchez a vous faciliter la vie en appliquant plusieurs valeur a une variable, mais c'est pas possible :p

Il faudra donc remplacer le

Code : Tout sélectionner

[color=#4000FF]ElseIf  [/color]GUICtrlRead($Srv_Cmb_L) = $nSRVCMB1 [color=#4000FF]And [/color]
par

Code : Tout sélectionner

[color=#4000FF]ElseIf  [/color](GUICtrlRead($Srv_Cmb_L) = portable 1 OR GUICtrlRead($Srv_Cmb_L) = portable 2 OR GUICtrlRead($Srv_Cmb_L) = portable 3 etc [color=#4000FF]And [/color]
Signez ici
lerin57
Niveau 4
Niveau 4
Messages : 97
Enregistré le : mer. 30 sept. 2009 12:50
Status : Hors ligne

Re: [..] Poser des conditions sur le résultat d'une combobox

#11

Message par lerin57 »

Bonjour,

Cela confirmait un peu mes doutes, je vous en remercie.
Je pense rester sur l'option de choisir comme critère de référence le terme "aucun", ce qui donne le même résultat.

Une toute dernière question, et après, j'arrête de vous enbeter. :wink:

Si je posait effectivement la condition :

Code : Tout sélectionner

ElseIf  (GUICtrlRead($Srv_Cmb_L) = portable 1 OR GUICtrlRead($Srv_Cmb_L) = portable 2 OR GUICtrlRead($Srv_Cmb_L) = portable 3 etc And ...
Y-t'il une limite au nombre d'élément (Item) que je pourrais intégrer dans la liste de la combobox ?
L'aide n'est pas très claire à ce sujet.

En vous remerciant.
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] Poser des conditions sur le résultat d'une combobox

#12

Message par Iste »

Non je pense pas. Ou bien alors oui, mais treeeessss grande !
Par contre, la condition serait de plus en plus chiante a écrire, et vaudrait mieux passer par une fonction

un ElseIf mafonc() And avec

Code : Tout sélectionner

func mafonc()
if GUICtrlRead($Srv_Cmb_L) = portable 1 then retun 1
if GUICtrlRead($Srv_Cmb_L) = portable 2 then retun 1
if GUICtrlRead($Srv_Cmb_L) = portable 3  then retun 1
...
endfunc
Signez ici
lerin57
Niveau 4
Niveau 4
Messages : 97
Enregistré le : mer. 30 sept. 2009 12:50
Status : Hors ligne

Re: [..] Poser des conditions sur le résultat d'une combobox

#13

Message par lerin57 »

Bonjour,

Code : Tout sélectionner

func mafonc()
if GUICtrlRead($Srv_Cmb_L) = portable 1 then retun 1
if GUICtrlRead($Srv_Cmb_L) = portable 2 then retun 1
if GUICtrlRead($Srv_Cmb_L) = portable 3  then retun 1
Ouh la, je n'ai pas encore étudié ce type de conditions.

Je vais me replonger dans l'aide.

Merci encore pour ces précieux conseils.

Je vais mettre le sujet en résolu.

Merci encore.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] Poser des conditions sur le résultat d'une combobox

#14

Message par Tlem »

Il serait quand même plus simple de vérifier si le texte de GUICtrlRead($Srv_Cmb_L) est dans une variable définie et qui contiendrait la liste des machines. :shock:
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
lerin57
Niveau 4
Niveau 4
Messages : 97
Enregistré le : mer. 30 sept. 2009 12:50
Status : Hors ligne

Re: [R] Poser des conditions sur le résultat d'une combobox

#15

Message par lerin57 »

Bonjour, Tlem.

C'est une idée que je vais également creuser.
Je suis arrivé au bout de mon script.
Je n'ai plus qu'a reprendre les variables pour voir si je peut effectivement le simplifier
Répondre