Recherche sur objet Controls

Bonjour

Voici mon problème:

Dans un formulaire j'ai quatre Textbox avec leur label, un label de description et quatre boutons qui déclenchent des Sub sur clic.

Tout fonctionne correctement à ceci près que lorsque je boucle sur les Controls afin d'en déterminer le Type et le contenu ("") - for each txt in Me.Controls if TypeName(txt) = "Textbox" then ....la boucle ne se fait pas dans l'ordre que je souhaite. Le résultat est que les valeurs correspondantes ne sont pas copiées aux bons endroits dans mon tableau.

J'ai changé la place des textbox, les ai renommés, changé leur propriété Tab, rien n'y fait. J'ai dû biaiser en affectant à mes cellules la valeur contenue dans chaque textbox nominatif - .cells(ligne,1)=txt_nom.value au lieu d'une boucle sur txt.object

J'aimerai pouvoir comprendre la logique de boucle sur les contrôles avant de créer d'autres formulaires qui vont fonctionner sur le même principe.

Merci de votre aide

Claude

Bonjour Claude, bonjour le forum,

Quand tu boucles sur les contrôles, l'ordre se fait selon la création du contrôle. Il faut donc être méticuleux et les créer dans l'ordre que tu voudras voir la boucle s’exécuter. L'ordre des tabulations n'influe en rien sur la boucle des contrôles...
Ça reste à être confirmé par les balèzes de ce forum mais je crois que c'est ça.

Merci ThauThème. C'est la conclusion à laquelle j'étais arrivé. Je voulais voir si elle était partagée.

Le hic c'est que lors de la création d'un userform, il n'est pas certain que ce soit sa forme définitive.

Aussi une petite astuce autrement que de la rigueur pourrait aider. Si elle existe bien sur. Attendons de voir si les "balèzes" comme tu les appelle auront d'autres solutions.

Bonne journée.

Re,

Une solution que j'utilise souvent c'est attribuer à la propriété [Tag] du contrôle, la valeur correspondant à la colonne ou sa valeur doit être renvoyé. Ça simplifie et ça ne dépend plus de l'ordre des contrôles. par exemple :
- la TextBox3 a comme propriété [Tag] la valeur 1,
- la TextBox2 a comme propriété [Tag] la valeur 2,
- la TextBox1 a comme propriété [Tag] la valeur 3,

Le code ci dessous permet de renvoyer les valeurs au bon endroit :

Dim CTRL As Control
Dim LI As Integer

LI = 2 'évidemment tu la définiras autrement
For Each CTRL In Me.Controls
    If TypeOf CTRL Is MSForms.TextBox Then
        Cells(LI, Cint(CTRL.Tag)).Value = CTRL.Value
    End If
Next CTRL

Idem pour récupérer des données d'une ligne dans l'userForm :

Dim CTRL As Control
Dim LI As Integer

LI = 2 'évidemment tu le définiras autrement
For Each CTRL In Me.Controls
    If TypeOf CTRL Is MSForms.TextBox Then
        CTRL.Value = Cells(LI, CInt(CTRL.Tag))
    End If
Next CTRL

super je n'y avais pas pensé. Je note ça dans un coin pour les prochains projets. Pour celui en cours, pas envie de ré écrire mon code qui fonctionne bien.

Bon WE

Rechercher des sujets similaires à "recherche objet controls"