Insertion données - Listbox vers nouvelle colonne Excel

Bonjour à tous,

Voici mon défi du moment.

J'alimente des produits dans une Listbox. Chaque ligne de la Listbox correspond à un produit.

J'aimerai insérer les valeurs d'une colonne (colonne "Quantité" index 3) de chaque ligne de la Listbox vers la colonne AB de la feuille "Produits".

L'insertion des données se fait via un bouton "Finaliser commande"

Voici mon premier test mais pas probant du tout :

'Insertion nouvelle colonne
Set fr = Sheets("produits")
fr.Range("AB:AB").Insert
fr.Columns("AB:AB").ColumnWidth = 20

'Insertion information de la commande
fr.Cells(1, "AB") = "Commande"
fr.Cells(2, "AB") = Usf_CProduits.TBox_ref_com
fr.Cells(3, "AB") = Usf_CProduits.TBox_date_com

Lg = 5
'Test de boucle mais qui ne convient pas
For i = 0 To LstBox_commande.ListCount - 1
      Cells(Lg, 28) = LstBox_commande.List(i): Lg = Lg + 1

Next i

Unload Me

End Sub

Petit subtilité, qui me pose problème, chaque ligne de la Listbox doit correspondre à la bonne ligne de la feuille. En fait le nom du produit correspondant à une ligne dans la Listbox doit correspondre au même produit sur la feuille "Produits".

Je joins mon fichier test pour plus de clarté

13test.xlsm (172.35 Ko)

Merci par avance pour votre aide.

Bonjour,

À 2 endroits, j'ai enlevé le signe euro ... car, les champs formulaires sont du texte et il devient parfois difficile de traiter ce symbole dans les champs où l'on veut récupérer du texte en valeur.

Mais, c'est dû à mon manque d'expérience, je présume.

Quand tu gères CbBox_produit et Tbox_produit_en, tu as déjà trouvé la bonne ligne.

Tout au haut du code dans le formulaire, j'ai ajouté la variable LLigne où j'y stocke le numéro de la ligne.

Il ne reste plus qu'à lire le contenu en valeur de TBox_qte et d'utiliser LLigne, ce qui donne :

fr.Cells(LLigne, "AB").Value = Me.TBox_qte.Value

Voilà, espérant que ça convienne ...

ric

8axelgrel-test.xlsm (175.28 Ko)

Merci ric pour votre réponse.

Ce n'est pas tout à fait le résultat que je recherche.

Je souhaite insérer la valeur quantité de la Listbox "LstBox_commande.List(i, 3)" pour chaque ligne de la Listbox.

Et il faut que chaque ligne de la Listbox corresponde aux ligne de la feuille selon le nom du produit.

Je sais pas si c'est plus clair.

Après avoir réfléchi un peu plus au problème voici une ébauche, je suis certainement très loin de la solution mais ça peut vous indiquer la logique recherchée.

Private Sub Btn_finaliser_commande_Click()

Dim ValProduit, ValQte As String

'Insertion nouvelle colonne
Set fr = Sheets("produits")
fr.Range("AB:AB").Insert
fr.Columns("AB:AB").ColumnWidth = 20

'Insertion information de la commande
fr.Cells(1, "AB") = "Commande"
fr.Cells(2, "AB") = Usf_CProduits.TBox_ref_com
fr.Cells(3, "AB") = Usf_CProduits.TBox_date_com

'Test de boucle
For i = 0 To LstBox_commande.ListCount - 1
ValProduit = LstBox_commande.List(i, 2)
ValQte = LstBox_commande.List(i, 3)
    If fr.Cells(j, 5) = ValProduit Then 'Définir variable J qui teste toutes les lignes
        fr.Cells(j, 28) = ValQte        'Définir variable J qui teste toutes les lignes
    End If
Next i

Unload Me

End Sub
9test.xlsm (174.34 Ko)

Allô!

Tout à fait, je n'étais pas encore suffisamment réveillé.

Je replonge ...

ric

Bonjour,

Voilà... si je peux émettre un commentaire ... les erreurs de frappe sont sûrement plus probables sur le texte du Libellé ... que dirais-tu de l'idée d'utiliser le numéro de Référence à la place. Simple suggestion.

Mais, sur ce fichier, je suis resté avec le Libellé

ric

11axelgrel-test-v2.xlsm (175.17 Ko)

Bonjour ric,

Tu as raison pour le numéro de référence, j'ai choisit de suivre ton conseil et d'utiliser le numéro de référence.

Ça va être très pratique maintenant que ça fonctionne. Il me manquait cette boucle supplémentaire, je comprends mieux avec un peu d'aide.

Voilà le code mis à jour et opérationnel :

Private Sub Btn_finaliser_commande_Click()
Dim ValReference, ValQte As String

'Insertion nouvelle colonne
Set fr = Sheets("produits")
fr.Range("AB:AB").Insert
fr.Columns("AB:AB").ColumnWidth = 20

'Insertion information de la commande
fr.Cells(1, "AB") = "Commande"
fr.Cells(2, "AB") = Usf_CProduits.TBox_ref_com
fr.Cells(3, "AB") = Usf_CProduits.TBox_date_com

'Boucle Listbox
For i = 0 To LstBox_commande.ListCount - 1
    ValReference = LstBox_commande.List(i, 1)
    ValQte = LstBox_commande.List(i, 3)

    'Boucle dans la feuile "Produits" pour touver la ligne
    For j = 5 To Range("A65536").End(xlUp).Row
        If Range("C" & j) = LstBox_commande.List(i, 1) Then
            'On peut se passer de cette information si on ne veut pas modifier la base données
               fr.Cells(j, 5) = ValReference 'Jai créé un autre Usf pour modifier individuellement le produit de manière plus "sûre"
            fr.Cells(j, 28) = ValQte
        End If
    Next j
Next i

Unload Me

End Sub

Merci beaucoup ric pour ton aide et toutes tes réponses ultra rapide.

ric

Rechercher des sujets similaires à "insertion donnees listbox nouvelle colonne"