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

Boutons d'option et VBA

8 réponses
Avatar
DoMi
Bonjour,

Je voudrais modifier par VBA la valeur de boutons d'option situ=E9s sur
une feuille de calcul, mais je ne sais pas comment les d=E9signer.

Quelqu'un peut-il m'aider ?

Merci !

8 réponses

Avatar
CAP2
Salut,

mettons que ton bouton soit sur une feuille nommée "Test", et que ton bouton
s'appelle "monbouton" (pour le nommer, tu passes en mode création, tu
cliques-droit dessus, Propriétés, et tu changes la propriété Name. Ici donc,
j'ai choisi monbouton...

Puis, pour changer sa valeur par VBA (ici pour cocher) :

Worksheets("Test").monbouton.Value = True

Ca marche ?

CAP2

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

Bonjour,

Je voudrais modifier par VBA la valeur de boutons d'option situés sur
une feuille de calcul, mais je ne sais pas comment les désigner.

Quelqu'un peut-il m'aider ?

Merci !
Avatar
Jacky
Bonjour,
Regarde ici
http://www.cijoint.fr/cjlink.php?file=cj200808/cijTBAfGen.xls

--
Salutations
JJ


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

Bonjour,

Je voudrais modifier par VBA la valeur de boutons d'option situés sur
une feuille de calcul, mais je ne sais pas comment les désigner.

Quelqu'un peut-il m'aider ?

Merci !
Avatar
DoMi
Oui, ça, c'est facile !
J'étais fatigué hier, et ma question était incomplète... (il faut d ire
que quand on est devant son PC à 4 heures du matin, c'est normal qu'on
ne soit pas très frais dans la journée !)

Donc, la question complète, c'est : j'ai 80 OptionButtons sur ma
feuille, et dans le but de leur attribuer leur valeur dans une boucle,
je voudrais que leur numéro d'ordre (OptionButton1 à OptionButton80)
soit remplacé par une variable...

Bon, maintenant, il est 5 h, je vais me recoucher...


On 27 août, 17:59, "CAP2" wrote:
Salut,

mettons que ton bouton soit sur une feuille nomm e "Test", et que ton bou ton
s'appelle "monbouton" (pour le nommer, tu passes en mode cr ation, tu
cliques-droit dessus, Propri t s, et tu changes la propri t Name. Ici don c,
j'ai choisi monbouton...

Puis, pour changer sa valeur par VBA (ici pour cocher) :

Worksheets("Test").monbouton.Value = True

Ca marche ?

CAP2

"DoMi" a crit dans le message de news:

Bonjour,

Je voudrais modifier par VBA la valeur de boutons d'option situ s sur
une feuille de calcul, mais je ne sais pas comment les d signer.

Quelqu'un peut-il m'aider ?

Merci !


Avatar
CAP2
Salut,

Bon, j'ai peut-être toujours rien compris, mais je me lance ! Essaie ça
(ici, pour mon exemple j'attaque les 3 optionbuttons pour les cocher tour à
tour, à toi d'adapter à ton cas) :

Sub test()
Dim i As Integer

For i = 1 To 3

ActiveSheet.OLEObjects("optionbutton" & i).Object.Value = True

Next

End Sub

Ca marche ?

CAP2

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

Oui, ça, c'est facile !
J'étais fatigué hier, et ma question était incomplète... (il faut dire
que quand on est devant son PC à 4 heures du matin, c'est normal qu'on
ne soit pas très frais dans la journée !)

Donc, la question complète, c'est : j'ai 80 OptionButtons sur ma
feuille, et dans le but de leur attribuer leur valeur dans une boucle,
je voudrais que leur numéro d'ordre (OptionButton1 à OptionButton80)
soit remplacé par une variable...

Bon, maintenant, il est 5 h, je vais me recoucher...


On 27 août, 17:59, "CAP2" wrote:
Salut,

mettons que ton bouton soit sur une feuille nomm e "Test", et que ton
bouton
s'appelle "monbouton" (pour le nommer, tu passes en mode cr ation, tu
cliques-droit dessus, Propri t s, et tu changes la propri t Name. Ici
donc,
j'ai choisi monbouton...

Puis, pour changer sa valeur par VBA (ici pour cocher) :

Worksheets("Test").monbouton.Value = True

Ca marche ?

CAP2

"DoMi" a crit dans le message de news:

Bonjour,

Je voudrais modifier par VBA la valeur de boutons d'option situ s sur
une feuille de calcul, mais je ne sais pas comment les d signer.

Quelqu'un peut-il m'aider ?

Merci !


Avatar
DoMi
Merci !
J'avais oublié le terme "Object"...

Maintenant, j'ai quand même un problème.
Mon but : traiter les réponses à un QCM de 20 questions, avec 4
réponses possibles par question.
Ces réponses sont dans un fichier texte avec 20 lignes, chacune avec 1
lettre (A, B, C ou D suivant la réponse)
Dans mon code, je lis le fichier ligne par ligne et teste les
réponses:

j = 1
For i = 1 To 20
Input #n, Ligne
Select Case Ligne
Case "A"
Worksheets("Réponses").OLEObjects("OptionButton" &
j).Object.Value = True
Case "B"
Worksheets("Réponses").OLEObjects("OptionButton" & (j +
1)).Object.Value = True
Case "C"
Worksheets("Réponses").OLEObjects("OptionButton" & (j +
2)).Object.Value = True
Case "D"
Worksheets("Réponses").OLEObjects("OptionButton" & (j +
3)).Object.Value = True
End Select
j = j + 4
Next
Au premier tour, tout va bien : si la réponse est "B", c'est bien
l'OptionButton2 qui passe à True.
Au deuxième tour, c'est les boutons 5 à 8 qui nous intéressent. Donc,
si la réponse est "B", il faudrait cocher l'OptionButton6.
Et bien, ça ne va pas, j'ai le message "Erreur d'exécution '1004':
Impossible de lire la propriété OLEObjects de la classe Worksheet.".

Qu'est-ce que je n'ai pas fait que j'aurais dû faire ?
Avatar
CAP2
Salut,

bon déjà y'a un truc bizarre dans ta boucle...

Tu fais un For i =1 To 20, alors que la variable i n'apparaît nulle part
dans ta boucle...

Ensuite, pour ta question 1, les optionbuttons concernés sont donc 1, 2, 3
et 4, mais tu incréments j avec ton j=j+4 avant ton NEXT.
Donc pour la question 2, les options buttons concernés sont 8, 9, 10 et 11
au lieu de 5, 6, 7 et 8.

Ton incrément devrait plutôt être j=j+1 pour passer de Optionbutton4 à
Option button 5, boucler, et arriver sur ton

"Worksheets("Réponses").OLEObjects("OptionButton" & j).Object.Value = True"

avec un j égal à 5

Ca marche ?

CAP2

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

Merci !
J'avais oublié le terme "Object"...

Maintenant, j'ai quand même un problème.
Mon but : traiter les réponses à un QCM de 20 questions, avec 4
réponses possibles par question.
Ces réponses sont dans un fichier texte avec 20 lignes, chacune avec 1
lettre (A, B, C ou D suivant la réponse)
Dans mon code, je lis le fichier ligne par ligne et teste les
réponses:

j = 1
For i = 1 To 20
Input #n, Ligne
Select Case Ligne
Case "A"
Worksheets("Réponses").OLEObjects("OptionButton" &
j).Object.Value = True
Case "B"
Worksheets("Réponses").OLEObjects("OptionButton" & (j +
1)).Object.Value = True
Case "C"
Worksheets("Réponses").OLEObjects("OptionButton" & (j +
2)).Object.Value = True
Case "D"
Worksheets("Réponses").OLEObjects("OptionButton" & (j +
3)).Object.Value = True
End Select
j = j + 4
Next
Au premier tour, tout va bien : si la réponse est "B", c'est bien
l'OptionButton2 qui passe à True.
Au deuxième tour, c'est les boutons 5 à 8 qui nous intéressent. Donc,
si la réponse est "B", il faudrait cocher l'OptionButton6.
Et bien, ça ne va pas, j'ai le message "Erreur d'exécution '1004':
Impossible de lire la propriété OLEObjects de la classe Worksheet.".

Qu'est-ce que je n'ai pas fait que j'aurais dû faire ?
Avatar
DoMi
Merci pour ta patience !

Oui, pour la boucle, j'aurais pu faire
Do While Not EOF(n) pour boucler jusqu'à la fin de la lecture du
fichier texte.
Mais je préfère boucler sur i de 1 à 20 parce que j'utilise cette
variable pour autre chose (j'ai supprimé du code quelques lignes qui
n'ont rien à voir avec mon problème et qui encombreraient ici.

Concernant ma variable j, c'est bon comme je fais : je n'incrémente
pas en même temps que i, ce qui explique le j = j + 4.
Pour chaque question, il y a 4 réponses.

En fait, j'ai trouvé entre temps la solution à mon problème, et il
n'est pas dans le code.
A partir de la deuxième série de 4 OptionButton, je les ai "groupés",
alors que je ne l'avais pas fait pour les 4 premiers boutons.
Après avoir "dégroupé" tous les boutons, mon code fonctionne bien.
Bien sûr, pour que les groupes de 4 boutons soient indépendants des
autres, j'ai mis la propriété GroupName à "Q1" pour le premier groupe ,
"Q2" pour le 2e etc., mais ça, je l'avais déjà fait précédemment, la
seule différence, c'est qu'en plus je les ai groupés (clic droit en
mode création, Groupe, Grouper)

A quoi sert donc ce "Grouper" ?
Avatar
CAP2
Salut,

houlà, je commence à bien disjoncter ;o))

T'as raison pour le j=j+4 !

Désolé ;o))

En ce qui concerne le Grouper, moi je m'en sers que pour des notions
d'alignements de blocs d'objets, mais je suppose que ça doit jouer sur le
comportement des optionbuttons comme c'est le cas pour les frames VBA...

CAP2

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

Merci pour ta patience !

Oui, pour la boucle, j'aurais pu faire
Do While Not EOF(n) pour boucler jusqu'à la fin de la lecture du
fichier texte.
Mais je préfère boucler sur i de 1 à 20 parce que j'utilise cette
variable pour autre chose (j'ai supprimé du code quelques lignes qui
n'ont rien à voir avec mon problème et qui encombreraient ici.

Concernant ma variable j, c'est bon comme je fais : je n'incrémente
pas en même temps que i, ce qui explique le j = j + 4.
Pour chaque question, il y a 4 réponses.

En fait, j'ai trouvé entre temps la solution à mon problème, et il
n'est pas dans le code.
A partir de la deuxième série de 4 OptionButton, je les ai "groupés",
alors que je ne l'avais pas fait pour les 4 premiers boutons.
Après avoir "dégroupé" tous les boutons, mon code fonctionne bien.
Bien sûr, pour que les groupes de 4 boutons soient indépendants des
autres, j'ai mis la propriété GroupName à "Q1" pour le premier groupe,
"Q2" pour le 2e etc., mais ça, je l'avais déjà fait précédemment, la
seule différence, c'est qu'en plus je les ai groupés (clic droit en
mode création, Groupe, Grouper)

A quoi sert donc ce "Grouper" ?