Remplissage d'une Listbox et format

Calvus

XLDnaute Barbatruc
Bonjour le forum,

Dans le classeur joint, j'ai 2 Userforms.
Ils sont identiques, mis à part la seconde partie du code.

Je remplis une Listbox en fonction d'une Combobox.

Le Userform1 utilise la méthode AddItem
Le Userform utilise la méthode List.

1/ Dans le Userform2, je n'ai que des résultats partiels, à savoir que toutes les lignes ne sont pas incrémentées, et qu'il me manque une colonne.
J'aimerais comprendre pourquoi.
Mon but est de comprendre les méthodes.

2/ Pourquoi la propriété Me.ListBox1.ColumnWidths n'accepte que 2 valeurs, alors qu'il y a 4 colonnes ?

Et je reviendrai dans cette discussion sur d'autres points ,car j'ai encore beaucoup de questions concernant ce projet.

Merci de vos réponses.
 

Pièces jointes

  • Temp Creaction Formulaire Prospects Forum.xlsm
    18.3 KB · Affichages: 43

Lone-wolf

XLDnaute Barbatruc
Bonjour mon cher Calvus :)

Pour la question 1: utilise RowSource pour avoir la même mise en forme de la feuille.
ListBox1.RowSource = "Feuil1!$A$2:$M$65000"

Pour la question 2: la réponse en image, et il faut mettre des ; et non des ,
listbox.gif


En PJ un exemple d'adaptation des colonnes de la listbox.
 

Pièces jointes

  • Adapter Colonnes ListBox.xlsm
    27.5 KB · Affichages: 52
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
Bonjour,

1/ Dans le Userform2, je n'ai que des résultats partiels, à savoir que toutes les lignes ne sont pas incrémentées, et qu'il me manque une colonne.
Je ne sais pas pourquoi il te manque une colonne, mais concernant la liste dite "partielle" j'ai bien l'impression qu'à chaque fois que tu utilises Listbox1.List= ça réinitialise la liste donc au final tu n'as que la dernière ligne correspondant à ta recherche. ;)
 

laetitia90

XLDnaute Barbatruc
bonjour tous:):):):)
en passant par un tablo peut être

VB:
Option Explicit
Dim m As Object, t(), t1(), i As Long, x As Long
Private Sub UserForm_Initialize()
  Set m = CreateObject("Scripting.Dictionary")
  t = Range("A2:f" & Range("A" & Rows.Count).End(3).Row)
  For i = 1 To UBound(t)
  If t(i, 1) <> "" Then m(t(i, 1)) = ""
  Next i
  ComboBox1.List = m.keys
  ListBox1.ColumnCount = 4
End Sub

Private Sub ComboBox1_change()
ListBox1.Clear: x = 0
ReDim t1(1 To UBound(t), 1 To 6)
For i = 1 To UBound(t)
  If t(i, 1) = ComboBox1.Text Then
  x = x + 1
  t1(x, 1) = t(i, 1): t1(x, 2) = t(i, 2): t1(x, 3) = t(i, 3): t1(x, 4) = t(i, 6)
  End If
  Next
  ListBox1.List = t1
End Sub
 

Si...

XLDnaute Barbatruc
Salut
bonjour tous:):):):)
en passant par un tablo peut être

Læti :D, pour simplifier, j’aime bien mélanger les tableaux mais Largo risque encore d’être Largué :oops:.

VB:
Option Explicit
Dim D, C As Range
Private Sub UserForm_Initialize()
  Set D = CreateObject("Scripting.Dictionary")
  For Each C In [Os[Date]]: D(C.Value) = "": Next
  ComboBox1.List = D.keys
End Sub

Private Sub ComboBox1_change()
  Dim t(), i As Long
  ReDim t([Os].Rows.Count, 4)
  For Each C In [Os[Date]]
    If C = CDate(ComboBox1) Then _
      t(i, 0) = C: t(i, 1) = C(1, 2): t(i, 2) = C(1, 3): t(i, 3) = C(1, 6): i = i + 1:
  Next
  ListBox1.List = t
End Sub

Remarques : Calvus, le Dico est en lui-même très rapide ; quand on initialise avec .List, la liste commence par être vidée automatiquement
 

Pièces jointes

  • Alimentation Listbox.xlsm
    22.5 KB · Affichages: 48

Calvus

XLDnaute Barbatruc
Bonsoir,

Laeti et Si, merci de vos réponses.
Je suis sûr que vous travaillez pour Sanofi tous les deux.
Vous pensez donc, comme je l'avais lu, qu'il vaut mieux passer par List que par AddItem....?

Si, comment remplacer le nom du tableau par une variable ? Du moins lui donner un nom provisoire.

Par exemple :
g = OS
For Each c In [g[Date]]

Au lieu de
For Each c In [OS[Date]]

Pour l'instant, ça génère une erreur évidemment.
 

Lone-wolf

XLDnaute Barbatruc
Re

Je ne sais pas si c'est correct

VB:
Option Explicit
Dim Molaire As Range, MonChienChien As Range, D As Object

Private Sub UserForm_Initialize()
  Set D = CreateObject("Scripting.Dictionary")
  Set MonChienChien = [Os[Date]]
  For Each Molaire In MonChienChien: D(Format(Molaire.Value, "dd.mmm")) = "": Next
  ComboBox1.List = D.keys
End Sub

EDIT: Test éffectué sans erreurs.
 
Dernière édition:

Calvus

XLDnaute Barbatruc
Re,

Lonewolf, ton code fonctionne en effet, mais pas dans mon cas.
C'est dans la 2nd partie que je voudrais pouvoir changer de nom.
En fait ici :
VB:
Private Sub ComboBox1_change()
  Dim t(), i As Long
  ReDim t([Données].Rows.Count, 4)
g = Données
For Each c In [g[Date]]
    If c = CDate(ComboBox1) Then _
       t(i, 0) = c: t(i, 1) = c(1, 2): t(i, 2) = c(1, 3): t(i, 3) = c(1, 6): i = i + 1:
  Next
  ListBox1.List = t
  End Sub

Mon tableau s'appelle Données et je voudrais pouvoir changer l'initialisation du Combobox en fonction de paramètres de OptionButtons.
L'idée est if OptionButton1 then g=xx
if OptionButton2 then g=yy
Etc..

Et dans ce cas, je n'ai pas réussi à adapter ton code.
Merci
 

Discussions similaires

Réponses
17
Affichages
1 K

Statistiques des forums

Discussions
312 159
Messages
2 085 836
Membres
102 998
dernier inscrit
billABDELL