Récupérer la valeur de la ligne dans une ListBox pour un CommandButton

Bonjour,
Je voudrais "récupérer" la valeur de la ligne sélectionnée dans la listBox pour pouvoir m'en servir dans un Command Button.
Par exemple, dans la capture ci-dessous, un devis est sélectionné et je dois pouvoir agir soit avec le bouton "Afficher le devis", ou "Compléter ce devis".
Afficher le devis déclenche l'ouverture du formulaire "DetailsDuDevis"
Compléter ce devis récupère le Numéro du devis pour l'afficher dans la TextBoxDevisEnCours situé dans l'onglet Honda.

2025 08 20 144445

Pour le formulaire DétailDuDevis , j'ai opté pour utiliser la propriété Caption des Labels, je ne sais pas si c'est une bonne idée, plutôt que d'utiliser des TextBox.

dites moi si c'est une bêtise ou pas.

2025 08 20 161006

attention, j'ai supprimé la Version 4 et mis la version 5.

L'indication commune entre le TableauClients et le TableauDevis est le numéro de ligne du Client et le champs NoLigneClient ,(que j'ai rempli à la main) en colonne G du TableauDevis.

2025 08 20 170455

Merci d'avance de votre aide.

Boujour papicx,

Pour commencer : comment affichez-vous cette fenêtre "Tous les devis" que vous nous proposez ? Quel bouton de commande et dans quel onglet ?

Bonjour

Fait pour afficher devis

Je n'ai pas trouvé de description?

A+ François

@Optimix : désolé, je n'ai pas fermé le fichier sur le bon onglet.
C'était avec le bouton "Sélectionner un devis" dans l'onglet Devis

@fanfan : Merci beaucoup, ça fonctionne hyper bien ! Je vais le compléter autant que je peux (il manque la moto et la désignation), mais tu en as fait bien plus que demandé.
Je n'ai pas encore exploré le code et toutes les fonctionnalités de ton fichier.

Je ne te cache pas que ça me convient car je peine à faire chaque ligne de code.

Je n'ai pas trouvé de description?

C'est un peu normal car le TableauDevis actuel a été rempli à la main.
La description de la pièce est dans le Tableau1 qui est dans l'onglet Honda. Le champs commun est New_Ref_Honda en colonne D

En fait, il y a tout un processus à mettre en place pour le remplir, dans un futur très proche, que je dois mettre en place.
Je ferai ma demande d'aide, éventuellement, plus tard.

Je dois faire en sorte que ma demande soit claire et les tableaux, formulaires, etc. suffisamment avancés si je veux une réponse qui soit en cohérence avec mon projet, sans vous faire perdre du temps et de l'énergie pour rien, et les miens par la même conséquence.

Bonjour à tous,

J'ai donc ajusté ce que j'ai pu, à grand renfort de patience.

J'ai détecté une petite erreur.
Quand on est sur le formulaire TousLesDevis, si on clique sur "Afficher ce devis" sans en avoir sélectionné 1, on a une erreur d'exécution "94".

2025 08 22 141114

Comme vous voyez, j'ai essayé de mettre un If pour gérer ça, mais vu mon niveau...


Pour la Designation, je n'ai pas trouvé le moyen de faire la relation avec le Tableau1

[Tableau1[designation]]

qui contient l'information. Ça, c'est une chose.

Concernant la méthode employée pour récupérer les infos du devis, je pense qu'il faut faire une boucle car il y a 20 lignes possibles par devis.
(J'en avais mis que 3 juste pour commencer les tests, j'ai ajouté les 17 suivantes il y a qq minutes).
Chaque ligne contient 6 infos :

  • 5 qui viennent du TableauDevis, (Reference, Adap, Qu, Prix) chacun étant suivi d'un nombre à 2 chiffres de 01 à 20.
  • 1 qui vient du Tableau1 (designation)

Le champs commun est New_Ref_Honda du Tableau1 (onglet Honda) qui correspond à Referencexxdu TableauDevis (onglet Devis)

   With DetailsDuDevis.ListBoxDetailDuDevis
     If Range("H" & Val(Me.ListBoxTousLesDevis.Value)) <> "" Then
       .AddItem Range("H" & Val(Me.ListBoxTousLesDevis.Value))                          ' Reference01
       .List(.ListCount - 1, 1) = Range("J" & Val(Me.ListBoxTousLesDevis.Value))        ' Adap01

   '    .List(.ListCount - 1, 2) = Range([Tableau1[designation]] & Val(Me.ListBoxTousLesDevis.Value))      ' champs "designation" du Tableau1 (onglet Honda)    // papicx 21/08/2025

       .List(.ListCount - 1, 3) = Range("K" & Val(Me.ListBoxTousLesDevis.Value))        ' Qu01
       .List(.ListCount - 1, 4) = Range("L" & Val(Me.ListBoxTousLesDevis.Value))        ' Prix01
       .List(.ListCount - 1, 5) = .List(.ListCount - 1, 3) * .List(.ListCount - 1, 4)   ' calcul du total par référence
     End If
     If Range("M" & Val(Me.ListBoxTousLesDevis.Value)) <> "" Then
       .AddItem Range("M" & Val(Me.ListBoxTousLesDevis.Value))                          ' Reference02
       .List(.ListCount - 1, 1) = Range("O" & Val(Me.ListBoxTousLesDevis.Value))        ' Adap02
       .List(.ListCount - 1, 3) = Range("P" & Val(Me.ListBoxTousLesDevis.Value))        ' Qu02
       .List(.ListCount - 1, 4) = Range("Q" & Val(Me.ListBoxTousLesDevis.Value))        ' Prix02
       .List(.ListCount - 1, 5) = .List(.ListCount - 1, 3) * .List(.ListCount - 1, 4)   ' calcul du total par référence
     End If

Merci de votre aide.

Bonjour

il suffit d'ajouter en début de macro

If me.listboxtouslesdevis.listindex=-1 then exit sub

A+ François

Ok. Merci François.

Ça va résoudre l'erreur 94.

Et pour associer la description ? Stp.

Bonjour

Désignation ajoutée

A+ François

Merci fanfan38 pour cette solution.
Je vais tenter de trouver comment faire une boucle car si je copie-colle + ajuster pour chaque pièce, ça va faire un code lourrrrddd.
J'ai formaté les nombres avec les décimales et les ai alignés dans leur colonnes respectives.

Bonjour

A quoi servent les colonnes sel?

ne peut on les remplacer par la ligne de désignation

A+ François

un essai

Bonjour François,

A quoi servent les colonnes sel?

c'est un champs prévu pour faire des "sélections" des articles qu'on pourraient retirer de la liste, et remettre juste en remettant le signe "+" dans cette colonne.

Avec le bouton déjà en place.
Ce que tu ne sais pas, c'est que chaque pièce peut être soit en origine, soit en adaptable. Le prix diffère bien sûr.
Dans un devis, je pourrais par exemple, mettre une même référence en origine et suivi par celle adaptable, et juste en retirant le "+" je retire la pièce qui sera affichée à zéro €. Enfin, c'est le but...

ne peut on les remplacer par la ligne de désignation ?

C'est une bonne idée, mais le TableauDevis deviendrait hyper longgggg


@BsAlv,

merci, je viens de regarder ton fichier.
on a qq bug de cohérence.
le prix total s'affiche dans le "titre du devis" et diffère de la TextBoxTotal si le client n'a pas de moto. Cas du devis _a

2025 08 24 183947

si le client a une moto, mais que le devis n'a pas encore d'article, on a un nombre qui s'affiche dans le titre du Devis (information de la réparation) que j'ai renomé sur le devis,

NB : J'ai renommé les TextBox pour être plus "parlant" que la suite de numéros (TextBox1, TextBox2, etc. )

/!\ attends qq minutes que je poste mon fichier. merci

2025 08 24 183907

/!\ formulaire DetailDuDevis modifié ci-dessous

2025 08 24 185233

Merci d'avance

Je viens de résoudre le problème des ref adaptables.

         r = Application.IfError(Application.Match(Arr(1, i), Range("tableau1[New_Ref_Honda]"), 0), 0)     'chercher référence dans "New_Ref_Honda"
               If r = 0 Then r = Application.IfError(Application.Match(Arr(1, i), Range("tableau1[REF_HG]"), 0), 0)     'chercher référence dans "REF_HG" (référence adaptable)
               If r <> 0 Then aOut(ptr, 3) = Range("tableau1[designation]").Cells(r, 1).Value     'designation si trouvée
2025 08 24 214327

la réf 14500 470 751P est bien une référence adaptable. ( tu peux contempler ton job en voyant la photo )

2025 08 24 214842

Pour le prix qui s'affichait à la place du titre du devis, j'ai trouvé.
une simple erreur de chiffre.

 '    DetailsDuDevis.TextBoxTitreDevis = Arr(1, 5)     ' TitreDevis     ' mis en commentaire papicx 24/08/2025
     DetailsDuDevis.TextBoxTitreDevis = Arr(1, 4)     ' TitreDevis

et j'ai formaté le total du devis, (aligné à droite dans les paramètres de la TextBoxTotal)

               MonTotal = MonTotal + aOut(ptr, 6)           ' total du devis
               MonTotal = Format(MonTotal, "# ##0.00")      ' formatage du total du devis   papicx 24/08/2025

re, supér !!!

pourque la macro s'exécute plus vite (environ 150-200 msec), c'est mieux que la matrice aOut n'est pas fixée à 22 lignes mais au nombre de références utiles. C'est pourquoi j'ai modifié quelque lignes entre ces "***"

ok,

je vais voir ça.

je n'avais pas vu ce fichier. Je recopierai ces lignes de code dans mon prochain fichier.

Merci bien.

Rechercher des sujets similaires à "recuperer valeur ligne listbox commandbutton"