Problème Variable dynamique pour récupérer des informations de TextBox d'un Userform

Caldou

XLDnaute Nouveau
Bonjour, j'ai googlisé tous les mots clés que j'ai pu trouvé sans avoir pu solutionner mon problème. Je vais essayer de l'expliquer le plus clairement possible. J'espère que quelqu'un pourra m'aider car je bloque vraiment.

J'ai créée un Userform afin de faciliter les processus de commande de produits. L'utilisateur rentre les quantités, référence, le nom du produit, le prix, les codes services etc...

Lorsqu'il valide, je dois récupérer les informations rentrées afin de les valider et ensuite les inclure dans une feuille qui sera imprimée. L'utilisateur ne peux commander que 7 produits d'un même fournisseur dans ce cas là.

J'ai décidé de récupérer les infos des textbox par catégories que j'inscris dans un tableau : exemple : un tableau tQuantite(7) où je vais récupérer les quantité rentrées par l'utilisateur de mes 7 textbox qui s'apellent z_Quantite_1, z_Quantite_2 ... z_Quantite_7.
Idem pour les Prix, Reference etc...

Le code :

Code:
Private Sub b_Commande_Valider_Click()


    Dim mFournisseur As String, mDemandeur As String
    Dim tQuantite(7) As String, tReference(7) As String, tProduit(7) As String
    Dim tService(7) As String, tProjet(7) As String, tPrix(7) As String
    Dim i As Integer

    tQuantite(1) = z_Quantite_1.Value
    tQuantite(2) = z_Quantite_2.Value
    tQuantite(3) = z_Quantite_3.Value
    tQuantite(4) = z_Quantite_4.Value
    tQuantite(5) = z_Quantite_5.Value
    tQuantite(6) = z_Quantite_6.Value
    tQuantite(7) = z_Quantite_7.Value
    
    tReference(1) = z_Reference_1.Value
    tReference(2) = z_Reference_2.Value
    tReference(3) = z_Reference_3.Value
    tReference(4) = z_Reference_4.Value
    tReference(5) = z_Reference_5.Value
    tReference(6) = z_Reference_6.Value
    tReference(7) = z_Reference_7.Value
    
    tProduit(1) = z_Produit_1.Value
    tProduit(2) = z_Produit_2.Value
    tProduit(3) = z_Produit_3.Value
    tProduit(4) = z_Produit_4.Value
    tProduit(5) = z_Produit_5.Value
    tProduit(6) = z_Produit_6.Value
    tProduit(7) = z_Produit_7.Value
    
    tService(1) = z_Service_1.Value
    tService(2) = z_Service_2.Value
    tService(3) = z_Service_3.Value
    tService(4) = z_Service_4.Value
    tService(5) = z_Service_5.Value
    tService(6) = z_Service_6.Value
    tService(7) = z_Service_7.Value
    
    tProjet(1) = z_Projet_1.Value
    tProjet(2) = z_Projet_2.Value
    tProjet(3) = z_Projet_3.Value
    tProjet(4) = z_Projet_4.Value
    tProjet(5) = z_Projet_5.Value
    tProjet(6) = z_Projet_6.Value
    tProjet(7) = z_Projet_7.Value
    
    tPrix(1) = z_Prix_1.Value
    tPrix(2) = z_Prix_2.Value
    tPrix(3) = z_Prix_3.Value
    tPrix(4) = z_Prix_4.Value
    tPrix(5) = z_Prix_5.Value
    tPrix(6) = z_Prix_6.Value
    tPrix(7) = z_Prix_7.Value

...
End Sub

Ce code marche plutôt bien, mais ca me parait lourd à lire et j'aurais bien aimé pouvoir le transformer dans des boucles For pour moi ca aurait donné quelque chose du genre :

Code:
    For i = 1 To 7
        tQuantite(i) = z_Quantite_ & i & .Value
    Next i

qui remplacerait :

    tQuantite(1) = z_Quantite_1.Value
    tQuantite(2) = z_Quantite_2.Value
    tQuantite(3) = z_Quantite_3.Value
    tQuantite(4) = z_Quantite_4.Value
    tQuantite(5) = z_Quantite_5.Value
    tQuantite(6) = z_Quantite_6.Value
    tQuantite(7) = z_Quantite_7.Value

Je sais pertinemment que ce code ne marche pas et je n'ai trouvé aucun sujet capable de résoudre mon dilemne. La boucle For est d'autant plus intéressante qu'elle me permettrait d'inclure des If. Le fait de passer par plusieurs lignes de commandes m'obligeraient à mettre des If pour chaque ligne de récupération de données.

Soit il n'y a aucune solution et le code va prendre beaucoup de place, soit il existe un "truc" qui me permettrait de gagner en lisibilité et practicité dans code.

Merci d'avance pour vos suggestions !
 

Fred0o

XLDnaute Barbatruc
Re : Problème Variable dynamique pour récupérer des informations de TextBox d'un User

Bonjour Caldou et bienvenue sur le forum.

Si ton UserForm s'appelle UserForm1, tu peux essayer ceci :
VB:
For i = 1 To 7
    tQuantite(i) = UserForm1.Controls("z_Quantite_" & i)
Next i

Code à adapter à ton besoin.

A+
 

Caldou

XLDnaute Nouveau
Re : Problème Variable dynamique pour récupérer des informations de TextBox d'un User

Bonjour Caldou et bienvenue sur le forum.

Si ton UserForm s'appelle UserForm1, tu peux essayer ceci :
VB:
For i = 1 To 7
    tQuantite(i) = UserForm1.Controls("z_Quantite_" & i)
Next i

Code à adapter à ton besoin.

A+

Oh parfait ca fonctionne magnifiquement !

Juste avant de poster ma réponse, j'ai cherché ce que faisait Controls sans trop comprendre comment cela fonctionnait exactement. Qu-est ce que cela récupère ? La Value du Control sous forme d'une String ?
(Donc que pour "simplifier" UserForm1.Controls("z_Quantite_" & i) voudrait dire implicitement UserForm1.Controls("z_Quantite_" & i).Value ?)

Merci en tout cas, cela va grandement m'aider pour la suite !
 

Fred0o

XLDnaute Barbatruc
Re : Problème Variable dynamique pour récupérer des informations de TextBox d'un User

Re-bonsoir Caldou.

C'est cela, t'as tout compris. Lorsqu'on ne spécifie rien après "UserForm1.Controls("z_Quantite_" & i)", cela revient implicitement à .Value
Il en est de même pour Range("") qui est équivalent à Range("").Value
Mais il faut faire attention, cela provoque quelquefois des erreurs de compilation.
 

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 305
Messages
2 087 084
Membres
103 459
dernier inscrit
Arnocal