Plusieurs conditions pour un list_box

Bonjour à tous,

Je souhaiterais remplir une listbox en vba se trouvant dans un userform qui s'appelle "ETAT".

Cette list_box est remplie en fonction de plusieurs conditions. J'arrive à remplir ma list_box mais elle ne prends pas en compte toutes mes conditions......

J'explique :

  • J'ai une première condition qui si elle n'est pas remplie envoie directement dans ma listbox
  • Si la première condition est remplie, alors elle regarde les autres conditions et si l'une de ces autres conditions n'est pas remplie alors elle envoie aussi dans la list_box....

Bonnes fêtes à tous et merci pour votre aide.

Bonjour,

Qu veux-tu qu'on fasse de ces indications abstraites ?

Si tu codes conformément à tes souhaits, tu auras le résultat correspondant à tes souhaits !

Voici mon petit bout de code :

Private Sub UserForm_Initialize()
Set f = Sheets("Données")
Set d = CreateObject("Scripting.Dictionary")
ListBox1.ColumnCount = 3
ListBox1.ColumnWidths = "50;80;50"
a = f.Range("A2:Y" & f.[D65000].End(xlUp).Row).Value
For i = LBound(a) To UBound(a)
If a(i, 16) = "" or a(i16)<>"" and a(i, 17) = "" Or a(i, 18) = "" Then d(i) = Array(a(i, 4), a(i, 5), a(i, 6))
Next i
n = d.Count
If n > 0 Then   ' gestion 1 seule ligne dans la BD
Dim Tbl: Tbl = Application.Transpose(d.items)
ReDim Preserve Tbl(1 To 3, 1 To n + 1)
Me.ListBox1.List = Application.Transpose(Tbl)
Me.ListBox1.RemoveItem n
End If
End Sub

Si ca peut faire avancer....

Ma foi !

Le code serait indenté, j'appécierais plus ! (on approche de l'heure à partir de laquelle je refuse de lire tout code non parfaitement indenté...)

Les variables seraient déclarées (et en tête de procédure), ce serait aussi appréciable !

Ça :

ListBox1.ColumnCount = 3
ListBox1.ColumnWidths = "50;80;50"

on utilise la fenêtre de propriétés pour les définir en valeurs par défaut, cela n'a rien à faire ici.

Tbl = Application.Transpose(d.items)
Me.ListBox1.List = Application.Transpose(Tbl)

et tu supprimes les deux autres lignes.

NB- Pense aussi le cas échéant que (tu testes n>0) si n=1, la propriété List ne fonctionne pas.

Justement il est la mon problème....

c'est la condition différent de 0 que je n'arrive pas à résoudre....

Quel problème ?

Si n > 1 ça fonctionne.

Si n =1 il faut utiliser AddItem

Si n =0 il faut rien faire !

Non,

si N = 0 on ajoute à la liste

si N = 1 mais que M = 0 on ajoute a la liste

si N= 1 mais que O = 1 on ajoute à la liste

si N= 1 mais que P = 0 on ajoute à la liste

et ainsi de suite

Par contre si toute les conditions = 1 alors on n'ajoute pas à la liste....

Excuse-moi ! On parle de quoi ?

n = d.Count
If n > 0 Then 

Le seul n que j'aie vu !

là je commence à me noyer....lolll

Cela relève de tes conditions, que l'on ne connait pas !

Mais tu écris que :

sur la ligne i

si P est vide

ou bien si P n'est pas vide et Q est vide

ou encore si R est vide

on prend les valeurs de D, E et F sur cette ligne

ya que toi qui sait !

Voici comment j'ai résolu mon problème pour le moment. Cela fonctionne mais ce n'est pas du tout optimisé.....

Set f = Sheets("Données")
Set d = CreateObject("Scripting.Dictionary")
lst_nom_vpc.ColumnCount = 4
lst_nom_vpc.ColumnWidths = "0;50;80;50"
a = f.Range("A2:Y" & f.[D65000].End(xlUp).Row).Value
For i = LBound(a) To UBound(a)
If a(i, 16) = "" Then d(i) = Array(a(i, 1), a(i, 4), a(i, 5), a(i, 6))
If a(i, 16) <> "Manque" And a(i, 17) = "" Then d(i) = Array(a(i, 1), a(i, 4), a(i, 5), a(i, 6))
If a(i, 16) <> "Manque" And a(i, 18) = "" Then d(i) = Array(a(i, 1), a(i, 4), a(i, 5), a(i, 6))
If a(i, 16) <> "Manque" And a(i, 19) = "" Then d(i) = Array(a(i, 1), a(i, 4), a(i, 5), a(i, 6))
If a(i, 16) <> "Manque" And a(i, 20) = "" Then d(i) = Array(a(i, 1), a(i, 4), a(i, 5), a(i, 6))
If a(i, 16) <> "Manque" And a(i, 21) = "" Then d(i) = Array(a(i, 1), a(i, 4), a(i, 5), a(i, 6))
If a(i, 16) <> "Manque" And a(i, 22) = "" Then d(i) = Array(a(i, 1), a(i, 4), a(i, 5), a(i, 6))
If a(i, 16) <> "Manque" And a(i, 23) = "" Then d(i) = Array(a(i, 1), a(i, 4), a(i, 5), a(i, 6))
If a(i, 16) <> "Manque" And a(i, 24) = "" Then d(i) = Array(a(i, 1), a(i, 4), a(i, 5), a(i, 6))
If a(i, 16) <> "Manque" And a(i, 25) = "" Then d(i) = Array(a(i, 1), a(i, 4), a(i, 5), a(i, 6))
Next i
n = d.Count
If n > 0 Then   
Dim Tbl: Tbl = Application.Transpose(d.items)
ReDim Preserve Tbl(1 To 4, 1 To n + 1)
Me.lst_nom.List = Application.Transpose(Tbl)
Me.lst_nom.RemoveItem n
End If

C'est en effet plutôt moche !!!

Et tu ne lis pas ce que j'écris, puisque tu n'en tiens aucun compte...

Private Sub UserForm_Initialize()
    Dim d As Object, a, Tbl, i%, n%, cd As Boolean
    Set d = CreateObject("Scripting.Dictionary")
    With Worksheets("Données")
        a = .Range("A2:Y" & .[D65000].End(xlUp).Row).Value
    End With
    For i = LBound(a) To UBound(a)
        For n = 17 To 25
            If a(i, n) = "" Then
                cd = True: Exit For
            End If
        Next n
        If a(i, 16) = "" Or (a(i, 16) <> "Manque" And cd) Then d(i) = Array(a(i, 1), _
         a(i, 4), a(i, 5), a(i, 6))
        cd = False
    Next i
    n = d.Count
    If n > 1 Then
        Tbl = WorksheetFunction.Transpose(d.items)
        Me.ListBox1.List = WorksheetFunction.Transpose(Tbl)
    ElseIf n = 1 Then
        Tbl = d.items
        With Me.ListBox1
            .AddItem Tbl(0)(0)
            For i = 1 To 3
                .List(0, i) = Tbl(0)(i)
            Next i
        End With
    End If
End Sub

En mieux écrit, indenté, avec des variables déclarées, et rectifiée.

Cordialement.

A un grand merci à toi. tu m'as grandement aidé.... Joyeuses fêtes.

ET MERCI!!!!!!

Rechercher des sujets similaires à "conditions list box"