XL 2010 Me.Controls("TextBox & i").Value = Cells(k, 3)

Bob O' Deville

XLDnaute Junior
Bonjour,

J'ai rédigé les 2 boucles for imbriquées suivantes:

_______________________________________________________________________________________________
Dim collect As Collection
Dim Obj1 As Object
Dim NbArticle As Integer
Dim i As Integer
Dim j As Integer

Sheets("PARAMETRE").Range("B32").Value = ComboBox59.Value
NbArticle = Sheets("PARAMETRE").Range("B33").Value

Set collect = New Collection

'--------------------------------------------------------------------------------------------------------
Première boucle
'**********Créer nombre de Textbox en fonction de la valeur de la variable NbArticle************
'--------------------------------------------------------------------------------------------------------
For i = 1 To NbArticle

Set Obj1 = Me.MultiPage1.Pages(1).Controls.Add("forms.textbox.1", "Obj1", True)
With Obj1
.Name = "Designation" & i 'nom de la textbox (toto1, toto2, toto3, ...)
.Left = 15 'position par rapport au rebord gauche de l'UserForm
.Top = 20 * i + 65 'position par rapport au haut de l'UserForm
.Width = 160 'largeur de la zone d'écriture
.Height = 15 'hauteur de la zone d'écriture
'.Text = "je suis : " & Obj1.Name
'.Object.Value =
End With
'-------------------------------------------------------------------------------------------------------
Deuxième Boucle (imbriquée)
*****************Alimenter les textBox avec leur valeur respectives******************************
'-------------------------------------------------------------------------------------------------------
j = Sheets("MERCURIALE").Range("B65536").End(xlUp).Row
Sheets("MERCURIALE").Activate

For k = 2 To j

If Cells(k, 2).Value = ComboBox59.Value Then
Me.Controls("Designation & i").Value = Cells(k, 3)
'-------------------------------------------------------------------------------------------------------
Ce qui ne marche pas
************** Me.Controls("Designation & i").Value = Cells(k, 3)*********************

La même valeur alimente toutes les TextBox alors qu'elle devrait être différente
Ainsi, si je remplace Me.Controls("Designation & i").Value = Cells(k, 3)
par Cells(k, 4).Value = Cells(k, 3) La boucle fait le job
'-------------------------------------------------------------------------------------------------------
End If

Next k

Next i

Set Obj1 = Nothing

End Sub
__________________________________________________________________________________________________________
J'ai essayé plein de truc, sans résultat. En gros je sèche. Je pense qu'il s'agit d'un problème de syntaxe.
Merci pour vos éclairages
 

Pièces jointes

  • Fichier test.xlsm
    77.1 KB · Affichages: 25
Solution
Re
un fichier modifié !
je ne sélectionnais pas la feuille source donc comme tu as codé Cells(k, 2) par exemple, sans référence a la feuille ou setrouve la Cellule .
c'est la feuille active qui était prise en compte ,donc toute les cellules étaient vides !enfin .
regarde le Code et adapte le
jean marie

ChTi160

XLDnaute Barbatruc
Re
vite fait
j'ai un peu simplifié le Code du Combobox (plus qu'une Boucle)
pour pouvoir faire ce que tu veux il va falloir je pense créé un Module de Classe qui prendra en Compte les TextBox "Qtés"
je regarde cela demain !
Bonne nuit
jean marie
 

Pièces jointes

  • Fichier test Chti160-2.xlsm
    75.7 KB · Affichages: 7

Bob O' Deville

XLDnaute Junior
Et l'on peut faire mieux , si l'on utilise un Tableau pour travaillé sur les données .
mais bon on va aller doucement Lol
jean marie
Bonsoir Jean Marie
Vous avez suggéré la création de module de classe hier. Je me suis donc renseigné sur le sujet. J'en vois le potentiel mais à ce stade c'est du chino-Hongrois traduit en vieux malais.
J'ai testé quelques exercices simples pour en comprendre le fonctionnement. Puis j'ai repris le code d'un internaute qui propose une solution sur le traitement des TextBox dans userform. J'ai copié coller pour voir ce qui ce passe. histoire de comprendre. Et bien il ne ce passe rien. Du coup je nage en eaux profondes.
Je ne serais pas contre que reprenions notre conversation. Mais doucement alors.
A plaisir Martial
 

Bob O' Deville

XLDnaute Junior
Bonjour Jean Marie
Je viens de tester sur mon projet tout marche à merveille. Cela dit je ne comprend pas mieux les arcanes du module de classe. Je dit ça parce que j'essaye par moi-même d'ajouter à la valeur de la textbox "soit" l'unité correspondante;(Kg , L, U) précisée dans la textbox unité..
Dans le module de classe j'ai donc créé un "ch'ai plus comment on appel ça" (J'ai des trous de mémoire qui me viennent... ) écrit comme suit:

Public Ctrl_Unité As Object

Dans la fonctionoTBx_change()
j'ai ajouté la ligne ' Set Ctrl_Unité = .Controls("Soit" & idx), qui génère un bug. Sans surprise, je tâtonne.
Puis à la ligne 'Ctrl_Prix = Ctrl_Qté * oTBx ' j'ai ajouter ' & Ctrl_Unité. Oui je ne manque pas d'audace. au final ça donne ceci:l

Option Explicit
Public idx As Byte
Public Ctrl_Qté As Object
Public Ctrl_Prix As Object
Public Ctrl_Unité As Object
Public WithEvents oTBx As MSForms.TextBox

Private Sub oTBx_Change()

With UserForm2
oTBx = IIf(oTBx = Empty, 0, oTBx)
idx = Mid(oTBx.Name, InStr(1, oTBx.Name, "_") + 1)
Set Ctrl_Qté = .Controls("Colissage_" & idx)
Set Ctrl_Prix = .Controls("Soit_" & idx)
Set Ctrl_Unité = .Controls("Soit" & idx)
Ctrl_Prix = Ctrl_Qté * oTBx & Ctrl_Unité
End With

End Sub

et évidemment ça ne marche pas.
 

ChTi160

XLDnaute Barbatruc
Re
voilà ce que j'ai mis et qui semble fonctionner
VB:
Option Explicit
Public idx As Byte
Public Ctrl_Qté As Object
Public Ctrl_Prix As Object
Public Ctrl_Unité As Object
Public WithEvents oTBx As MSForms.TextBox

Private Sub oTBx_Change()
With UserForm2
oTBx = IIf(oTBx = Empty, 0, oTBx)
 idx = Mid(oTBx.Name, InStr(1, oTBx.Name, "_") + 1)
Set Ctrl_Qté = .Controls("Colissage_" & idx)
Set Ctrl_Prix = .Controls("Soit_" & idx)
Set Ctrl_Unité = .Controls("Unité_" & idx)
Ctrl_Prix = Ctrl_Qté * oTBx & " " & Ctrl_Unité
End With
End Sub
Mais si tu as besoin de faire des Calculs avec ces Controls "Ctrl_Prix" ca va poser problème !
il serait peut être mieux d'ajouter un Label ou l'on colle l'unité .
a voir
jean marie
 

Bob O' Deville

XLDnaute Junior
Je ne l'envisage pas sur cette page. Peut-être sur une autre. Je suppose que l'ajout de ce label ce fait comme les précédents dans la TExtBox59_change ?
Moi je relève deux choses. 1 que je n'étais pas très loin de la vérité quand à la rédaction du complément de code. "Il faut prendre chaque petite victoire comme elle vient"
2 En programmation je note que le moindre caractère en plus ou en moins rend une procédure inapte. Et que l'on peut chercher des heures sans savoir pourquoi. Du moins à mon niveau.
Tu étais programmateur dans ta vie d'avant le retraite?
Encore un grand merci Jean Marie
 

ChTi160

XLDnaute Barbatruc
re
Non je n'est jamais utilisé office que ce soit au travail ou chez moi Lol
je suis comme beaucoup autodidacte ! je code pour aider c'est tout et j'aime ca lol
un fichier pour imager ce que je disais!
jean marie
 

Pièces jointes

  • Fichier test Chti160-4.xlsm
    88.8 KB · Affichages: 3

Bob O' Deville

XLDnaute Junior
Bravo ! pour la maitrise autodidactée.
S'agissant du code. Tu as juste ajouté cinq lignes dans le module de classe. Je trouve ça magique.
Il n'est pas exclu que je m'en serve le moment venu. Et puisqu'on en parle (pas pour tout de suite, mais je sens que je vais exploiter cette faculté) Additionner les objects "Soit" dans une textbox fixe, tu verrais ça comment?
En attendant faut que j'aille bosser.
Quand le temps me viendra, je pense passer un peu de temps à la compréhension de la programmation.
C'est une environnement qui me fascine.
Bien à toi Jean Marie
 

Discussions similaires

Réponses
11
Affichages
236
Réponses
0
Affichages
83