Condition dans listbox

Saddoud_walid Messages postés 43 Statut Membre -  
Saddoud_walid Messages postés 43 Statut Membre -
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

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    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
  2. Saddoud_walid Messages postés 43 Statut Membre
     
    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
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      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
  3. Saddoud_walid Messages postés 43 Statut Membre
     
    cliquer sur le bouton "Résumer" du userform et vous trouver le doublon
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      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
    2. Saddoud_walid Messages postés 43 Statut Membre > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
       
      exactement ... comment le faire :(
      0
    3. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Saddoud_walid Messages postés 43 Statut Membre
       
      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
    4. Saddoud_walid Messages postés 43 Statut Membre > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
       
      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
    5. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Saddoud_walid Messages postés 43 Statut Membre
       
      en effet, j'ai laissé de la place à la ligne 59 pour que tu puisses faire cette partie du travail.
      0