Control(i).Caption [Résolu]

Signaler
Messages postés
206
Date d'inscription
samedi 17 janvier 2009
Statut
Membre
Dernière intervention
5 mars 2013
-
Messages postés
206
Date d'inscription
samedi 17 janvier 2009
Statut
Membre
Dernière intervention
5 mars 2013
-
Bonjour,

Je cherche a transformer un code complique en quelquechose de plus simple si c'est toutefois possible.
(en VBA sur feuille Excel)

Ce code ci-dessous marche, mais pour beaucoup de control (dans ce cas un checkbox), c'est un peu lourd.
        Form1.CheckBox1.Caption = Sheet4.Cells(5, 2).Value
        Form1.CheckBox2.Caption = Sheet4.Cells(6, 2).Value
        Form1.CheckBox3.Caption = Sheet4.Cells(7, 2).Value
         ...
Je voudrais quelquechose comme ci-dessous:
For i = 1 To 30
        Form1.CheckBox(i).Caption = Sheet4.Cells(5+i, 2).Value
Next i

Mais a ce niveau, je suis un peu perdu: toute suggestion est la bienvenue.
Si vous avez un bout de code ou simplement une direction ou chercher, je serais content.
Merci,

JLuc01
NB.J'ai chercher un peu sur le forum, mais sans resultats: mon probleme, c'est chercher quoi, quel mot cle...

5 réponses

Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
6
Bonjour,

Utilise la collection Controls (lis-là dans ton aide en ligne) pour arriver à ce qui ressemble ) ceci :

  for i = 1 to 30
        Form1.Controls("CheckBox" & i)..Caption = Sheet4.Cells(4 + i ,2).Value
  next

Le fait, maintenant, que tu utilises le mot Form1 me donne à penser que tu as "pêché" un code VB6.
Si ton code est sur un userform de VBA, ne mets pas Form1.Controls, mais directement Controls("....).Caption
Messages postés
53
Date d'inscription
jeudi 17 août 2006
Statut
Membre
Dernière intervention
22 octobre 2010

Bonsoir

J'ai un petit doutte sur la faisabilité en VBA, mais en VB6 la solution était de créer dynamiquement les controles.

La manipulation est de créer un checkbox, et de lui mettre 0 à la propriété index

ensuite un truc du genre:

for i = 1 to 30
load toncheckbox(i)
set toncheckbox(i).container = me
with toncheckbox(i)
.caption = Sheet4.Cells(5+i, 2).Value
.top = i* 400 + 100
.left =0
.visible = true
end with
next i

Bon courage!
Messages postés
206
Date d'inscription
samedi 17 janvier 2009
Statut
Membre
Dernière intervention
5 mars 2013
1
Merci a tout les deux pour vos reponses.

En fait, mes CheckBox sont deja sur le UserForm. Je suppose que le code de gnieark construit les CheckBoxes sur le UserForm.

La reponse de jmf0 correspond mieux a mon probleme.

Le code suivant marche parfaitement:

Option Explicit
Dim CheckBox As New Control
Dim i As Integer
Sub Workbook_Open()
    For i = 1 To 14
        ufmSelection.Controls("CheckBox" & i).Caption = Sheet4.Cells(4 + i, 2).Value
    Next i
End Sub

J'avoue ne pas tout comprendre, mais je dois surement lire plus attentivement l'aide sur Collection Controls.
Par exemple, pourquoi je dois mettre un s au deuxieme mot Control et pourquoi je dois utiliser CheckBox et non MyCheckBox par exemple. C'est pas completement clair.

Merci de nouveau,
JLuc01
Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
6
RE, donc,

La collection Controls est une collection des contrôles présents surt ton userform. Controls (avec un s) donc, est le nom donnée par VBA à cette collection. (ouvre ton aide en ligne sur le mot Controls - collection).
Je ne vois pas l'utilité de
 Dim CheckBox As New Control
Personne ne t'oblige enfin à nommer d'une manière pluttôt que de l'autre !
Ainsi, donc, par exemple :
Controls("titi" & "2") se réfère au contrôle nommé titi2, quel qu'il soit (checkbox ou non)Controls("toto" & n) se réfère donc au contrôle nommé toto1 (si n 1), toto2 (si n2), etc...
Pour résumer : ouvre donc ton aide en ligne et lit ce qui y est dit à propos de la collection Controls.
Messages postés
206
Date d'inscription
samedi 17 janvier 2009
Statut
Membre
Dernière intervention
5 mars 2013
1
OK. Je crois que je comprends mieux le probleme.
Effectivement, la ligne Dim CheckBox As New Control ne sert a rien.

Merci encore,
JLuc01