Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème

7 réponses
Avatar
PH
Je dois être fatigué mais je ne vois plus comment faire cela simplement

J'ai plusieurs optionButton et je voudrai que le programme attende que
l'utilisateur choisisse l'une des options et récupérer l'index afférent
bien sûr.

J'ai essayé une boucle do...loop.


Private Sub Option_Click(Index As Integer)
Choix = Index
End Sub

ChoisirOption
do
frame1.visible=true
do while Choix=0
if Choix>0 then
frame1.visible=false
end if
loop
loop


Mais en fait dans la boucle le frame n'a semble-t'il pas le focus ?

Quelle solution ai-je raté ?

7 réponses

Avatar
Driss HANIB
Salut PH

fais plutôt un truc comme cela

Private Sub Option_Click(Index As Integer)
frame1.visible=( Index = 0)
End Sub

Driss

"PH" a écrit dans le message de news:

Je dois être fatigué mais je ne vois plus comment faire cela simplement

J'ai plusieurs optionButton et je voudrai que le programme attende que
l'utilisateur choisisse l'une des options et récupérer l'index afférent
bien sûr.

J'ai essayé une boucle do...loop.


Private Sub Option_Click(Index As Integer)
frame1.visible= (Index=0)
End Sub

ChoisirOption
do
frame1.visible=true
do while Choix=0
if Choix>0 then
frame1.visibleúlse
end if
loop
loop


Mais en fait dans la boucle le frame n'a semble-t'il pas le focus ?

Quelle solution ai-je raté ?


Avatar
PH
Driss

Merci de ta réponse mais je ne la comprend pas

> Private Sub Option_Click(Index As Integer)
> frame1.visible=( Index = 0)
> End Sub
>
Mes index commencent à 1 donc frame1.visible=( Index = 0) est équivalent
à frame1.visibleúlse

En fait déjà quand j'ai écrit le message j'étais fatigué. Tel qu'écrit
la sub ChoisirOption tourne dans le vide

Voici ce que j'ai écrit dans le programme mais cela ne fonctionne pas
quand même
Choix est une variable qui prend la valeur Index dans le traitement de
l'évènement click du bouton d'option

Sub ChoisirOption
Frame1.Visible = True
While Frame1.Visible
If Choix > 0 Then
Frame1.Visible = False
Traitement
Choix = 0
End If
Wend
End Sub


Private Sub Option_Click(Index As Integer)
Choix=Index
frame1.visibleúlse
End Sub

En fait, malgré tout tu as fait jaillir un peu de lumière dans mon
cerveau embrumé. Je vais désactiver les autres contrôles pour forcer le
choix d'une option.

Mais il faut cependant que je rende la main à la sub appelant ?

La situation est donc la suivante :

Déroulement du Programme jusqu'à l'étape Choix
Choix d'une option (blocage du programme en attendant)
Poursuite du programme avec ce choix

(J'ai l'impression que cela ressemble à un traitement d'interruption)

Une solution non étudiée mais qui peut servir : au lieu d'utiliser un
frame, utiliser une forme qui garde la main tant qu'un choix n'est pas
validé ?

Driss HANIB a écrit :
Salut PH

fais plutôt un truc comme cela

Private Sub Option_Click(Index As Integer)
frame1.visible=( Index = 0)
End Sub

Driss

"PH" a écrit dans le message de news:

Je dois être fatigué mais je ne vois plus comment faire cela simplement

J'ai plusieurs optionButton et je voudrai que le programme attende que
l'utilisateur choisisse l'une des options et récupérer l'index afférent
bien sûr.

J'ai essayé une boucle do...loop.


Private Sub Option_Click(Index As Integer)
frame1.visible= (Index=0)
End Sub

ChoisirOption
do
frame1.visible=true
do while Choix=0
if Choix>0 then
frame1.visibleúlse
end if
loop
loop


Mais en fait dans la boucle le frame n'a semble-t'il pas le focus ?

Quelle solution ai-je raté ?






Avatar
PH
PH a écrit :
Driss

Merci de ta réponse mais je ne la comprend pas

> Private Sub Option_Click(Index As Integer)
> frame1.visible=( Index = 0)
> End Sub
>
Mes index commencent à 1 donc frame1.visible=( Index = 0) est équivalent
à frame1.visibleúlse

En fait déjà quand j'ai écrit le message j'étais fatigué. Tel qu'écrit
la sub ChoisirOption tourne dans le vide

Voici ce que j'ai écrit dans le programme mais cela ne fonctionne pas
quand même
Choix est une variable qui prend la valeur Index dans le traitement de
l'évènement click du bouton d'option

Sub ChoisirOption
Frame1.Visible = True
While Frame1.Visible
If Choix > 0 Then
Frame1.Visible = False
Traitement
Choix = 0
End If
Wend
End Sub


Private Sub Option_Click(Index As Integer)
Choix=Index
frame1.visibleúlse
End Sub

En fait, malgré tout tu as fait jaillir un peu de lumière dans mon
cerveau embrumé. Je vais désactiver les autres contrôles pour forcer le
choix d'une option.

Mais il faut cependant que je rende la main à la sub appelant ?

La situation est donc la suivante :

Déroulement du Programme jusqu'à l'étape Choix
Choix d'une option (blocage du programme en attendant)
Poursuite du programme avec ce choix

(J'ai l'impression que cela ressemble à un traitement d'interruption)

Une solution non étudiée mais qui peut servir : au lieu d'utiliser un
frame, utiliser une forme qui garde la main tant qu'un choix n'est pas
validé ?

Driss HANIB a écrit :
Salut PH

fais plutôt un truc comme cela

Private Sub Option_Click(Index As Integer)
frame1.visible=( Index = 0)
End Sub

Driss

"PH" a écrit dans le message de news:

Je dois être fatigué mais je ne vois plus comment faire cela simplement

J'ai plusieurs optionButton et je voudrai que le programme attende
que l'utilisateur choisisse l'une des options et récupérer l'index
afférent bien sûr.

J'ai essayé une boucle do...loop.


Private Sub Option_Click(Index As Integer)
frame1.visible= (Index=0)
End Sub

ChoisirOption
do
frame1.visible=true
do while Choix=0
if Choix>0 then
frame1.visibleúlse
end if
loop
loop


Mais en fait dans la boucle le frame n'a semble-t'il pas le focus ?

Quelle solution ai-je raté ?








J'ai trouvé. je ne suis pas sûr qu'il n'y ait pas une solution plus
agréable en programmation mais je pense que le rpoblème provient du fait
que ma procédure ChoisirOption est une procédure de la forme. Celle-ci
est donc occupée dans une boucle et les contôles n'ont plus la main pour
réagir. Alors que si je mets la boucle d'attente dans le programme
lui-même tout baigne.
Avatar
Driss HANIB
Salut PH

peux tu me rexpliquer ce que tu veux faire ?
A quel moment tu execute ChoisirOption ?
Ton traitement doit-il se faire au moment du clic de l'optionbouton ?

Effectivement je n'ai pas vu que tu voulais effctuer un traitement . Mais il
faut que tu me dises à quel moment s'excute choisirOption.

Driss

"PH" a écrit dans le message de news:

PH a écrit :
Driss

Merci de ta réponse mais je ne la comprend pas

> Private Sub Option_Click(Index As Integer)
> frame1.visible=( Index = 0)
> End Sub
>
Mes index commencent à 1 donc frame1.visible=( Index = 0) est équivalent
à frame1.visibleúlse

En fait déjà quand j'ai écrit le message j'étais fatigué. Tel qu'écrit la
sub ChoisirOption tourne dans le vide

Voici ce que j'ai écrit dans le programme mais cela ne fonctionne pas
quand même
Choix est une variable qui prend la valeur Index dans le traitement de
l'évènement click du bouton d'option

Sub ChoisirOption
Frame1.Visible = True
While Frame1.Visible
If Choix > 0 Then
Frame1.Visible = False
Traitement
Choix = 0
End If
Wend
End Sub


Private Sub Option_Click(Index As Integer)
Choix=Index frame1.visibleúlse
End Sub

En fait, malgré tout tu as fait jaillir un peu de lumière dans mon
cerveau embrumé. Je vais désactiver les autres contrôles pour forcer le
choix d'une option.

Mais il faut cependant que je rende la main à la sub appelant ?

La situation est donc la suivante :

Déroulement du Programme jusqu'à l'étape Choix
Choix d'une option (blocage du programme en attendant)
Poursuite du programme avec ce choix

(J'ai l'impression que cela ressemble à un traitement d'interruption)

Une solution non étudiée mais qui peut servir : au lieu d'utiliser un
frame, utiliser une forme qui garde la main tant qu'un choix n'est pas
validé ?

Driss HANIB a écrit :
Salut PH

fais plutôt un truc comme cela

Private Sub Option_Click(Index As Integer)
frame1.visible=( Index = 0)
End Sub

Driss

"PH" a écrit dans le message de news:

Je dois être fatigué mais je ne vois plus comment faire cela simplement

J'ai plusieurs optionButton et je voudrai que le programme attende que
l'utilisateur choisisse l'une des options et récupérer l'index afférent
bien sûr.

J'ai essayé une boucle do...loop.


Private Sub Option_Click(Index As Integer)
frame1.visible= (Index=0)
End Sub

ChoisirOption
do
frame1.visible=true
do while Choix=0
if Choix>0 then
frame1.visibleúlse
end if
loop
loop


Mais en fait dans la boucle le frame n'a semble-t'il pas le focus ?

Quelle solution ai-je raté ?








J'ai trouvé. je ne suis pas sûr qu'il n'y ait pas une solution plus
agréable en programmation mais je pense que le rpoblème provient du fait
que ma procédure ChoisirOption est une procédure de la forme. Celle-ci est
donc occupée dans une boucle et les contôles n'ont plus la main pour
réagir. Alors que si je mets la boucle d'attente dans le programme
lui-même tout baigne.


Avatar
Driss HANIB
Salut PH

Si tu veux faire executer. un traitement seulement lors du click sur un
option bouton tu pourrais faire comme cela.
Tu m'as dit que tes index commencent à 1 et tu veux que que le traitement ne
se fasse que lorsque 'lon clique sur un ds options boutons
Je suppose que le traietemnt dépend du bouton choisi ?
tu peux faire :

1 . tu enlèves les valeurs aux option boutons, du style

For I = 1 to Option.Count
Option(I).Valueúlse
next

2. tu gères le traitement au moment de la sélection du bouton

' première version : tu as le même type de traitement mais tu as besoin de
la valeur d'index : tu pourras mettre
Private Sub Option_Click(Index As Integer)
Traitement index ' Traitement est une procédure (fonction) avec comme
paramètre : index
End Sub


' Deuxième vesrion : en fonction de l'index un traitement différent est
prévu

Private Sub Option_Click(Index As Integer)
Select case index
case 1
Traitement1
case 2
Traitement2
.....
case else
end select
End Sub

et pour finir tu inclues dasn cette sub Option_Click, la remise à zéro des
valeurs de options butons

For I = 1 to Option.Count
Option(I).Valueúlse
next

Comme cela tu ne prends pas de temps système pour boucler et tu fais une
vraie procédure évènementielle.

Tiens moi au courant

Driss


"PH" a écrit dans le message de news:

PH a écrit :
Driss

Merci de ta réponse mais je ne la comprend pas

> Private Sub Option_Click(Index As Integer)
> frame1.visible=( Index = 0)
> End Sub
>
Mes index commencent à 1 donc frame1.visible=( Index = 0) est équivalent
à frame1.visibleúlse

En fait déjà quand j'ai écrit le message j'étais fatigué. Tel qu'écrit la
sub ChoisirOption tourne dans le vide

Voici ce que j'ai écrit dans le programme mais cela ne fonctionne pas
quand même
Choix est une variable qui prend la valeur Index dans le traitement de
l'évènement click du bouton d'option

Sub ChoisirOption
Frame1.Visible = True
While Frame1.Visible
If Choix > 0 Then
Frame1.Visible = False
Traitement
Choix = 0
End If
Wend
End Sub


Private Sub Option_Click(Index As Integer)
Choix=Index frame1.visibleúlse
End Sub

En fait, malgré tout tu as fait jaillir un peu de lumière dans mon
cerveau embrumé. Je vais désactiver les autres contrôles pour forcer le
choix d'une option.

Mais il faut cependant que je rende la main à la sub appelant ?

La situation est donc la suivante :

Déroulement du Programme jusqu'à l'étape Choix
Choix d'une option (blocage du programme en attendant)
Poursuite du programme avec ce choix

(J'ai l'impression que cela ressemble à un traitement d'interruption)

Une solution non étudiée mais qui peut servir : au lieu d'utiliser un
frame, utiliser une forme qui garde la main tant qu'un choix n'est pas
validé ?

Driss HANIB a écrit :
Salut PH

fais plutôt un truc comme cela

Private Sub Option_Click(Index As Integer)
frame1.visible=( Index = 0)
End Sub

Driss

"PH" a écrit dans le message de news:

Je dois être fatigué mais je ne vois plus comment faire cela simplement

J'ai plusieurs optionButton et je voudrai que le programme attende que
l'utilisateur choisisse l'une des options et récupérer l'index afférent
bien sûr.

J'ai essayé une boucle do...loop.


Private Sub Option_Click(Index As Integer)
frame1.visible= (Index=0)
End Sub

ChoisirOption
do
frame1.visible=true
do while Choix=0
if Choix>0 then
frame1.visibleúlse
end if
loop
loop


Mais en fait dans la boucle le frame n'a semble-t'il pas le focus ?

Quelle solution ai-je raté ?








J'ai trouvé. je ne suis pas sûr qu'il n'y ait pas une solution plus
agréable en programmation mais je pense que le rpoblème provient du fait
que ma procédure ChoisirOption est une procédure de la forme. Celle-ci est
donc occupée dans une boucle et les contôles n'ont plus la main pour
réagir. Alors que si je mets la boucle d'attente dans le programme
lui-même tout baigne.


Avatar
LE TROLL
Bonjour,

La réponse de Driss est la bonne, c'est l'évènement qui a mal été choisit
par toi, faut mettre le bouton dans un "click" et tester l'index,
schématiquement :

sub button1(index as...)_click
select case index
case 0
' instructions...
case 1..
case 2..
case else
end select
end sub

Pour permettre de sortir d'un procédure qui aurait tendance à conserver la
main de par sa structure, faut mettre par exemple un :
DoEvents

for i
for j
for j
DoEvents

In fine, le processeur n'aime pas avoir trop de procédures à tester à la
fois, ça va finir par ralentir l'application, faut étudier préalablement
pour que l'application ne passe pas sa vie à bouffer du temps processeur par
des tests des évènements...

--
Cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.


"PH" a écrit dans le message de
news:
Je dois être fatigué mais je ne vois plus comment faire cela simplement

J'ai plusieurs optionButton et je voudrai que le programme attende que
l'utilisateur choisisse l'une des options et récupérer l'index afférent
bien sûr.

J'ai essayé une boucle do...loop.


Private Sub Option_Click(Index As Integer)
Choix = Index
End Sub

ChoisirOption
do
frame1.visible=true
do while Choix=0
if Choix>0 then
frame1.visibleúlse
end if
loop
loop


Mais en fait dans la boucle le frame n'a semble-t'il pas le focus ?

Quelle solution ai-je raté ?


Avatar
PH
Bonjour Driss et merci de t'intéresser à ce problème.

Donc j'ai par exemple 15 option-boutons et je veux que mon programme
arrête son exécution tant que l'utilisateur n'a pas fait son choix
parmis l'un des quinze. Un peu comme un InputBox ou un MsgBox, tu ne
peux rien faire tant que tu n'as pas répondu.

En réalité le traitement à faire est très simple:

Private Sub Option_Click(Index As Integer)
ChoixOption=Index
End Sub


Driss HANIB a écrit :
Salut PH

Si tu veux faire executer. un traitement seulement lors du click sur un
option bouton tu pourrais faire comme cela.
Tu m'as dit que tes index commencent à 1 et tu veux que que le traitement ne
se fasse que lorsque 'lon clique sur un ds options boutons
Je suppose que le traietemnt dépend du bouton choisi ?
tu peux faire :

1 . tu enlèves les valeurs aux option boutons, du style

For I = 1 to Option.Count
Option(I).Valueúlse
next

2. tu gères le traitement au moment de la sélection du bouton

' première version : tu as le même type de traitement mais tu as besoin de
la valeur d'index : tu pourras mettre
Private Sub Option_Click(Index As Integer)
Traitement index ' Traitement est une procédure (fonction) avec comme
paramètre : index
End Sub


' Deuxième vesrion : en fonction de l'index un traitement différent est
prévu

Private Sub Option_Click(Index As Integer)
Select case index
case 1
Traitement1
case 2
Traitement2
.....
case else
end select
End Sub

et pour finir tu inclues dasn cette sub Option_Click, la remise à zéro des
valeurs de options butons

For I = 1 to Option.Count
Option(I).Valueúlse
next

Comme cela tu ne prends pas de temps système pour boucler et tu fais une
vraie procédure évènementielle.

Tiens moi au courant

Driss


"PH" a écrit dans le message de news:

PH a écrit :
Driss

Merci de ta réponse mais je ne la comprend pas

> Private Sub Option_Click(Index As Integer)
> frame1.visible=( Index = 0)
> End Sub
>
Mes index commencent à 1 donc frame1.visible=( Index = 0) est équivalent
à frame1.visibleúlse

En fait déjà quand j'ai écrit le message j'étais fatigué. Tel qu'écrit la
sub ChoisirOption tourne dans le vide

Voici ce que j'ai écrit dans le programme mais cela ne fonctionne pas
quand même
Choix est une variable qui prend la valeur Index dans le traitement de
l'évènement click du bouton d'option

Sub ChoisirOption
Frame1.Visible = True
While Frame1.Visible
If Choix > 0 Then
Frame1.Visible = False
Traitement
Choix = 0
End If
Wend
End Sub


Private Sub Option_Click(Index As Integer)
Choix=Index frame1.visibleúlse
End Sub

En fait, malgré tout tu as fait jaillir un peu de lumière dans mon
cerveau embrumé. Je vais désactiver les autres contrôles pour forcer le
choix d'une option.

Mais il faut cependant que je rende la main à la sub appelant ?

La situation est donc la suivante :

Déroulement du Programme jusqu'à l'étape Choix
Choix d'une option (blocage du programme en attendant)
Poursuite du programme avec ce choix

(J'ai l'impression que cela ressemble à un traitement d'interruption)

Une solution non étudiée mais qui peut servir : au lieu d'utiliser un
frame, utiliser une forme qui garde la main tant qu'un choix n'est pas
validé ?

Driss HANIB a écrit :
Salut PH

fais plutôt un truc comme cela

Private Sub Option_Click(Index As Integer)
frame1.visible=( Index = 0)
End Sub

Driss

"PH" a écrit dans le message de news:

Je dois être fatigué mais je ne vois plus comment faire cela simplement

J'ai plusieurs optionButton et je voudrai que le programme attende que
l'utilisateur choisisse l'une des options et récupérer l'index afférent
bien sûr.

J'ai essayé une boucle do...loop.


Private Sub Option_Click(Index As Integer)
frame1.visible= (Index=0)
End Sub

ChoisirOption
do
frame1.visible=true
do while Choix=0
if Choix>0 then
frame1.visibleúlse
end if
loop
loop


Mais en fait dans la boucle le frame n'a semble-t'il pas le focus ?

Quelle solution ai-je raté ?







J'ai trouvé. je ne suis pas sûr qu'il n'y ait pas une solution plus
agréable en programmation mais je pense que le rpoblème provient du fait
que ma procédure ChoisirOption est une procédure de la forme. Celle-ci est
donc occupée dans une boucle et les contôles n'ont plus la main pour
réagir. Alors que si je mets la boucle d'attente dans le programme
lui-même tout baigne.