[VBA Access] groupe d'option ou de cases à cocher

Signaler
Messages postés
75
Date d'inscription
vendredi 10 mars 2006
Statut
Membre
Dernière intervention
23 août 2006
-
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
-
Bonjour,
Je souhaite définir si mon groupe d'option est activé (au moins une option cochée) ou non (aucune option cochée, avec les cases en grisé).
Merci

7 réponses

Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Salut,  essaie ça :

Sub Verification_Etat_OptionButtons()

Dim ctl As Control


' Frame1 c'est le groupe de contrôles
For Each ctl In Frame1.Controls
    If TypeName(ctl) = "OptionButton" Then 'on ne vérifie que les OptionButtons        If ctl.Value True Or ctl.Value Null Then  'détermine la condition
            GoTo Saut
        End If
    End If
Next ctl


MsgBox "AUCUN OptionButton a la valeur True Ou Null"
Exit Sub


Saut:
MsgBox "Au moins un OptionButton a la valeur True Ou Null"

End Sub






@++
<?xml:namespace prefix v ns "urn:schemas-microsoft-com:vml" /?><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></v:path><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:lock v:ext="edit" aspectratio="t"></o:lock></v:shapetype>

  Mortalino 





Le Mystérieux Chevalier "Provençal, le Gaulois"
N'oubliez pas de lire le 
règlement
Messages postés
75
Date d'inscription
vendredi 10 mars 2006
Statut
Membre
Dernière intervention
23 août 2006

désolée, ça n'a pas trop l'air de marcher : je ne suis pas sûre (en tout cas vu que je suis sur VBA Access) que ctl.value soit possible. D'autre part, "Null" c'est bien pour le cas où aucune option n'est cochée? Dans ce cas, d'après ton programme je ne peux pas différencier "aucune option cochée" et "au moins une option cochée"

@+
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Quand tu écris     ctl.      là il te propose un tas de propriété mais pas Value, certe, mais t'inquiète pas, il est pris en compte.OptionButton.Value True     > c'est qu'il est cochéOptionButton.Value False   > c'est qu'il n'est pas cochéOptionButton.Value Null      > il est coché mais grisé

Mais tu n'as qu'à copier ma procédure dans ton Module de ta Form et t'as juste à remplacer dans cette ligne :
For Each ctl In Frame1.Controls       

                              ^ Frame1 c'est le nom du groupe de contrôles que j'ai utilisé pour faire le test mais met lui le nom que tu as déterminé.
C'est tout comme changement


















@++
<?xml:namespace prefix v ns "urn:schemas-microsoft-com:vml" /?><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></v:path><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:lock v:ext="edit" aspectratio="t"></o:lock></v:shapetype>

  Mortalino 





Le Mystérieux Chevalier "Provençal, le Gaulois"
N'oubliez pas de lire le 
règlement
Messages postés
75
Date d'inscription
vendredi 10 mars 2006
Statut
Membre
Dernière intervention
23 août 2006

apparement c'est parce que je suis dans un groupe d'option que "ctl.value" ne doit pas marcher...
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Ca doit marcher !

En français, mon code veut dire ça :

On vérifie Tous les contrôles qui se trouvent dans ton groupe de contrôles
   Si le contrôle est un OptionButton
      Ben alors on vérifie si il est coché ou coché / grisé
         Si c'est le cas on saute à la fin de la procédure pour le message
      Fin If
   Fin If
On continue la boucle jusquà ce que tous les contrôles ont été vérifié

@++
<?xml:namespace prefix v ns "urn:schemas-microsoft-com:vml" /?><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></v:path><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:lock v:ext="edit" aspectratio="t"></o:lock></v:shapetype>  Mortalino 

Le Mystérieux Chevalier "Provençal, le Gaulois"
N'oubliez pas de lire le règlement
Messages postés
75
Date d'inscription
vendredi 10 mars 2006
Statut
Membre
Dernière intervention
23 août 2006

Ok
Je ne veux pas te froisser!
Mais j'ai bien recopié ton code, en changeant uniquement "Frame1", et sur la ligne "If ctl.Value = True Or ctl.Value = Null Then" il me met le message "Expression sans paramètre". Je te jure ce n'est pas de la mauvaise volonté! Une autre fois, je ne sais plus avec quelle combinaison, il me mettait effectivement un message, mais "AUCUN OptionButton a la valeur True Ou Null" alors que j'avais un bouton de sélectionné.
J'ai fini par essayer le code suivant, il a l'air de marcher, mais c'est vrai que je ne suis pas sûre que ça idenfie le fait que l'option soit sélectionnée ou non, mais plutôt qu'on lui ait affecté le chiffre 1 ou non :

Sub Verification_Etat_OptionButtons()


Dim ctl As Control


' Frame1 c'est le groupe de contrôles
For Each ctl In Cadre11.Controls
    If TypeName(ctl) = "OptionButton" Then 'on ne vérifie que les OptionButtons
        If (ctl.OptionValue = 1) Then  'détermine la condition
            GoTo Saut
        End If
    End If
Next ctl


MsgBox "AUCUN OptionButton a la valeur True"
Exit Sub


Saut:
MsgBox "Au moins un OptionButton a la valeur True "


End Sub
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Rassure toi, tu ne me froisses pas. C'est juste que je viens de faire le test et ça fonctionne. (chez moi)

Par contre, tu as mis "If (ctl.OptionValue = 1) Then"   en fait, je connais pas OptionValue
D'ailleurs il ne m'est pas proposé dans les propriétés. Mais c'est peut-être un contrôle sur un formulaire Access et non VBA. c'est pour cela qui doit y avoir une légère différence de syntaxe.

C'est donc possible qu'OptionValue te le prenne en compte.

A tester, ça mange pas de pain.

@++
<?xml:namespace prefix v ns "urn:schemas-microsoft-com:vml" /?><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></v:path><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:lock v:ext="edit" aspectratio="t"></o:lock></v:shapetype>  Mortalino 

Le Mystérieux Chevalier "Provençal, le Gaulois"
N'oubliez pas de lire le règlement