Scrollbar dans ListBox

laurent45

XLDnaute Occasionnel
Bonjour le Forum,

J'ai une ListBox où les données sont intégrées d'une feuillepar une boucle.
Pour voir toutes les données, j'ai créé ma boucle de telle manière, qu'une fois 12 ligne affichées, la suivante est affichées dans la colonne suivante de la ListBox :
Code:
i = 0: Counter1 = 0
For Each cel In ChqRange
    If cel <> 0 Then
        If Counter1 = 12 Then
            i = i + 1
            Counter1 = 0
        End If
        Me.ListCHQBox.AddItem
        Me.ListCHQBox.Column(i, Counter1) = Format(cel, '# ##0.00')
        Counter1 = Counter1 + 1
    End If
Next cel
MsgBox 'Nombre de ligne de ' & Me.ListCHQBox.Name & _ 
' est de ' & Me.ListCHQBox.ListCount
Le problème, c'est que le nombre de ligne reste égal au nombre d'entrées (j'ai mis la MsgBox en espion). Et donc j'ai une ScrollBars verticale qui s'affiche. C'est ce que je voulais éviter.

En écrivant, je réfléchi au fait que je pourrais entrer les données trois par trois (valeur de ColumnCount de la ListBox), mais il faut que je reconfigure la feuille de calcul où sont les données. Ca me fait modifier les autres macros qui se servent de cette feuille...

Avez-vous une autre idée ?
 

Hervé

XLDnaute Barbatruc
Bonsoir laurent, le forum

Laurent, j'ai pas trouvé d'autres méthodes que celle employé en pièce jointe, a savoir :

Création d'un tableau de 12 lignes contenant les données, et renvoi de ce tableau dans la pièce jointe.

Il doit y avoir plus simple, mais bon j'ai pas mieux en stock pour le moment.

salut
[file name=Classeur1_20051108204736.zip size=10252]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Classeur1_20051108204736.zip[/file]
 

Pièces jointes

  • Classeur1_20051108204736.zip
    10 KB · Affichages: 38

Hellboy

XLDnaute Accro
Bonjour laurent, Hervé mon mentor

Hervé, étand donné que tu m'as challenger avec tes dix lignes, malheureusement je dois avouer que je n'ai pas réussis. Désolé, si tu veux te trouver un autre apprentisse, je vais comprendre.

Je présente quand même une alternative basé sur ta proposition:


Option Base 1

Private Sub CommandButton1_Click()
Unload Me
End Sub

Private Sub UserForm_Initialize()
Dim plage        As Range
Dim bytCol    As Byte
Dim tablo()    As Integer
Set plage = Range('a1:a' & Range('a65536').End(xlUp).Row)
With Application.WorksheetFunction
        bytCol = .RoundUp(plage.Count / 12, 0)
        ListBox1.ColumnCount = .RoundUp(plage.Count / 12, 0)
       
ReDim tablo(1 To 12, 1 To .RoundUp(plage.Count / 12, 0))
       
For nb = 1 To plage.Count
                bytCol = .RoundUp((nb / 12), 0)
                tablo(nb - (bytCol - 1) * 12, bytCol) = plage.Value2(nb, 1)
       
Next nb
End With
ListBox1.List() = tablo
End Sub

[file name=classeur3.zip size=13900]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/classeur3.zip[/file]

Message édité par: Hellboy, à: 09/11/2005 03:42
 

Pièces jointes

  • classeur3.zip
    13.6 KB · Affichages: 28
  • classeur3.zip
    13.6 KB · Affichages: 31
  • classeur3.zip
    13.6 KB · Affichages: 30

laurent45

XLDnaute Occasionnel
Bonjour Hervé, Helloboy,
Bonjour le Forum,

De grace, ne vous battez pas à coup de macros. lol

Euuuuhhhhhh !

C'est quoi, WorksheetFunction ?
Mon Aide Excel97 est largué.

Je pense avoir compris RoundUp :
On prend l'arondi de plage.Count/12 avec 0 décimale :unsure: . C'est ça ? :whistle:

Par contre là je suis largué :
Code:
For nb = 1 To plage.Count
                bytCol = .RoundUp((nb / 12), 0)
                tablo(nb - (bytCol - 1) * 12, bytCol) = plage.Value2(nb, 1)
Next nb
Comment fonctionne la propriété Value2

Moi j'ai fait ça :eek:
[file name=NoScrollInListBox.zip size=19866]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/NoScrollInListBox.zip[/file]
On peut peut-être adapter le code (condensé) de Helloboy.
Notamment par rapport au fait que ma plage est sur 4 colonnes (je ne l'avais pas précisé :eek: ) , et que je souhaite supprimer les valeurs 0 comme dans mon exemple.

Merci

@+

Message édité par: laurent45, à: 09/11/2005 11:10
 

Pièces jointes

  • NoScrollInListBox.zip
    19.4 KB · Affichages: 35

Hellboy

XLDnaute Accro
Bonjour laurent45, Hervé, le Québec, la France, la Reine d'Angleterre, Map Google( ça tourne pas rond ce matin :) )

laurent45, t'inquiète, moi et Hervé on se taquinais hier. C'est mon mentor, alors je n'ai pas de leçon à lui faire. Je vais le laisser continuer, mais je vais d'abord te répondre pour les éléments qui proviennent du fichier classeur3.

WorksheetFunction (les fonctions de feuille), est la commande qui permet d'accèder aux fonctions que tu utilise normalement dans le tableur Excel. En VBA, les noms des fonctions sont en Englais. Donc le RoundUP comme tu l'a bien saisis, est la même chose que arrondi.sup et oui effectivement, en arrondissant qu'avec l'entier.

Je te redonne le bout de code que tu te questionne dessus avec des explications. Si ce n'est pas clair pour tout ou pour une partie tu me le dis.



&nbsp; &nbsp; '&nbsp; &nbsp; Ce qui se passe ici, c'est que la boucle va touner de 1 jusqu'à
&nbsp; &nbsp;
'&nbsp; &nbsp; le nombre d'éléments qui est contenu dans la plage
&nbsp; &nbsp; &nbsp; &nbsp;
For nb = 1 To plage.Count
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
'&nbsp; &nbsp; Le principe que j'ai adopter, toujours basé sur l'exemple de Hervé,
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
'&nbsp; &nbsp; c'est de prendre le chiffe magique 12(nombre d'éléments par colonne)
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
'&nbsp; &nbsp; et de le diviser par l'incément rendu et de l'arrondir au nombre entier supérieur.
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
'&nbsp; &nbsp; Ex:&nbsp; &nbsp; 1/12 = 0.083 et arrondi sup = 1
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
'&nbsp; &nbsp; Ex: 12/12 = 1.000 et arrondi sup = 1
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
'&nbsp; &nbsp; Ex: 13/12 = 1.083 et arrondi sup = 2
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
'&nbsp; &nbsp; Ex: 25/12 = 2.083 et arrondi sup = 3
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
'&nbsp; &nbsp; Etc...
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bytCol = .RoundUp((nb / 12), 0)
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
'&nbsp; &nbsp; La variable a été créer avec 2 dimentions. Une qui dicte le nombre de lignes et l'autre le
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
'&nbsp; &nbsp; nombre de colonne: ReDim tablo(1 To 12, 1 To .RoundUp(plage.Count / 12, 0))
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
'&nbsp; &nbsp; La logique que j'ai pris pour les lignes est celle-ci:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
'&nbsp; &nbsp; Malgré que l'incrément nb va aller audela de 12, je me suis trouver un moyen
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
'&nbsp; &nbsp; d'utiliser le numéro de colonne 'bytCol' pour ajuster les valeurs de ligne qui
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
'&nbsp; &nbsp; doivent toujours être entre 1 et 12 pour chaque colonne. C'est pas facile je sais et
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
'&nbsp; &nbsp; je n'excelle pas particuliairement ds ce domaine. Des examples:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
'&nbsp; &nbsp; NB =&nbsp; &nbsp; 5 - et ((bycol = 1&nbsp; &nbsp; -1) = 0 * 12) =&nbsp; &nbsp; 0
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
'&nbsp; &nbsp; Donc&nbsp; &nbsp; 5 -&nbsp; &nbsp; 0 est le 5ième éléments de la colonne 1
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
'&nbsp; &nbsp; NB = 13 - et ((bycol = 2&nbsp; &nbsp; -1) = 1 * 12) = 12
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
'&nbsp; &nbsp; Donc 13 - 12 est le 1ier&nbsp; &nbsp; éléments de la colonne 2
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tablo(nb - ((bytCol - 1) * 12), bytCol) = plage.Value2(nb, 1)
&nbsp; &nbsp; &nbsp; &nbsp;
Next nb

Message édité par: Hellboy, à: 09/11/2005 14:59
 

Statistiques des forums

Discussions
312 492
Messages
2 088 936
Membres
103 987
dernier inscrit
Doctami