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

Création d'un tableau de controles

10 réponses
Avatar
Eric
Bonjour,

En Vb6, il est très facile en mode création de créer un groupe de controles
de même nature par un simple copier-coller ( Ex: un form frmTest contenant
un controle txtTest. Un simple copier coller du controle txtTest dans
frmTest crée un groupe de controles, si on accepte, txtTest() nommés
txtTest(0), txtTest(1) ...)

Est-il possible de faire la même chose sous Excel dans un UserForm.
J'ai ainsi 15 controles textBox devant permettre la saisie de données
numériques et j'aurais voulu par ce biais pouvoir faire des boucles de
lecture pour des calculs sans avoir à utiliser les noms des contrôles mais
les indices du groupe.

J'ai essayé de nommer le 1er TextBox comme txtSortie(0) mais j'ai en retour
un message d'erreur : Nom d'objet incorrect
Si je le nomme txtSortie et fais un copier-coller, il n'est pas possible
de créer un groupe. Chaque copie étant indépendante et prenant par défaut
TextBox1, ..., TextBoxK


Merci d'avance

A+
Eric

10 réponses

Avatar
JpPradier
Bonjour Eric

Tu peux utiliser Controls pour faire ta boucle :
For i = 0 To 4
toto = UserForm1.Controls.Item(i).Name
If Left(toto, 7) = "TextBox" Then UserForm1.Controls.Item(i).Value = i
Next


Il me semble qu'il y a plus simple pour controler si c'est un textbox ou autre, mais je ne l'ai pas
en tete.

j-p
Avatar
Misange
Bonjour,
regarde ici :
http://www.excelabo.net/xl/controles.php#bouclecontrole

Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta


on 28/11/2004 13:18:
Bonjour,

En Vb6, il est très facile en mode création de créer un groupe de controles
de même nature par un simple copier-coller ( Ex: un form frmTest contenant
un controle txtTest. Un simple copier coller du controle txtTest dans
frmTest crée un groupe de controles, si on accepte, txtTest() nommés
txtTest(0), txtTest(1) ...)

Est-il possible de faire la même chose sous Excel dans un UserForm.
J'ai ainsi 15 controles textBox devant permettre la saisie de données
numériques et j'aurais voulu par ce biais pouvoir faire des boucles de
lecture pour des calculs sans avoir à utiliser les noms des contrôles mais
les indices du groupe.

J'ai essayé de nommer le 1er TextBox comme txtSortie(0) mais j'ai en retour
un message d'erreur : Nom d'objet incorrect
Si je le nomme txtSortie et fais un copier-coller, il n'est pas possible
de créer un groupe. Chaque copie étant indépendante et prenant par défaut
TextBox1, ..., TextBoxK


Merci d'avance

A+
Eric


Avatar
Eric
Bonjour Jean-Paul,

Merci beaucoup de m'avoir répondu.
Mon problème se situe au niveau de la création de ces contrôles sur
l'UserForm en mode Design.
Je voudrais créer des contrôles TextBox dont la propriété Name serait :
TextBox(0), TextBox(1) ... plutôt que TextBox1, TextBox2 ... ce qui me
permettrait de faire une boucle de calcul du genre :

Dim intI as Integer, dblCumul as Double
For I = 0 To 14
dbCumulÛlCumul+CDbl(TextBox(I).Value)
Next I

Or je n'arrive pas à créer ce type de controles (sous VB6, on parle de groupe
de contrôles). Je l'ai fait sans aucun problème en VB6 mais là sous Excel, je
ne sais pas faire.

Aurais-tu une idée ?

Merci encore
Eric
Avatar
Eric
Bonjour Misange,

Merci beaucoup de m'avoir répondu.
Mon problème se situe au niveau de la création de ces contrôles sur
l'UserForm en mode Design.
Je voudrais créer des contrôles TextBox dont la propriété Name serait :
TextBox(0), TextBox(1) ... plutôt que TextBox1, TextBox2 ... ce qui me
permettrait de faire une boucle de calcul du genre :

Dim intI as Integer, dblCumul as Double
For I = 0 To 14
dbCumulÛlCumul+CDbl(TextBox(I).Value)
Next I

Or je n'arrive pas à créer ce type de controles (sous VB6, on parle de
groupe de contrôles. Je l'ai fait sans aucun problème) mais là sous
Excel, je ne sais pas faire.

Apparemment, la seule solution serait-elle de nommer chacun de ces
controles avec un radical commun suivi d'un rang et dans le code faire :

Soient radical1, radical2, ...

Dim intI as Integer, dblCumul as Double
For I = 0 To 14
dbCumulÛlCumul+CDbl(Controls("radical" & I).Value)
Next I

Cette méthode présente l'inconvénient de devoir nommer individuellement
chaque controle, dès lors que le nombre devient important, et faire une
procédure pour les renommer automatiquement pose probème dans la mesure
où il existe sur la feuille (UF) d'autres contrôles du même type mais à
usage différent.

Je suis persuadé (du moins en théorie) qu'il doit bien exister un moyen
pour créer ce fameux groupe.

Je suis preneur si tu as une idée ou une autre façon de voir le problème

Merci encore
Eric

Misange écrivait
news:uUxwa$:

Bonjour,
regarde ici :
http://www.excelabo.net/xl/controles.php#bouclecontrole

Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta




Avatar
Daniel.M
Éric,

AMA, la notion de tableau de contrôles n'existe pas en VBA :-(

Il y a la possibilité de mettre les contrôles dans un "Frame" et de boucler
ainsi:

Private Sub Frame1_Click()
Dim btn As Control
For Each btn In Frame1.Controls
Debug.Print btn.Name
Next btn
End Sub

Mais cela a le désavantage d'imposer un cadre géographique/physique (situé dans
un Frame d'un UserForm) alors que tu ne veux qu'un lien logique entre ceux-ci.

Conclusion: Si l'ensemble de tes contrôles sont situés dans un coin spécial de
ton UForm, tu pourrais les mettre dans un Frame. Sinon, il ne te reste, AMA, que
le truc suggéré par Misange.

Salutations,

Daniel M.

"Eric" wrote in message
news:
Bonjour Misange,

Merci beaucoup de m'avoir répondu.
Mon problème se situe au niveau de la création de ces contrôles sur
l'UserForm en mode Design.
Je voudrais créer des contrôles TextBox dont la propriété Name serait :
TextBox(0), TextBox(1) ... plutôt que TextBox1, TextBox2 ... ce qui me
permettrait de faire une boucle de calcul du genre :

Dim intI as Integer, dblCumul as Double
For I = 0 To 14
dbCumulÛlCumul+CDbl(TextBox(I).Value)
Next I

Or je n'arrive pas à créer ce type de controles (sous VB6, on parle de
groupe de contrôles. Je l'ai fait sans aucun problème) mais là sous
Excel, je ne sais pas faire.

Apparemment, la seule solution serait-elle de nommer chacun de ces
controles avec un radical commun suivi d'un rang et dans le code faire :

Soient radical1, radical2, ...

Dim intI as Integer, dblCumul as Double
For I = 0 To 14
dbCumulÛlCumul+CDbl(Controls("radical" & I).Value)
Next I

Cette méthode présente l'inconvénient de devoir nommer individuellement
chaque controle, dès lors que le nombre devient important, et faire une
procédure pour les renommer automatiquement pose probème dans la mesure
où il existe sur la feuille (UF) d'autres contrôles du même type mais à
usage différent.

Je suis persuadé (du moins en théorie) qu'il doit bien exister un moyen
pour créer ce fameux groupe.

Je suis preneur si tu as une idée ou une autre façon de voir le problème

Merci encore
Eric

Misange écrivait
news:uUxwa$:

Bonjour,
regarde ici :
http://www.excelabo.net/xl/controles.php#bouclecontrole

Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta






Avatar
Misange
Avec des textbox nommés txt1, txt2....
For I = 0 To 14
dbCumulÛlCumul+CDbl(controls("txt" & i).value)
Next I

Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta


on 28/11/2004 16:45:
Bonjour Misange,

Merci beaucoup de m'avoir répondu.
Mon problème se situe au niveau de la création de ces contrôles sur
l'UserForm en mode Design.
Je voudrais créer des contrôles TextBox dont la propriété Name serait :
TextBox(0), TextBox(1) ... plutôt que TextBox1, TextBox2 ... ce qui me
permettrait de faire une boucle de calcul du genre :

Dim intI as Integer, dblCumul as Double
For I = 0 To 14
dbCumulÛlCumul+CDbl(TextBox(I).Value)
Next I

Or je n'arrive pas à créer ce type de controles (sous VB6, on parle de
groupe de contrôles. Je l'ai fait sans aucun problème) mais là sous
Excel, je ne sais pas faire.

Apparemment, la seule solution serait-elle de nommer chacun de ces
controles avec un radical commun suivi d'un rang et dans le code faire :

Soient radical1, radical2, ...

Dim intI as Integer, dblCumul as Double
For I = 0 To 14
dbCumulÛlCumul+CDbl(Controls("radical" & I).Value)
Next I

Cette méthode présente l'inconvénient de devoir nommer individuellement
chaque controle, dès lors que le nombre devient important, et faire une
procédure pour les renommer automatiquement pose probème dans la mesure
où il existe sur la feuille (UF) d'autres contrôles du même type mais à
usage différent.

Je suis persuadé (du moins en théorie) qu'il doit bien exister un moyen
pour créer ce fameux groupe.

Je suis preneur si tu as une idée ou une autre façon de voir le problème

Merci encore
Eric

Misange écrivait
news:uUxwa$:


Bonjour,
regarde ici :
http://www.excelabo.net/xl/controles.php#bouclecontrole

Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta






Avatar
JpPradier
Voici une boucle que tu peux utiliser pour la création :

For i = 1 To 4
Set Myctrl = Userform1.Controls.Add("Forms.TextBox.1")
Myctrl.Top = i * 20
Myctrl.Name = "Toto" & i
Next

et pour renseigner ou lire les textbox :

For I = 0 To 14
dbCumulÛlCumul+CDbl(Userform1.controls("Toto" & i).Value))
Next I

j-p
Avatar
Eric
re,

Compte tenu de la réponse de Daniel, je vais donc changer mon fusil
d'épaule et tenir compte de vos propositions.

J'avais essayé de renommer des controles déjà créés par une procédure mais
cela n'est pas possible. Ta réponse me permet de le réaliser car je n'avais
pas une minute pensé à les créer directement en code.

Merci encore.

Eric

"JpPradier" écrivait
news::

Voici une boucle que tu peux utiliser pour la création :

For i = 1 To 4
Set Myctrl = Userform1.Controls.Add("Forms.TextBox.1")
Myctrl.Top = i * 20
Myctrl.Name = "Toto" & i
Next

et pour renseigner ou lire les textbox :

For I = 0 To 14
dbCumulÛlCumul+CDbl(Userform1.controls("Toto" & i).Value))
Next I

j-p




Avatar
Eric
Bonjour Daniel,

Merci bien pour cette réponse très précise.
Je change donc de voie et suis les indications que, tous les 3, vous
m'avaient données.


Cordialement
Eric

"Daniel.M" écrivait
news::

Éric,

AMA, la notion de tableau de contrôles n'existe pas en VBA :-(

Il y a la possibilité de mettre les contrôles dans un "Frame" et de
boucler ainsi:

Private Sub Frame1_Click()
Dim btn As Control
For Each btn In Frame1.Controls
Debug.Print btn.Name
Next btn
End Sub

Mais cela a le désavantage d'imposer un cadre géographique/physique
(situé dans un Frame d'un UserForm) alors que tu ne veux qu'un lien
logique entre ceux-ci.

Conclusion: Si l'ensemble de tes contrôles sont situés dans un coin
spécial de ton UForm, tu pourrais les mettre dans un Frame. Sinon, il
ne te reste, AMA, que le truc suggéré par Misange.

Salutations,

Daniel M.



Avatar
Eric
re,

Compte tenu de la réponse de Daniel, je vais donc changer mon fusil
d'épaule et tenir compte de vos propositions.

Merci encore de la qualité de vos réponses et de la rapidité

Cordialement

Eric

Misange écrivait news:#uAlVWW1EHA.3416
@TK2MSFTNGP09.phx.gbl:

Avec des textbox nommés txt1, txt2....
For I = 0 To 14
dbCumulÛlCumul+CDbl(controls("txt" & i).value)
Next I

Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta