ListBox

Bonjour à tous et mes meilleurs vœux.

J'aurai besoin d'un coup de main en ce début d'année.

J'ai un code qui ne fonctionne pas et je n'arrive pas à trouver pourquoi.

Voici le code :

'Alimenter la ListBox2 suivant la feuil "pret", le 18/12/2016 par Guillaume

Dim valeur As Integer

a = Sheets("pret").Range("a2:z10000").Value

valeur = ENLEVE

Set c = Sheets("pret").Range("u:u").Find(valeur, LookIn:=xlValues)

If Not c Is Nothing Then

premier = c.Address

J = 0

For I = LBound(a) To UBound(a)

Me.ListBox2.AddItem a(I, 1)

Me.ListBox2.List(J, 1) = a(I, 5)

Me.ListBox2.List(J, 2) = a(I, 2)

Me.ListBox2.List(J, 3) = a(I, 3)

Me.ListBox2.List(J, 4) = a(I, 21)

J = J + 1

Next I

End If

est ce que quelqu'un pourrait m'aider svp...

En pj, je vous donne le fichier en question.

Cordialement,

12gpmi-v2-0.xlsm (105.31 Ko)

Bonsoir Guithou51,

C'est un peu particulier, ce que tu fais: il n'y a pas vraiment de lien entre tes différentes manipulations:

  • tu charges, dans un tableau en mémoire, le contenu de 26 colonnes et 10.000 lignes de ta feuille prêt
  • tu cherches, dans la feuille prêt, la première occurrence du mot ENLEVË (!?) en colonne U et tu sauvegardes l'adresse de cette première occurrence dans une variable ... et la recherche ne se poursuit jamais?
  • tu démarres une boucle et tu "garnis" les 4 colonnes de ta ListBox avec le contenu des 10.000 lignes de ton tableau

Une listBox de 10.000 éléments, c'est un peu gourmand, j'en ai peur!

Pourquoi pas:

'Alimenter la ListBox2 suivant la feuil "pret", le 18/12/2016 par Guillaume
 a = Sheets("pret").Range("a2:z" & Sheets("pret").Cells(Rows.Count, 1).End(xlUp).Row).Value
 For I = LBound(a) To UBound(a)
    If a(I, 21) = "ENLEVË" Then 'c'est normal ce tréma??
       Me.ListBox2.AddItem a(I, 1)
       Me.ListBox2.List(J, 1) = a(I, 5)
       Me.ListBox2.List(J, 2) = a(I, 2)
       Me.ListBox2.List(J, 3) = a(I, 3)
       Me.ListBox2.List(J, 4) = a(I, 21)
       J = J + 1
    End If
  Next I

Bonsoir U. Milité.

Merci pour ta réponse, ce code marche nickel.

Et si veux qu'il ait une recherche avec 2 mots. C'est à dire le mot "ENLEVE" ou le mot "A CONTROLER"?

Guithou51 a écrit :

Et si veux qu'il ait une recherche avec 2 mots. C'est à dire le mot "ENLEVE" ou le mot "A CONTROLER"?

Ben ... adapte la ligne commençant par un If:

If a(I, 21) = "ENLEVE" Or a(I, 21) = "A CONTROLER" Then 

(pas testé, mais ça devrait fonctionner)

Bonsoir U.milité, Guithou51

guithou51 qu'as tu fais tu calendrier que je t'avais mis en place

Bonjour,

AddItem est lent.

Il est préférable de filtrer dans un Array (0,2s pour 10.000 lignes contre 6 secondes avec AddItem)

Private Sub UserForm_Initialize()
  Set f = Sheets("bd")
  Set d = CreateObject("Scripting.Dictionary")
  a = f.Range("A2:D" & f.[A65000].End(xlUp).Row).Value
  For i = LBound(a) To UBound(a)
     If a(i, 1) <> "sup" Then d(i) = Array(a(i, 1), a(i, 2), a(i, 3), a(i, 4))
  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 4, 1 To n + 1)
    Me.ListBox1.List = Application.Transpose(Tbl)
    Me.ListBox1.RemoveItem n
  End If
End Sub

Ceuzin

Bonsoir U. Milité.

Dsl de la réponse tardive.

J'ai essaye ta 2éme formulaire, mais elle ne fonctionne pas. J'ai juste la ligne avec "A CONTROLER" qui s'affiche. Alors que je souhaiterai avoir les 2.


Bonsoir grisan29,

J'utilise toujours ta formule. Mais pour cette programmation, je souhaite qu'il y ait une recherche avec des valeurs spécifique dans les cellules.

Cordialement.


Dsl U. Milité, mais ta formule fonctionne bien. Je me suis trompé de syntaxe.

Encore merci .

Petite dernière chose, est il possible de mettre de la couleur dans une listbox 1 ligne sur 2 par exemple?

Rechercher des sujets similaires à "listbox"