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 : Sélectionner tout - Visualiser dans une fenêtre à part
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
Partager