OVH Cloud OVH Cloud

La guerre des boutons !

14 réponses
Avatar
garnote
Bonchoir les aminches,

Comment décocher tous les boutons Option de Frame2
quand on clique sur un bouton Option quelconque de Frame1 ?

Marci

;-)

Sarge

10 réponses

1 2
Avatar
ru-th
Salut Serge

supposons Optionbutton1 à 3 dans la frame1 et 4 à 6 dans la frame 2
For j=1 to 3
if Controls("optionbutton" & j) = true then
For i = 4 To 6
Controls("optionbutton" & i) = False
Next
endif
next

--
a+
rural thierry
Veaux et Broutards d'Anjou
Wicasa on kin nape yapi inahni yo (à l'essai)

"garnote" a écrit dans le message de news:
SGvvb.59955$
Bonchoir les aminches,

Comment décocher tous les boutons Option de Frame2
quand on clique sur un bouton Option quelconque de Frame1 ?

Marci

;-)

Sarge




Avatar
garnote
Yep !

J'avais essayé :
For each c in Frame2
c.valueúlse
Next

mais niet !!!

Serge


"ru-th" a écrit dans le message de news:

Salut Serge

supposons Optionbutton1 à 3 dans la frame1 et 4 à 6 dans la frame 2
For j=1 to 3
if Controls("optionbutton" & j) = true then
For i = 4 To 6
Controls("optionbutton" & i) = False
Next
endif
next

--
a+
rural thierry
Veaux et Broutards d'Anjou
Wicasa on kin nape yapi inahni yo (à l'essai)

"garnote" a écrit dans le message de news:
SGvvb.59955$
Bonchoir les aminches,

Comment décocher tous les boutons Option de Frame2
quand on clique sur un bouton Option quelconque de Frame1 ?

Marci

;-)

Sarge








Avatar
gee-dee-
Bonsoir Serge,
en tout etat de cause, tous les contrôles OptionButton d'un contrôle Frame
s'excluent l'un l'autre.
donc le fait d'en activer un, désactive les autres !!!!!!
on les appelle aussi "boutons radio"

ce qui n'est pas le cas des checkboxes (appelées également case à cocher)
et la syntaxe ci-dessous devrait fonctionner :
For Each Cbx In Frame2.CheckBoxes
Cbx.valueúlse
Next

@+
Avatar
Michel Gaboly
Bonsoir gee-dee,

Bien sûr, sauf qu'ici il y a 2 Frame ;-))

Il s'agit de remettre à False les OptionButton du Frame 2 quand on clique
sur un OptionBotton du Frame 1.


Bonsoir Serge,
en tout etat de cause, tous les contrôles OptionButton d'un contrôle Frame
s'excluent l'un l'autre.
donc le fait d'en activer un, désactive les autres !!!!!!
on les appelle aussi "boutons radio"

ce qui n'est pas le cas des checkboxes (appelées également case à cocher)
et la syntaxe ci-dessous devrait fonctionner :
For Each Cbx In Frame2.CheckBoxes
Cbx.valueúlse
Next

@+


--
Cordialement,

Michel Gaboly
http://www.gaboly.com

Avatar
Michel Gaboly
Re Serge,

Je te propose une solution à la fois plus simple et plus
compliquée ;-))

Plus simple parce qu'on a pas besoin de connaître ni le nom,
ni le nombre d'OptionButton, pour aucune des 2 Frames.

Plus compliquée, car elle fait intervenir un module de classe.

Elle est inspirée d'éléments trouvés dans les archives, eux-
mêmes basés sur un exemple de John Walkenbach :


Dans un module de classe, module à nommer "ClasseOptions"

Option Explicit
Public WithEvents OptionButtons As MSForms.OptionButton

Private Sub OptionButtons_Change()
If OptionButtons Then
RAZ OptionButtons.Parent.Parent
End If
End Sub

Private Sub RAZ(UF As UserForm)
Dim C As Control
For Each C In UF.Frame2.Controls
If TypeName(C) = "OptionButton" Then
C = False
End If
Next C
End Sub


Dans le module du UserForm

Option Explicit
Dim OptionButtons() As New ClasseOptions

Private Sub UserForm_Initialize()
Dim OptionButtonsCount As Integer, C As Control
OptionButtonsCount = 0
For Each C In Frame1.Controls
If TypeName(C) = "OptionButton" Then
OptionButtonsCount = OptionButtonsCount + 1
ReDim Preserve OptionButtons(1 To OptionButtonsCount)
Set OptionButtons(OptionButtonsCount).OptionButtons = C
End If
Next C
End Sub


Le module de classe permet de définir une nouvelle classe,
"ClasseOptions" qui sera utilisée comme une collection d'
OptionButton, avec les propriétés, méthodes et événements
d'un OptionButton :

Public WithEvents OptionButtons As MSForms.OptionButton

Une seule procédure, gère l'événement Change de chaque
OptionButton membre de la collection. Elle appelle une
autre procédure, "RAZ" qui remet à false tous les Option-
Button du Frame2.

La procédure RAZ a besoin du nom du UserForm concerné.

On aurait pu écrire une procédure sans argument :

Private Sub RAZ()
Dim C As Control
For Each C In UserForm1.Frame2.Controls
If TypeName(C) = "OptionButton" Then
C = False
End If
Next C
End Sub

mais cette version présente le gros défaut, selon moi, de
nécessiter une modification du code si on renomme le User-
Form.

C'est pourquoi je préfère utiliser dans l'événement Change :

RAZ OptionButtons.Parent.Parent

En effet, le Parent de l'OptionButton modifié (qui doit pro-
voquer l'exécution de RAZ est "Frame1", qui a lui-même
pour parent le UserForm. Cela permet d'utilser ensuite :

Private Sub RAZ(UF As UserForm)
...
End Sub


Dans le module du UserForm

Dim OptionButtons() As New ClasseOptions

permet de définir une matrice, rattachée à la classe
ClasseOptions (nom du module de classe).

Le UserForm_Initialize() permet de définir les mem-
bres de cette collection, constitués par les OptionButton
du Frame1

Voilà. Les commentaires sont les bienvenus. Serge, je
peux t'envoyer le classeur exemple en Bal si tu veux.
Redonne-moi ton adresse ; celle que j'ai n'est proba-
blement pas à jour.



Bonchoir les aminches,

Comment décocher tous les boutons Option de Frame2
quand on clique sur un bouton Option quelconque de Frame1 ?

Marci

;-)

Sarge


--
Cordialement,

Michel Gaboly
http://www.gaboly.com

Avatar
AV
Avec l'évènement "Enter" de Frame1 ça devrait suffire :

Private Sub Frame1_Enter()
Dim x As Control
For Each x In Me.Frame2.Controls
If TypeName(x) = "OptionButton" Then x = False
Next
End Sub

AV
Avatar
Michel Gaboly
Un peu trop radical ;-((

Un clic accidentel sur Frame1 remet à False les
OptionButton de Frame2. Pas sûr que l'utilsateur
apprécie.

Sans compter le cas où Frame1 comporte d'autres
contrôles que des OptionButton, hypothèse que tu
envisages pour Frame2 puisque tu fais un test avec
TypeName.


Avec l'évènement "Enter" de Frame1 ça devrait suffire :

Private Sub Frame1_Enter()
Dim x As Control
For Each x In Me.Frame2.Controls
If TypeName(x) = "OptionButton" Then x = False
Next
End Sub

AV


--

Michel Gaboly
http://www.gaboly.com

Avatar
AV
Sans compter le cas où ....


Sans compter les cas où l'utilisateur :
- clique par mégarde sur la croix de l'userform
- par inadvertance, fait la combinaison de touches ctrl+alt+sup et clique
ensuite, par distraction, sur "Fin de tâche"
- se prend les pieds dans les fils et coupe l'alimentation !
- est victime d'un infarctus
-
-

AV

Avatar
sabatier
une réponse de mauvaise foi, alain...prendrais-tu modèle sur le
capitaine de l'équipe de rugby d'angleterre?
jps

AV a écrit:
Sans compter le cas où ....



Sans compter les cas où l'utilisateur :
- clique par mégarde sur la croix de l'userform
- par inadvertance, fait la combinaison de touches ctrl+alt+sup et clique
ensuite, par distraction, sur "Fin de tâche"
- se prend les pieds dans les fils et coupe l'alimentation !
- est victime d'un infarctus
-
-

AV





Avatar
AV
une réponse de mauvaise foi, alain...
Pffff ... t'as lu la question... les réponses...testé ?


prendrais-tu modèle sur le
capitaine de l'équipe de rugby d'angleterre?
Ben, pour l'heure, la "vérité" est bien du côté des blancs !


AV

1 2