Condition dans listbox

Fermé
Saddoud_walid Messages postés 41 Date d'inscription samedi 17 janvier 2015 Statut Membre Dernière intervention 6 novembre 2020 - Modifié le 6 nov. 2020 à 10:44
Saddoud_walid Messages postés 41 Date d'inscription samedi 17 janvier 2015 Statut Membre Dernière intervention 6 novembre 2020 - 6 nov. 2020 à 15:52
Bonjour,

J’ai un problème de condition dans ma listbox …car j’ai fait une première condition puis j’ai voulu ajouter une autre mais je trouve une difficulté …. Je veux fusionner deux valeur en double (Me.ListBox1.List(I, 3)) et avoir la somme de la valeur (Me.ListBox1.List(I, 4)) en gardent la condition sur la (Me.ListBox1.List(I, 4))
Merci d’avance pour tout aide

le code :

Set F = ActiveSheet
Me.ListBox1.Clear

With ListBox1
.ColumnCount = 8
.ColumnWidths = "0;30;70;100;70;70;70;0"
.RowSource = ""
End With


Set plage = F.[b4].CurrentRegion
Set plage = ActiveSheet.Range("a5:a30000")
Set c = plage.Find("code", , , xlPart)
If Not c Is Nothing Then
I = 0
premier = c.Address

Do
Me.ListBox1.AddItem
Me.ListBox1.List(I, 0) = c.Offset(0, 0)
Me.ListBox1.List(I, 1) = c.Offset(0, 0)
Me.ListBox1.List(I, 2) = c.Offset(0, 1)
Me.ListBox1.List(I, 3) = c.Offset(0, 2)
Me.ListBox1.List(I, 4) = c.Offset(0, 15)

If c.Offset(0, 15) < Val(TextBox2.Value) Then Me.ListBox1.List(I, 5) = c.Offset(0, 15) / 2
If c.Offset(0, 15) >= Val(TextBox2.Value) Then Me.ListBox1.List(I, 5) = c.Offset(0, 15) - TextBox1.Value

If c.Offset(0, 15) >= Val(TextBox2.Value) Then Me.ListBox1.List(I, 6) = TextBox1.Value
If c.Offset(0, 15) < Val(TextBox2.Value) Then Me.ListBox1.List(I, 6) = c.Offset(0, 15) / 2

Me.ListBox1.List(I, 7) = c.Offset(0, 3)
I = I + 1
Set c = plage.FindNext(c)

Loop While Not c Is Nothing And c.Address <> premier

End If


Dim m As Integer
Dim j As Integer
Dim V(0 To 7) As Variant

With Me.ListBox1
For m = 0 To .ListCount - 1
For j = 0 To .ListCount - 1
If .Column(0, m) > .Column(0, j) And m <> j Then
V(0) = .Column(0, m): .Column(0, m) = .Column(0, j): .Column(0, j) = V(0)
V(1) = .Column(1, m): .Column(1, m) = .Column(1, j): .Column(1, j) = V(1)
V(2) = .Column(2, m): .Column(2, m) = .Column(2, j): .Column(2, j) = V(2)
V(3) = .Column(3, m): .Column(3, m) = .Column(3, j): .Column(3, j) = V(3)
V(4) = .Column(4, m): .Column(4, m) = .Column(4, j): .Column(4, j) = V(4)
V(5) = .Column(5, m): .Column(5, m) = .Column(5, j): .Column(5, j) = V(5)
V(6) = .Column(6, m): .Column(6, m) = .Column(6, j): .Column(6, j) = V(6)
V(7) = .Column(7, m): .Column(7, m) = .Column(7, j): .Column(7, j) = V(7)



End If
Next j
Next m
For m = 0 To .ListCount - 1
.Column(1, m) = m + 1
Next m
End With




pour mieux comprendre https://wetransfer.com/downloads/12d3f7165927d113c76d22876b1c14b620201106094232/47c62c

3 réponses

yg_be Messages postés 22692 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 avril 2024 1 471
6 nov. 2020 à 10:52
bonjour,
peux-tu utiliser les balises de code quand tu partages du code (et préciser "basic" pour du VBA): https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

je ne comprends pas ce qu'est une condition dans une listbox.
ni ce que signifie "faire une condition"
je ne comprends pas non plus la suite de ton explication.

peux-tu être plus factuel, peut-être en donnant des exemples, en faisant référence à des lignes de code et à des cellules dans les feuilles?
0
Saddoud_walid Messages postés 41 Date d'inscription samedi 17 janvier 2015 Statut Membre Dernière intervention 6 novembre 2020
6 nov. 2020 à 11:46
salut yg_be

pour mieux comprendre vous pouvez télécharger ce ficher https://wetransfer.com/downloads/12d3f7165927d113c76d22876b1c14b620201106094232/47c62c

comme vous voyer il y a une condition sur Me.ListBox1.List(I, 4) si elle est inférieure ou supérieure a textbox2... Je veux fusionner deux valeur en double (Me.ListBox1.List(I, 3)) et avoir la somme des deux valeurs en double dans (Me.ListBox1.List(I, 4))
mon code est:

Set F = ActiveSheet
Me.ListBox1.Clear

With ListBox1
.ColumnCount = 8
.ColumnWidths = "0;30;70;100;70;70;70;0"
.RowSource = ""
End With


Set plage = F.[b4].CurrentRegion
Set plage = ActiveSheet.Range("a5:a30000")
Set c = plage.Find("code", , , xlPart)
If Not c Is Nothing Then
I = 0
premier = c.Address

Do
Me.ListBox1.AddItem
Me.ListBox1.List(I, 0) = c.Offset(0, 0)
Me.ListBox1.List(I, 1) = c.Offset(0, 0)
Me.ListBox1.List(I, 2) = c.Offset(0, 1)
Me.ListBox1.List(I, 3) = c.Offset(0, 2)
Me.ListBox1.List(I, 4) = c.Offset(0, 15)

If c.Offset(0, 15) < Val(TextBox2.Value) Then Me.ListBox1.List(I, 5) = c.Offset(0, 15) / 2
If c.Offset(0, 15) >= Val(TextBox2.Value) Then Me.ListBox1.List(I, 5) = c.Offset(0, 15) - TextBox1.Value

If c.Offset(0, 15) >= Val(TextBox2.Value) Then Me.ListBox1.List(I, 6) = TextBox1.Value
If c.Offset(0, 15) < Val(TextBox2.Value) Then Me.ListBox1.List(I, 6) = c.Offset(0, 15) / 2

Me.ListBox1.List(I, 7) = c.Offset(0, 3)
I = I + 1
Set c = plage.FindNext(c)

Loop While Not c Is Nothing And c.Address <> premier

End If
0
yg_be Messages postés 22692 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 avril 2024 1 471
6 nov. 2020 à 12:08
il faut choisir "basic" pour du VBA.

j'ai analysé le fichier.

je ne comprends pas ce veut dire "fusionner deux valeur en double (Me.ListBox1.List(I, 3)": où sont ces valeurs dans le classeur?
0
Saddoud_walid Messages postés 41 Date d'inscription samedi 17 janvier 2015 Statut Membre Dernière intervention 6 novembre 2020
6 nov. 2020 à 12:15
cliquer sur le bouton "Résumer" du userform et vous trouver le doublon
0
yg_be Messages postés 22692 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 avril 2024 1 471
6 nov. 2020 à 12:41
pour "fusionner", il faut alors, avant de faire
Me.ListBox1.AddItem
, vérifier si la valeur est déjà présente dans la liste, et modifier la ligne existante, au lieu d'en ajouter une nouvelle.
0
Saddoud_walid Messages postés 41 Date d'inscription samedi 17 janvier 2015 Statut Membre Dernière intervention 6 novembre 2020 > yg_be Messages postés 22692 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 avril 2024
6 nov. 2020 à 12:52
exactement ... comment le faire :(
0
yg_be Messages postés 22692 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 avril 2024 1 471 > Saddoud_walid Messages postés 41 Date d'inscription samedi 17 janvier 2015 Statut Membre Dernière intervention 6 novembre 2020
6 nov. 2020 à 13:51
un exemple:
Option Explicit
Sub tri(a(), gauc, droi, NbCol, colTri)        ' Quick sort
 Dim ref, g, d, c, temp
 On Error GoTo errormessage:

 ref = a((gauc + droi) \ 2, colTri)
 g = gauc: d = droi
 Do
     Do While a(g, colTri) < ref: g = g + 1: Loop
     Do While ref < a(d, colTri): d = d - 1: Loop
     If g <= d Then
       For c = 0 To NbCol - 1
         temp = a(g, c): a(g, c) = a(d, c): a(d, c) = temp
       Next
       g = g + 1: d = d - 1
     End If
 Loop While g <= d
 If g < droi Then Call tri(a, g, droi, NbCol, colTri)
 If gauc < d Then Call tri(a, gauc, d, NbCol, colTri)

errormessage:
If Err.Number = 9 Then
MsgBox "Pas de Réservations pour Imprimer"
End If
End Sub

Private Sub CommandButton1_Click()
Dim li As Integer, doublon As Boolean
Dim F As Worksheet, plage As Range, c, I As Long, premier As String, NbCol, g As Long
Worksheets("01").Select
 
 
 Set F = ActiveSheet
   Me.ListBox1.Clear
 
 With ListBox1
.ColumnCount = 8
.ColumnWidths = "0;30;70;100;70;70;70;0"
.RowSource = ""
End With

            
   Set plage = F.[b4].CurrentRegion
      Set plage = ActiveSheet.Range("a5:a30000")
   Set c = plage.Find("code", , , xlPart)
   If Not c Is Nothing Then
     I = 0
     premier = c.Address
     
   Do
       doublon = False
       For li = 0 To Me.ListBox1.ListCount - 1
            If Me.ListBox1.List(li, 2) = CStr(c.Offset(0, 1)) Then
                doublon = True
                Exit For
            End If
       Next li
       If doublon Then
            ' ...
       Else
            Me.ListBox1.AddItem
            Me.ListBox1.List(I, 0) = c.Offset(0, 0)
            Me.ListBox1.List(I, 1) = c.Offset(0, 0)
            Me.ListBox1.List(I, 2) = c.Offset(0, 1)
            Me.ListBox1.List(I, 3) = c.Offset(0, 2)
            Me.ListBox1.List(I, 4) = c.Offset(0, 15)
            
            If c.Offset(0, 15) < Val(TextBox2.Value) Then Me.ListBox1.List(I, 5) = c.Offset(0, 15) / 2
            If c.Offset(0, 15) >= Val(TextBox2.Value) Then Me.ListBox1.List(I, 5) = c.Offset(0, 15) - TextBox1.Value
            
            If c.Offset(0, 15) >= Val(TextBox2.Value) Then Me.ListBox1.List(I, 6) = TextBox1.Value
            If c.Offset(0, 15) < Val(TextBox2.Value) Then Me.ListBox1.List(I, 6) = c.Offset(0, 15) / 2
             
             Me.ListBox1.List(I, 7) = c.Offset(0, 3)
            I = I + 1
        End If
       Set c = plage.FindNext(c)
     
   Loop While Not c Is Nothing And c.Address <> premier
           
End If
   

   Dim a()
   a = Me.ListBox1.List
   NbCol = UBound(a, 2) - LBound(a, 2) + 1
   Call tri(a(), LBound(a), UBound(a), NbCol, 2)
   Me.ListBox1.List = a


 
Dim m As Integer
Dim j As Integer
Dim V(0 To 7) As Variant
 
With Me.ListBox1
    For m = 0 To .ListCount - 1
        For j = 0 To .ListCount - 1
            If .Column(0, m) > .Column(0, j) And m <> j Then
                V(0) = .Column(0, m): .Column(0, m) = .Column(0, j): .Column(0, j) = V(0)
                V(1) = .Column(1, m): .Column(1, m) = .Column(1, j): .Column(1, j) = V(1)
                V(2) = .Column(2, m): .Column(2, m) = .Column(2, j): .Column(2, j) = V(2)
                V(3) = .Column(3, m): .Column(3, m) = .Column(3, j): .Column(3, j) = V(3)
                V(4) = .Column(4, m): .Column(4, m) = .Column(4, j): .Column(4, j) = V(4)
                V(5) = .Column(5, m): .Column(5, m) = .Column(5, j): .Column(5, j) = V(5)
                V(6) = .Column(6, m): .Column(6, m) = .Column(6, j): .Column(6, j) = V(6)
                V(7) = .Column(7, m): .Column(7, m) = .Column(7, j): .Column(7, j) = V(7)
                
                
                
            End If
        Next j
    Next m
    For m = 0 To .ListCount - 1
        .Column(1, m) = m + 1
    Next m
End With
  
  

Dim z As Single, FF As Long, k 'déclare la variable T (Total) / Type à adapter
With ListBox1 'prend en compte la ListBox1 (à adapter)
    For FF = 0 To .ListCount - 1 'boucle sur tous les lignes de la ListBox1
        z = z + .Column(4, FF) 'définit le total T (à adapter car tu parles de la colonne 7 et la c'est la "7ème" colonne)
    Next FF 'prochaine ligne de la boucle
    
    
    TextBox3.Value = FormatNumber(z, 3) 'renvoie dans la TextBox1 le total T (à adapter)
End With 'fin de la prise en compte de la ListBox1

Dim d As Single 'déclare la variable T (Total) / Type à adapter
With ListBox1 'prend en compte la ListBox1 (à adapter)
    For g = 0 To .ListCount - 1 'boucle sur tous les lignes de la ListBox1
        d = d + .Column(5, g) 'définit le total T (à adapter car tu parles de la colonne 7 et la c'est la "7ème" colonne)
    Next g 'prochaine ligne de la boucle
    
    
    TextBox4.Value = FormatNumber(d, 3) 'renvoie dans la TextBox1 le total T (à adapter)
End With 'fin de la prise en compte de la ListBox1

Dim h As Single 'déclare la variable T (Total) / Type à adapter
With ListBox1 'prend en compte la ListBox1 (à adapter)
    For k = 0 To .ListCount - 1 'boucle sur tous les lignes de la ListBox1
        h = h + .Column(6, k) 'définit le total T (à adapter car tu parles de la colonne 7 et la c'est la "7ème" colonne)
    Next k 'prochaine ligne de la boucle
    
    
    TextBox5.Value = FormatNumber(h, 3) 'renvoie dans la TextBox1 le total T (à adapter)
End With 'fin de la prise en compte de la ListBox1


End Sub

Private Sub UserForm_Initialize()
TextBox1.Value = 600
TextBox2.Value = 1000



End Sub
0
Saddoud_walid Messages postés 41 Date d'inscription samedi 17 janvier 2015 Statut Membre Dernière intervention 6 novembre 2020 > yg_be Messages postés 22692 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 avril 2024
6 nov. 2020 à 15:09
merci pour votre effort mais vous avez supprimer les doublons mais le résultat qui reste n'est pas la somme de deux (ou plusieurs) valeurs (Total)
je veux avoir la somme des deux (ou plusieurs) valeurs du doublon de tel sorte que j'aurai a la fin un seul matricule avec la somme de valeurs (total )
merci encore
0
yg_be Messages postés 22692 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 avril 2024 1 471 > Saddoud_walid Messages postés 41 Date d'inscription samedi 17 janvier 2015 Statut Membre Dernière intervention 6 novembre 2020
6 nov. 2020 à 15:11
en effet, j'ai laissé de la place à la ligne 59 pour que tu puisses faire cette partie du travail.
0