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

Placer un contrôle dans une variable

3 réponses
Avatar
Raymond Fournier
Je voudrais placer le nom d'un textbox dans une variable. J'ai fais

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

3 réponses

Avatar
François Picalausa
On Jul 5, 2:22 pm, Raymond Fournier
wrote:
Je voudrais placer le nom d'un textbox dans une variable. J'ai fais

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 affectati on 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
Avatar
Vincent Guichard
Raymond Fournier a écrit :
Je voudrais placer le nom d'un textbox dans une variable.


Ok. Ce n'est pas ce que tu fais (ou semble faire) dans le code que tu
donne en exemple ci-dessous. Peux-tu expliciter tes besoins?

J'ai fais

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




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
Avatar
Raymond Fournier
"Vincent Guichard" wrote:

Raymond Fournier a écrit :
> Je voudrais placer le nom d'un textbox dans une variable.
Ok. Ce n'est pas ce que tu fais (ou semble faire) dans le code que tu
donne en exemple ci-dessous. Peux-tu expliciter tes besoins?

> J'ai fais
>
> 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
>

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



Merci a tout ceux qui mon éclairer. sa fonction numéro 1.
Raymond Fournier