Problème erreur 380 listbox

lienard6u

XLDnaute Nouveau
Bonjour,

J'ai recherché plusieurs fois sur le forum mais en vain.

Voilà dans mon fichier ci joint, j'aimerais afficher dans une listbox, des informations avec des conditions que je coche lors de l'userform1 qui est une sorte de fiche pour faire ensuite un tri dans ma feuille excel "Appel1", cependant il m'indique l'erreur 380 par rapport à l'index de .List . Je ne comprends pas parce que je pense avoir bien défini ma Listbox1 ...
Si quelqu'un arrive a debuguer ça je suis preneur !

Merci d'avance et bonne journée!
 

Pièces jointes

  • interface1.0.xlsm
    107.3 KB · Affichages: 6

Paf

XLDnaute Barbatruc
Bonjour à tous,

alimentée par AddItem, on est effectivement limité à 10 colonnes.
Par contre cette limitation disparait si on "charge" la listbox à partir d'un tableau (array)

Il faudrait donc initialiser un tableau avec les données prévues pour la listbox, puis:
ListBox1.List = Tableau

A+
 

lienard6u

XLDnaute Nouveau
Merci du conseil! il faudrait donc que je remplace cette partie par une Listbox.list sachant que ma plage de données est de A2:R jusqu'à la la ligne non vide. Aurais tu cette solution adapté à mon soucis ?
Parce que j'avais essayé cette solution mais le filtre avec la boucle "if" ne marche pas ensuite ..

Private Sub UserForm_Initialize()

'Définit le nombre de colonnes dans la ListBox
ListBox1.ColumnCount = 18

'--
ListBox1.ColumnWidths = "60;65;550;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0"
'---

l = Sheets("Appel1").Range("d65536").End(xlUp).Row + 1

Dim i As Integer
Dim dernièreligne As Integer

For i = 2 To l
If Sheets("Acceuil").Range("B2").Value = "PME" And Sheets("Appel1").Cells(i, 1).Value = "PME" Then

ListBox1.AddItem Sheets("Appel1").Cells(i, 1).Value

Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Sheets("Appel1").Cells(i, 2).Value

Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = Sheets("Appel1").Cells(i, 4).Value
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 3) = Sheets("Appel1").Cells(i, 7).Value
'continuer avec toutes les colonnes
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 4) = Sheets("Appel1").Cells(i, 5).Value
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 5) = Sheets("Appel1").Cells(i, 6).Value
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 6) = Sheets("Appel1").Cells(i, 8).Value
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 7) = Sheets("Appel1").Cells(i, 9).Value
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 8) = Sheets("Appel1").Cells(i, 10).Value
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 9) = Sheets("Appel1").Cells(i, 11).Value
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 10) = Sheets("Appel1").Cells(i, 12).Value
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 11) = Sheets("Appel1").Cells(i, 13).Value
Else

End If

Next i

MERCI d'avance à vous tous !
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Bonjour,

Exemple:

VB:
Dim a(), f
Private Sub UserForm_Initialize()
  Set f = Sheets("bd")
  a = f.Range("A2:M" & f.[M65000].End(xlUp).Row).Value
  Me.ListBox1.List = a()
End Sub

Exemple de ListBox conditionnelle en PJ

VB:
Dim f, bd
Option Compare Text
Private Sub UserForm_Initialize()
  Set f = Sheets("bd")
  Set d = CreateObject("Scripting.Dictionary")
  bd = f.Range("A2:D" & f.[A65000].End(xlUp).Row).Value
  Me.ListBox1.List = bd
  For i = LBound(bd) To UBound(bd)
     d(bd(i, 3)) = ""
  Next i
  Me.ComboBox1.List = d.keys
  Me.ListBox1.ColumnCount = 4
  Me.ListBox1.ColumnWidths = "40;30;50;30"
End Sub

Private Sub ComboBox1_click()
  ville = Me.ComboBox1: n = 0
  Dim Tbl()
  For i = 1 To UBound(bd)
    If bd(i, 3) = ville Then
        n = n + 1: ReDim Preserve Tbl(1 To UBound(bd, 2), 1 To n)
        For k = 1 To UBound(bd, 2): Tbl(k, n) = bd(i, k): Next k
     End If
  Next i
  Me.ListBox1.Column = Tbl
End Sub


Boisgontier
 

Pièces jointes

  • Copie de FormFiltreListboxCond.xls
    174 KB · Affichages: 12
Dernière édition:

Paf

XLDnaute Barbatruc
Bonjour à tous

pour filtrer comme initialement devait l'être la listbox:

VB:
Dim i As Integer, l as long
Dim Tableau(), x as long

With WorkSheets("Appel1")
l = .Range("d65536").End(xlUp).Row + 1
For i = 2 To l
      If Sheets("Acceuil").Range("B2").Value = "PME" And Sheets("Appel1").Cells(i, 1).Value = "PME" Then
            x=x+1
            redim Tableau(1 to 12 , 1 to x)
           Tableau(1 , x) = .Cells(i, 1).Value
           Tableau(2 , x) = .Cells(i, 2).Value
           Tableau(3 , x) = .Cells(i, 4).Value
           Tableau(4 , x) = .Cells(i, 7).Value
           Tableau(5, x) = .Cells(i, 5).Value
           Tableau(6 , x) = .Cells(i, 6).Value
           Tableau(7 , x) = .Cells(i, 8).Value
           Tableau(8 , x) = .Cells(i, 9).Value
           Tableau(9 , x) = .Cells(i, 10).Value
           Tableau(10 , x) = .Cells(i, 11).Value
           Tableau(11 , x) = .Cells(i, 12).Value
           Tableau(12 , x) = .Cells(i, 13).Value
    End If
Next i
End With

Listbox1.list =application.transpose( Tableau)
' ou a priori
'Listbox1.column= Tableau

à tester

A+
 

lienard6u

XLDnaute Nouveau
Bonjour à tous,

Avec ta solution Paf voici ce que ça me donne :
1030583


La condition marche mais j'aimerais que ça s'affiche en colonne plutot que ligne par ligne. Est ce possible ?
La suite étant que lorsque je clique sur la ligne entière, je la "selectionne" et ensuite avec le bouton "Plus de détail" je vais vers l'userform 4 qui remplit textbox par textbox chaque colonne associé :
1030584


Merci d'avance !
 

lienard6u

XLDnaute Nouveau
ça ne fonctionne toujours pas hélas ..

J'ai modifié ce code :

VB:
l = .Range("g65536").End(xlUp).Row
avec
VB:
l = .Range("o65536").End(xlUp).Row

et voila ce que j'obtiens
1030689


Cela semble etre que la première ligne avec toutes ses colonnes mais sous forme de ligne par ligne ..

Je ne vois pas où cela peut venir ce probleme d'affichage conditionnel ..

Merci d'avance pour vos réponses et solutions
 

Paf

XLDnaute Barbatruc
Une grosse boulette:

au lieu de
VB:
 redim Tableau(1 to 12 , 1 to x)

utiliser
Code:
ReDim Preserve Tableau(1 To 12, 1 To x)
qui conserve les données précédemment entrées. Alors que sans "Preserve", le tableau est effacé à chaque fois.

et utiliser indifféremment :
Code:
ListBox1.List = Application.Transpose(Tableau)
ou
ListBox1.Column = Tableau

A +
 

lienard6u

XLDnaute Nouveau
J'ai modifié avec ton code "Preserve"
1030693


J'ai l'impression qu'il ne remplit qu'avec la première ligne et ne teste pas si les autres contiennent "PME" ... Mais cette fois il l'a mets bien sous forme de colonne..
 

Pièces jointes

  • interface aide financement.xlsm
    111.4 KB · Affichages: 7

Paf

XLDnaute Barbatruc
Avec ton fichier du premier post et les modif de code proposées j'obtiens les 3 lignes PME de la feuille Appel1.

Dans ton dernier classeur, tu utilises:

VB:
x = 1
For i = 2 To l
      If Sheets("Acceuil").Range("B2").Value = "PME" And Sheets("Appel1").Cells(i, 1).Value = "PME" Then
        ReDim Preserve Tableau(1 To 15, 1 To x)
           Tableau(1, x) = .Cells(i, 1).Value
.../...

au lieu de :

VB:
For i = 2 To l
      If Sheets("Acceuil").Range("B2").Value = "PME" And Sheets("Appel1").Cells(i, 1).Value = "PME" Then
            x = x + 1
            ReDim Preserve Tableau(1 To 12, 1 To x)
           Tableau(1, x) = .Cells(i, 1).Value
.../...

ce qui fait que le tableau n'est pas agrandi puisque x est toujours =1. Et donc l'écriture d'une nouvelle ligne écrase la précédente et au final il ne reste que la dernière.

A+
 

Discussions similaires

Réponses
9
Affichages
921
Réponses
7
Affichages
1 K

Statistiques des forums

Discussions
312 203
Messages
2 086 195
Membres
103 153
dernier inscrit
SamirN