Dim i As Byte
Dim nom As TextBox
Select Case tbsMenu.SelectedItem.Index
Case 1
nom = txtNomMenu(0).Name
Case 2
nom = txtNomAccompagnement(0).Name
Case 3
nom = txtNomDessert(0).Name
End Select
For i = 1 To 14
nom(i).BorderStyle = vbFixedSingle
Next i
Les textbox sont crée dynamiquement est sont afficher avant cette procédure.
Je reçois le message d'erreur "Nombre d'argument incorrect ou affectation de
la propriété incorrecte."
Si quelqu'un a une idée sur ce que je ne fais pas correct ?
Merci Raymond Fournier
Hello,
Le plus gros problème est que tu emploies une variables contenant le
nom du contrôle et non le contrôle lui même.
Tu peux y palier en utilisant la collection Controls de la sorte:
Me.Controls(nom, i).BorderStyle = vbFixedSingle
Une autre possibilité est d'éviter directement l'usage du nom, au
profit d'une variable contenant la collection de contrôles voulue:
Dim Ctls As Object
[...]
Case 1:
Set Ctls = txtNomMenu
Case 2:
Set Ctls = [...]
[...]
Ctls(i).BorderStyle = vbFixedSingle
Il doit être possible d'utiliser mieux que Object pour le type, mais
je n'ai pas réussi à trouver le type précis dont dérivent ces
collections.
François
Plusieurs possibilités:
1- Tu veux mémoriser le nom d'un contrôle
Dim Nom as String
Nom = txtNomMenu(0).Name
2- Tu veux mémoriser une référence sur un contrôle pour pouvoir le
réutiliser par la suite pour accéder à ses propriétés
Dim txtControle as TextBox
Set txtControle = txtNomMenu(0)
txtControle.BorderStyle = vbFixedSingle
3- Tu veux mémoriser le nom d'un contrôle, et accéder à ses propriétés
en se basant sur son nom
Dim Nom as String
Nom = txtNomMenu(0).Name
Controls(Nom).BorderStyle = vbFixedSingle
Dans ton cas, le problème est que tu as une collection d'objets, et non
pas un objet seul, donc cela complique un peu les choses. Par contre,
comme tu connais le nom (dans le select), je comprends pas bien pourquoi
tu ne fais pas ton affectation à ce moment là. Enfin bref...
Donc voici un code qui devrais faire ce que tu veux:
Dim i as Integer 'Aucune raison d'être en Byte ici
Dim Nom as String
Select Case tbsMenu.SelectedItem.Index
Case 1
Nom = "txtNomMenu"
Case 2
Nom = "txtNomAccompagnement"
Case 3
Nom = "txtNomDessert"
End Select
For i = 1 to 14
Controls(Nom).Item(i).BorderStyle = vbFixedSingle
Next i
Vincent Guichard
"Vincent Guichard" wrote:
Merci a tout ceux qui mon éclairer. sa fonction numéro 1.
Raymond Fournier