Des checkbox, encore des checkbox

dks31 Messages postés 14 Date d'inscription dimanche 28 septembre 2003 Statut Membre Dernière intervention 21 août 2018 - 24 mai 2004 à 01:53
dks31 Messages postés 14 Date d'inscription dimanche 28 septembre 2003 Statut Membre Dernière intervention 21 août 2018 - 28 mai 2004 à 00:18
Bonjour,

Je travaille (enfin j'essais...) sous VBA Excel (il semble que ça ait son importance).
Donc je n'ai pas de case "Index" pour les CheckBox.

Comment selectionner un checkbox bien precis (j'en ai 100) en fonction d'une variable.
Je m'explique:

Dim X as Integer
X = 1
DebutBoucle:
If CheckBox(X).visible=true then ...
If X=101 then Exit Sub
X=X+1
Goto DebutBoucle

Et là ça bloque sur le "CheckBox(X)". Un probleme de syntaxe ? J'en ai essayé un paquet et rien ne marche.
Toutes les solutions que j'ai vu passent par l'Index (bien pratique apparement...) mais vu que pour VBA Excel j'en ai pas, comment faire ?!

Merci d'avance pour votre aide (détaillée si possible, car je debute...)

7 réponses

Mooiz Messages postés 128 Date d'inscription mercredi 25 juin 2003 Statut Membre Dernière intervention 8 juillet 2005
24 mai 2004 à 10:15
C'est normal : en vba la notion d'index n'existe pas. Il existe quand même un moyen d'acceder à une liste d'objets : la collection OLEObjects.
Tu peux acceder à tous les objets de ton classeur en appelant OLEObjects(i).Object. Cependant, tu accederas également aux objets qui ne sont pas des checkbox, donc il faudra faire un test supplementaire pour verifier qu'il s'agit d'une checkbox (sur le nom ou sur le type par exemple). Ca donne à peu près ca :

for i = 1 to OLEObjects.count
If OLEObject(i).Object.visible=true and instr(0, OLEObject(i).Object.name, "check")
then ...
end if
end

note je ne suis pas sur que mon passage de paramètre pour la fonction instr soit correct, à verifier. De plus il serait plus prudent de faire un test sur le type de l'objet :

If OLEObject(i).Object.visible=true and TypeName(OLEObject(i).Object) = "CheckBox"
then ...

voila, si j'ai fait des fautes dans mon code, n'hesite pas à le dire
0
dks31 Messages postés 14 Date d'inscription dimanche 28 septembre 2003 Statut Membre Dernière intervention 21 août 2018
24 mai 2004 à 11:59
Je n'ai malheureusement pas la possibilité de verifier ça avant ce soir mais je voulais quand meme te remercier de la rapidité de ta reponse.
Je vous tiens au courant :p
0
dks31 Messages postés 14 Date d'inscription dimanche 28 septembre 2003 Statut Membre Dernière intervention 21 août 2018
24 mai 2004 à 18:01
Mais euuuuhhhhh !

Ca marche pas...
Il ne reconnait pas "OLEObjects". Je l'ai changé dans la ligne "For" en "100" mais ça a blocké apres sur "OLEObject(i)". Comme je travaille dans un UserForm, j'ai essayé sur une feuille excel mais le pb reste le meme: "Argument non defini"

J'ai tapé exactement:

Private Sub CommandButton1_Click

for i = 1 to OLEObjects.count
If OLEObject(i).Object.visible=true and TypeName(OLEObject(i).Object) = "CheckBox"
then OLEObject(i).Object.visible=true
End If
Next

End sub

C'est d'autant plus agaçant que cette solution repondrait parfaitement à mes besoins !... J'espere que ce n'est qu'un pb de syntaxe et que ça va marcher !
0
Mooiz Messages postés 128 Date d'inscription mercredi 25 juin 2003 Statut Membre Dernière intervention 8 juillet 2005
25 mai 2004 à 08:39
Ok alors en remplacant OLEObjects(i) par feuil1.OLEObjects(i) (si la feuille sur laquelle tes contrôles se trouvent s'appelle feuil1, sinon faut changer). Normalement la saisie auto devrait te guider sur OLEObjects dans la liste des attributs de feuil1 (je suis pas sur d'être bien clair la... mais l'essentiel c'est de rajouter le nom de la feuil pour acceder à OLEObjects)

désolé pour l'erreur.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dks31 Messages postés 14 Date d'inscription dimanche 28 septembre 2003 Statut Membre Dernière intervention 21 août 2018
26 mai 2004 à 00:59
Merci Mooiz

Je viens d'essayer avec mon Userform:
Je tape "MonUseform." et là, probleme: dans les propositions, il n'y a pas OLEObject ! J'ai essayé de la taper directement, et ça veut pas...
Pour la ligne "For", je peux remplacer OLEObjects par "Controls" et ça marche mais en essayant de l'appliquer au reste, evidement ça passe pas...

Je commence un peu à deseperer. Je cherche de mon coté un moyen. J'ai trouvé ce fichier (http://xlbysteph.free.fr/aideinformatique/fichiers/excombo1.xls) qui a l'air pas mal.
Reste à decortiquer le code et à le comprendre. Mais en perseverant, je vais bien finir par y arriver ;D

Quoi qu'il en soit, merci pour le temps que tu passes à m'aider.
0
Mooiz Messages postés 128 Date d'inscription mercredi 25 juin 2003 Statut Membre Dernière intervention 8 juillet 2005
26 mai 2004 à 09:16
Ok j'avais pas compris que tu travaillais avec des userform. Dans ce cas tu as trouvé la bonne piste avec Controls, le problème que tu as rencontré doit venir du fait qu'il n'est pas necessaire de passer par un attribut Object pour acceder aux objets quand tu fais appel à control. Donc je te propose une autre version :

For i = 1 To MonUseform.Controls.Count If MonUseform.Controls(i).Visible True and TypeName(MonUseform.Controls(i)) "CheckBox"
Then
a = 1
End If
Next

et là a priori ca marche
0
dks31 Messages postés 14 Date d'inscription dimanche 28 septembre 2003 Statut Membre Dernière intervention 21 août 2018
28 mai 2004 à 00:18
Gggrrrrrrrrrrrrrrrr

Bein non, toujours pas !......

J'ai tout verifié plusieurs fois et ça veut pas marcher. Tu l'as essayé ?

Si oui et que ça marche, c'est que j'ai definitivement la polio.
Sinon, laisse tombé, j'abandonne... Je vais taché de trouver un autre systeme.

Merci beaucoup à toi ;D
0
Rejoignez-nous