dks31
Messages postés14Date d'inscriptiondimanche 28 septembre 2003StatutMembreDernière intervention21 août 2018
-
24 mai 2004 à 01:53
dks31
Messages postés14Date d'inscriptiondimanche 28 septembre 2003StatutMembreDernière intervention21 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...)
Mooiz
Messages postés128Date d'inscriptionmercredi 25 juin 2003StatutMembreDerniè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
dks31
Messages postés14Date d'inscriptiondimanche 28 septembre 2003StatutMembreDernière intervention21 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
dks31
Messages postés14Date d'inscriptiondimanche 28 septembre 2003StatutMembreDernière intervention21 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 !
Mooiz
Messages postés128Date d'inscriptionmercredi 25 juin 2003StatutMembreDerniè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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
dks31
Messages postés14Date d'inscriptiondimanche 28 septembre 2003StatutMembreDernière intervention21 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.
Mooiz
Messages postés128Date d'inscriptionmercredi 25 juin 2003StatutMembreDerniè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