Problème erreur 380 listbox

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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+
 
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 !
 
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

Dernière édition:
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+
 
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 !
 
ç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
 
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 +
 
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+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour