Listbox à plusieurs colonne

Bonjour,

Il y a quelques temps un collègue à moi a créé ce fichier dont nous nous servons tous les jours. Depuis ce temps, il a changer d'entreprise et nous avons besoin d'y ajouter une toute petite fonctionnalité, je reviens donc naturellement vers vous en espérant que vous puissiez m'aider.

Je m'explique :

Au remplissage du formulaire, lors du choix de meuble en combobox3, une liste de pièce apparait en listbox1. J'aimerai y faire apparaitre dans une deuxième colonne de la listbox1 le repère de cette pièce (on le trouve en colonne M de l'onglet BDDmarqueX). Ca serait donc une listbox multicolonne avec en 1ere colonne le repère (colonne M) puis le nom de la pièce (colonne A)

J'a fouillé sur le net, essayé diverses solutions mais n'étant pas un pro de la VBA (et loin de là...) je n'ai pas réussi à trouver LA solution.

Je vous met mon fichier en PJ pour que vous compreniez mieux de quoi je parle.

Merci d'avance pour votre précieuse aide 🙌

Cordialement

Bonjour,

En espérant bien avoir compris la demande, voici une proposition où la liste a bien une deuxième colonne contenant le repère de la pièce.

Bonjour,

Bizarre cela me rappelle quelque chose ce fichier. Qui plus est la manière d'écrire le code...

Allez dans l'USF et modifiez ces deux codes :

1. Code d'ouverture

Private Sub UserForm_Initialize()

With Sheets("Listes")
    ComboBox1.List = .ListObjects("T_Marques").DataBodyRange.Value
    ComboBox4.List = .ListObjects("T_MotifRelance").DataBodyRange.Value
    ComboBox5.List = .ListObjects("T_Noms").DataBodyRange.Value
End With
with ListBox1
    .ColumnCount = 2
    .ColumnWidths = "150pt;60pt"
End with
End Sub

2. code affichage

Private Sub ComboBox3_Change()
Dim Dlig As Integer, i As Integer

ListBox1.Clear

With Worksheets("bdd" & TextBox1.Value)
    Dlig = .Range("A" & .Rows.Count).End(xlUp).Row
    For i = 2 To Dlig
        If .Range("L" & i).Value = ComboBox3.Value Then
            ListBox1.AddItem .Range("A" & i)
            ListBox1.List(ListBox1.ListCount - 1, 1) = .Range("M" & i)
        End If
    Next i
End With

End Sub

Cordialement

Wow ! quelle réactivité !

Dan, tu as déjà travaillé sur ce fichier ?

Merci beaucoup ! Par hasard, sauriez vous comment faire pour que lorsque je génère mes fichiers CSV, les colonnes longueur / largeur / épaisseur de ce fichier se mette avec un séparateur point, et non virgule ? Car du coup je dois le modifier manuellement à chaque nouvelle relance.

Merci beaucoup !

Re

Dan, tu as déjà travaillé sur ce fichier ?

C'est un peu la manière de programmer qui a attirer mon attention et ensuite la feuille BDD.
Et effectivement, c'était pour Grouch, un long fil dont voici le lien --> https://forum.excel-pratique.com/s/goto/982634

Cordialement

Re, ah ouais d'accord tu as bien taffé le fichier, en tout cas merci de nous aider il nous fait gagner beaucoup de temps !

Question supplémentaire, lors de l'enregistrement du formulaire, ça vient compléter l'onglet BDD en rechercheV par rapport au nom de la pièce sélectionné dans le formulaire, est-ce qu'il est possible de faire de façon à ce que ça vienne chercher 2 infos ? (ex le Nom du meuble sélectionné et son repère) au lieu du nom de pièce.

Notre problème est que nous avons plusieurs pièces avec le même nom, mais avec des repères différents (ces pièces sont physiquement différentes)

Exemple:

Meuble 43_10_04_CARRE_CUISINE_AV pièce 10_04_25_FOND repère 201

Meuble 43_10_04_CARRE_CUISINE_AV pièce 10_04_25_FOND repère 202

Cordialement

Bonjour

Question supplémentaire, lors de l'enregistrement du formulaire, ça vient compléter l'onglet BDD en rechercheV par rapport au nom de la pièce sélectionné dans le formulaire, est-ce qu'il est possible de faire de façon à ce que ça vienne chercher 2 infos ? (ex le Nom du meuble sélectionné et son repère) au lieu du nom de pièce.

Il n'y a pas de Recherchev c'est du code qui envoie l'info vers la feuille BDD qui est utilisée pour les relances

Okay je vois, il n'y a donc pas de possibilité pour s'assurer de relancer la bonne pièce ?

Okay je vois, il n'y a donc pas de possibilité pour s'assurer de relancer la bonne pièce

Oui pourquoi pas mais avantune question :

est-ce que le repère est unique dans toute la feuille et ce quel que soit la ref du meuble sélectionné ?

De ce que je vois le code envoie dans la feuille BDD, si les infos suivantes sont correctes
1. La combo Nom du meuble correspond à une cellule de la colonne A
2. la textbox à gauche de la quantité, correspond à la cellule en colonne L

Si je comprends bien vous voulez aussi un troisième critère qui tient compte de la colonne M repère ?

Non il peut y avoir plusieurs repère identique, mais jamais dans le même meuble.

c'est l'inverse :

1. La combo Nom du meuble correspond à une cellule de la colonne L
2. la textbox à gauche de la quantité, correspond à la cellule en colonne A

Oui, c'est l'idée ! mais si c'est compliqué ou long à coder c'est pas grave je vais m'arranger pour que toutes les pièces aient des noms différents, ce n'est pas un soucie 😉

Cordialement

Bonjour,

Faites le test en modifiant les codes dans l'USF comme suit :

1. Ajoutez cette ligne juste en dessous de Option Compare text (donc tout au dessus des code l'USF)

Dim repere As Integer

2. Dans le code Private Sub ListBox1_Click(), ajoutez cette ligne

repere = ListBox1.List(ListBox1.ListIndex, 1)

3. Dans le code Private Sub CommandButton2_Click(), remplacez la ligne

If ComboBox3.Value = WS.Range("L" & i).Value And TextBox4.Value = WS.Range("A" & i).Value Then

par ceci

If ComboBox3.Value = WS.Range("L" & i).Value And TextBox4.Value = WS.Range("A" & i).Value And WS.Range("M" & i).Value = repere Then

faite un test pour voir si cela correspond à ce que vous voulez

Après il y a encore simplifier dans le code au niveau du GOTO fin. J'évite toujours d'utiliser des Goto.

Waw ca fonctionne, vraiment c'est fort 👏👏 Merci !

Dans la listbox1, c'est possible de trier les repères du plus petit au plus grand ?

Et après j'arrête de vous embêter 🤣

Cordialement

Dans la listbox1, c'est possible de trier les repères du plus petit au plus grand ?

c'est ce qu'il fait non ?

Non, il tri par rapport au nom de pièce actuellement, pas par rapport au repère (je pense)

Dans le fichier que vous avez posté, les ref sont bien triées.

Vous pouvez me donner un exemple peut être que je le reproduise ici

Rem : attention que si vous n'avez pas de Ref (comme je le vois dans le fichier à partir de la ligne 257), vous allez avoir un plantage. J'ai considéré que chaque item avait une ref. Est-ce bien le cas ?

Dans le fichier posté oui, dans celui-là ça ne marche pas (ex meuble 43-10-04-MEUBLE-CUISINE-AV)

Oui c'est bien le cas, toutes les pièces possèdent un repère

Dans le fichier posté oui, dans celui-là ça ne marche pas (ex meuble 43-10-04-MEUBLE-CUISINE-AV)

Allez dans l'USF au code Private Sub ComboBox3_Change().
Juste en dessous du END WITH, rajoutez ces lignes

Dim ref As Integer, j As Integer

For i = 0 To ListBox1.ListCount - 1
    For j = i To ListBox1.ListCount - 1
        If ListBox1.List(i, 1) > ListBox1.List(j, 1) Then
            ref = ListBox1.List(i, 1)
            ListBox1.List(i, 1) = ListBox1.List(j, 1)
            ListBox1.List(j, 1) = ref
        End If
    Next j
Next i

Reste éventuellement l'erreur si vous n'avez pas de ref dans la colonne, mais si vous êtes sûr de ne pas oublier. C'est bon. Le cas échéant on peut prévoir le coup.

Cordialement

Hello,

Yes ça trie bien la listbox !

En revanche ça ne renseigne pas toutes les informations dans BDD à l'enregistrement :/

Cordialement

En revanche ça ne renseigne pas toutes les informations dans BDD à l'enregistrement

Comment çà ? Vous m'avez dit que c'était bon avant.

Quelles sont les infos qui ne sont pas enregistrées ?

Sur le fichier vierge ça fonctionne très bien, en revanche sur mon fichier d'utilisation ca ne reporte pas dans BDD les infos qui ne sont pas dans le USF. (Matériau/Ep/Long/Larg/Detail flux/Option/SDF/ Chants/Rep/non ensemble/Lien)

Cordialement

Rechercher des sujets similaires à "listbox colonne"