VBA et INTELLIGENCE, VBA est-il aussi fort que l'humain
Bonjour,
Derrière cet intitulé une question :
voilà, j'ai une petite BDD que j'affiche dans une listbox d'un Userform selon un critère (voir fichier en pièce jointe et code ci-dessous)
Dans cet Userform, je souhaite sélectionner certaines lignes pour que la somme des montants en Euros de chaque ligne selectionnée tendent vers la valeur cible.
Exemple d'une valeur cible de 1000€ saisie dans la textbox1, je parviens à lire ligne par ligne la listbox et donc à ce que vba selectionne les 3 premières lignes car en effet la somme des 3 premières lignes est = à 950€, la 4eme ligne étant de 100€ elle n'est pas selectionnée car en effet on dépasserait la valeur cible.
L'objectif et c'est là que je sèche serait que VBA prenne toutes les valeurs de la listbox1 et que, un peu à l'instar de l'émission des chiffres et des lettres, il parvienne à additionner las valeurs pour réussir à atteindre la valeur cible ou du moins s'en rapprocher le plus possible.
Merci d'avance de votre précieuse collaboration.
Excellente journée
Alex
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
| Private Sub CommandButton1_Click()
LISTE
End Sub
Sub LISTE()
ListBox1.Clear
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim Cpt As Integer
Dim cpteuros As Double
Dim MtntSeuil As Double
Sheets("DONNEES").Select ' on selectionne la feuille DONNEES
With Sheets("DONNEES")
For i = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
If Cells(i, "C") = "AR" Then ' on boucle pour inscrire dans la listbox que les lignes de la feuilles où le type est "AR"
ListBox1.AddItem .Cells(i, "A"): ListBox1.List(ListBox1.ListCount - 1, 1) = Format(.Cells(i, "B"), "####.00 "): ListBox1.List(ListBox1.ListCount - 1, 2) = .Cells(i, "C")
End If
Next
End With
For j = 0 To ListBox1.ListCount - 1
MtntSeuil = MtntSeuil + ListBox1.Column(1, j) ' ici on boucle pour calculer l'addition de chaque ligne jusqu'à atteindre la valeur cible de la textbox1
If MtntSeuil < TextBox1.Value Then ListBox1.Selected(j) = True Else ListBox1.Selected(j) = False
Next j
For k = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(k) Then Cpt = Cpt + 1 'ici on boucle pour calculer le nombre de lignes selectionnées et calculer le montant que l'on affichera dans les textbox 2 et 3
If ListBox1.Selected(k) Then cpteuros = cpteuros + ListBox1.Column(1, k)
Next k
TextBox2.Value = Cpt
TextBox3.Value = Format(cpteuros, "####.00 ")
End Sub
Private Sub CommandButton2_Click()
Call fermerformulaire
End Sub
Private Sub ListBox1_Change()
Dim k As Integer
Dim cpteuros As Double
Dim Cpt As Integer
For k = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(k) Then Cpt = Cpt + 1 'ici on boucle pour tout changement de selection afin de mettre à jour les textbox2 et 3
If ListBox1.Selected(k) Then cpteuros = cpteuros + ListBox1.Column(1, k)
Next k
TextBox2.Value = Cpt
TextBox3.Value = Format(cpteuros, "####.00 ")
End Sub
Private Sub TextBox1_AfterUpdate()
TextBox1.Value = Format(TextBox1.Value, "####.00 ")
End Sub
Private Sub TextBox1_Change()
TextBox1.Value = Replace(TextBox1.Value, ".", ",")
End Sub |